2014-12-15 2 views
0

Прежде всего: Я больше в Android программированияКак передать объект обслуживания в MyActivity?

я создал простой TCP сокета с помощью службы.

Клиент подключается к серверу при нажатии кнопки в MainActivity.

Сейчас я хочу создать PrintWriter объект в MainActivity используя Socket объект обслуживания.

Я познакомился с объектами с Service до Activity с использованием JSON.

Я искал через Интернет, но не мог понять, как я могу его передать.

Пожалуйста, дайте мне простой пример кода, чтобы передать объект.

MyService.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); 
    } 

    }} 

MainActivity.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.java (как протащить пройденный объект Ie clientsocket и использовать его для создания объекта PrintWriter)

+0

как это JSON, и может транслировать намерение с помощью простой дополнительной строки. Кроме того, если вы привязываете активность, вы можете вернуть метод интерфейса «sendData (String)», чтобы все, что клиент мог отправить в json – eduyayo

+0

Если возможно, вы можете дать мне простой код! –

+0

intents: http://android-coding.blogspot.com.es/2011/11/pass-data-from-service-to-activity.html – eduyayo

ответ

0

Пожалуйста, подумайте об использовании библиотеки автобусов событий, таких как greenrobot EventBus :-) Эти работы удивляют, когда дело доходит до передачи данных между элементами приложения и довольно безопасны в использовании.

+0

Я хочу передать объект сокета на активность здесь ... не данные. Я хочу использовать его для создания объекта PrintWriter, используя его в Activity –

0

Я лично воспользуюсь следующим решением: How to send event from Service to Activity with Otto event bus? с Отто 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)); 
+1

Это новая концепция для меня ... позвольте мне изучить ее. Btw продолжает раскачиваться –

 Смежные вопросы

  • Нет связанных вопросов^_^