如何将服务对象传递给 MyActivity



>首先:我在Android编程方面更大

我已经使用服务创建了简单的TCP套接字。

当触发MainActivity中的按钮时,客户端连接到服务器。

现在我想使用服务对象在MainActivity中创建PrintWriter对象Socket

我知道可以使用 JSON 将对象从 Service 传递到Activity

我在互联网上搜索,但不知道如何通过它。

请给我简单的代码示例来传递对象。

我的服务.java

public class MyService extends Service{
public static Socket clientsocket;
public static PrintWriter printer;
SendMessage sender;
@Override
public void onCreate() {
Toast.makeText(this, "Created", Toast.LENGTH_LONG).show();
super.onCreate();
}
@Override
public void onDestroy() {
Toast.makeText(this, "Stoped", Toast.LENGTH_LONG).show();
if(clientsocket!=null){
        try{
        clientsocket.close(); 
        Toast.makeText(this, "Socket Closed", Toast.LENGTH_LONG).show();
        }catch(IOException e){
            e.printStackTrace();
        }
    }
  }
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Toast.makeText(this, "Running", Toast.LENGTH_LONG).show();
    SendMessage sender=new SendMessage();
    sender.execute();
    return super.onStartCommand(intent, flags, startId);
}
@Override
public IBinder onBind(Intent arg0) {
    return null;
}
class SendMessage extends AsyncTask<Void, Void, Void>{
    @Override
    protected Void doInBackground(Void... params) {
        try {
            clientsocket = new Socket("192.168.237.1", 6666);
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    @Override
    protected void onPostExecute(Void result) {
        if(clientsocket!=null){
            Toast.makeText(MyService.this, "Connected", Toast.LENGTH_LONG).show();
        }else{
            Toast.makeText(MyService.this, "Lost Connection", Toast.LENGTH_LONG).show();
        }
        super.onPostExecute(result);
    }
   }}

主要活动.java

public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}
public void start(View v){
    startService(new Intent(this,MyService.class));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
     getMenuInflater().inflate(R.menu.main, menu);
     return true;
}
class PrintMessage extends AsyncTask<Void, Void, Void>{
    @Override
    protected Void doInBackground(Void... arg0) {
        return null;
    }
}
@Override
protected void onDestroy() {
    stopService(new Intent(this,MyService.class));
    super.onDestroy();
}}

现在我需要MyService.java(如何传递对象,即在这种情况下Socket对象clientsocket)和MainActivity(如何检索传递的对象,即)和MainActivity.java(如何检索传递的对象,即)的清晰完整的代码。 clientsocket并使用它来创建PrintWriter对象)

请考虑使用事件总线库,例如绿色机器人事件总线:-)当涉及到在应用程序元素之间传递数据并且使用起来非常安全时,这些工作会令人惊叹。

我个人会使用以下解决方案 如何使用 Otto 事件总线将事件从服务发送到活动? 使用 Otto Event Bus,只需发送包含数据的类实例。

public class MainActivity extends ActionBarActivity
{
    @Override
    protected void onResume()
    {
        super.onResume();
        SingletonBus.INSTANCE.getBus().register(this);
    }
    @Override
    protected void onPause()
    {
        SingletonBus.INSTANCE.getBus().unregister(this);
        super.onPause();
    }
    ...
}

// you might need to change this as linked in the above link: 
// https://stackoverflow.com/questions/15431768/how-to-send-event-from-service-to-activity-with-otto-event-bus
public enum SingletonBus
{
    INSTANCE;
    private Bus bus;
    private SingletonBus()
    {
        this.bus = new Bus(ThreadEnforcer.ANY);
    }
    public Bus getBus()
    {
        return bus;
    }
}

public class MyEvent
{
    private Data data;
    public MyEvent(Data data)
    {
        this.data = data;
    }
    public Data getData()
    {
        return data;
    }
}

SingletonBus.INSTANCE.getBus().post(new MyEvent(data));

相关内容

  • 没有找到相关文章

最新更新