2016-04-15 61 views
1

我想在pubnub訂閱時收到成功回調時切換按鈕的狀態,如果消息等於預設字符串togglebutton.setchecked(true) 否則它將調用敬酒,並說連接問題 怎麼能這樣在異步過程中完成 UPDATE:如何更改pubnub中的togglebutton狀態訂閱回調

試圖亨利的建議後:

try { 
    pubnub.subscribe("reply", new Callback() { 
     public void successCallback(String channel, Object message) { 
      System.out.println(message); 

      //Match your String Here and set Toggle Btn status here 
      if(message.toString().equals("RL1:1")){ 
       //Set True 
       toggleButton1.setChecked(true); 
      } 
      toggleButton1.setBackgroundResource(R.drawable.light100); 
     } 

     public void errorCallback(String channel, PubnubError error) { 
      System.out.println(error.getErrorString()); 
     } 
    }); 
} 
catch (PubnubException e) { 
    e.printStackTrace(); 
} 

我收到了以下日誌貓當我發送郵件(RL1 :1):

04-15 19:42:10.594 17016-17188/wadihmaaloufengineering.smarthome E/AndroidRuntime: FATAL EXCEPTION: Subscribe-Manager-115480684-6 
Process: wadihmaaloufengineering.smarthome, PID: 17016 
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 
at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:7599) 
at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:1139) 
at android.view.ViewGroup.invalidateChild(ViewGroup.java:5033) 
at android.view.View.invalidateInternal(View.java:12973) 
at android.view.View.invalidate(View.java:12937) 
at android.view.View.invalidate(View.java:12921) 
at android.widget.TextView.checkForRelayout(TextView.java:8142) 
at android.widget.TextView.setText(TextView.java:4862) 
at android.widget.TextView.setText(TextView.java:4686) 
at android.widget.TextView.setText(TextView.java:4661) 
at android.widget.ToggleButton.syncTextState(ToggleButton.java:81) 
at android.widget.ToggleButton.setChecked(ToggleButton.java:75) 
at wadihmaaloufengineering.smarthome.lighting$1.successCallback(lighting.java:88) 
at com.pubnub.api.Callback.successWrapperCallbackV2(Unknown Source) 
at com.pubnub.api.PubnubCoreAsync.invokeSubscribeCallbackV2(Unknown Source) 
at com.pubnub.api.PubnubCoreAsync.access$600(Unknown Source) 
at com.pubnub.api.PubnubCoreAsync$2.v2Handler(Unknown Source) 
at com.pubnub.api.PubnubCoreAsync$2.handleResponse(Unknown Source) 
at com.pubnub.api.SubscribeWorker.process(Unknown Source) 
at com.pubnub.api.Worker.run(Unknown Source) 
at java.lang.Thread.run(Thread.java:818) 
+0

分享一些pubnub subdcribe回調代碼片段 – Herry

回答

1

我還沒有使用Pubnub但是你可以在你的代碼這樣做: 注:我假設,這個回調是在主線程

在你活動類:

private ToggleButton mBtnToggle; 

/* Subscribe to the demo_tutorial channel */ 
try { 
    pubnub.subscribe("demo_tutorial", new Callback() { 
     public void successCallback(String channel, Object message) { 
      System.out.println(message); 
      //Match your String Here and set Toggle Btn status here 
      if(message.str.equal(strData)){ 
       //Set True 
       mBtnToggle.setChecked(true) 
      } 
     } 

     public void errorCallback(String channel, PubnubError error) { 
      System.out.println(error.getErrorString()); 
     } 
    }); 
} 
catch (PubnubException e) { 
    e.printStackTrace(); 
} 
+1

你好,謝謝,謝謝你的迴應我試過上面的代碼,但應用程序已停止工作,我收到以下日誌貓: –

+0

這是由於CallBack不在主線程使用'Handler'或'runOnUiThread'。 – Herry

1

這裏是工作代碼:

try { 
    pubnub.subscribe("reply", new Callback() { 
     public void successCallback(String channel, Object message) { 
      System.out.println(message); 
      msg = message.toString(); 
      //Match your String Here and set Toggle Btn status here 
      lighting.this.runOnUiThread(new Runnable(){ 
       @Override 
       public void run(){ 
        if(msg.equals("RL1:1")){ 
         //Set True 
         toggleButton1.setChecked(true); 
         toggleButton1.setBackgroundResource(R.drawable.light100); 
        } 
       } 
      }); 
     }; 

     public void errorCallback(String channel, PubnubError error) { 
      System.out.println(error.getErrorString()); 
     } 

    }); 
} 
catch (PubnubException e) { 
    e.printStackTrace(); 
}