2017-07-12 9 views
0

アクティビティクラス内のサービスクラスからソケット接続にアクセスしようとしています。emitデータをサーバにオンラインで接続しています。 アクティビティ内のサービスクラスからのソケット接続にアクセスする

MyService.java 

    public class MyService extends Service { 

     @Override 
     public IBinder onBind(Intent Intent) 
     { 
      return null; 
     } 

     @Override 
     public void onCreate() { 
      this.isRunning = false; 
      this.backgroundThread = new Thread(myTask); 
     } 

     private Runnable myTask = new Runnable() { 
      @Override 
      public void run() { 


       try { 
        // instantiate socket connection 
        mSocket = IO.socket(AppConstants.CHAT_SERVER_URL); 

        // establish the socket connection 
        mSocket.connect(); 

       } catch (URISyntaxException e) { 
        throw new RuntimeException(e); 
       } 
      } 
     }; 

     @Override 
     public int onStartCommand(Intent intent, int flags, int startId) { 
      if(!this.isRunning) { 
       this.isRunning = true; 
       this.backgroundThread.start(); 
      } 

      return START_STICKY; 
     } 

     public Socket getSocket() { 
      return mSocket; 
     } 
    } 



    MyApplication.java 

    public class MyApplication extends Application { 

     @Override 
     public void onCreate() { 
      super.onCreate(); 

      Intent background = new Intent(this, MyService.class); 
      startService(background); 
     } 
    } 


    MainActivity.java 

    public class MainActivity extends Activity { 


     Socket mSocket; 
     MyService mservice; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      mSocket = mservice.getSocket(); 

     } 

     public void sendMessage(View view){ 
      mSocket.emit("new messaged", "this"); 
     } 

    } 

上記MainActivitysendMessage方法は、接続が起動時に確立されても、トリガされたときに、ヌル誤差を与えます。

私は、私がbind接続できるとmSocket接続にアクセスするには、アクティビティクラス内ServiceConnectionクラスを使用することは非常に多くを知っている、しかし、私はそれにアクセスするにはこの方法またはbroadcast receiverを使用しています。すべてのアイデアは、最善の離れてソケット接続にアクセスすることができますサービスクラスを境界には、アクティビティクラス。

答えて

0

あなたはこの上NullPointerExceptionを取得する必要があります:

mSocket = mservice.getSocket(); 

あなたは何にもmserviceを割り当てることはありませんので!

+0

私はサービスクラスから 'getSocket()'メソッドにアクセスしています。そのクラス内で既に設定されていますが、これより良い方法を提案してください。 – George

+0

'mservice'をまず何かに設定する必要がありますその上で 'getSocket()'を呼び出すことができます! –

関連する問題