2016-04-15 59 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(); 
}