所以大部分问题都在标题中。
我已经在GCMIntentService中设置了所有内容,以便在一个函数中执行sendbroadcast(intent)。但是当我尝试在另一个中执行此操作时,我收到此错误"在死线程上向处理程序发送消息"。代码是完全一样的,适合一个不适合其他任何想法的人吗?
@Override
protected void onMessage(Context context, Intent intent) {
Log.i(TAG, "Received message");
final String message = intent.getExtras().getString("clicked");
if(message == null)
Toast.makeText(context, getResources().getString(R.string.message_null), Toast.LENGTH_SHORT).show();
else if(message.split("\\|")[0].equals("updateMessageInvisible")) {
onReceiveUpdateMessageInvisible(message);
} else if(message.split("\\|")[0].equals("message")) {
onReceiveMessage(message);
}
}
这个工作正常。
private void onReceiveMessage(String message) {
//Stuff happening (accessing database mostly)
//Notify listView of Message that it has new data
Intent i = new Intent("com.crisis.app.NEW_MESSAGE");
sendBroadcast(i);
}
这个没有用。
private void onReceiveUpdateMessageInvisible(String message) {
//Stuff happening (accessing database again)
//Notify listView of Message that data has been updated
Intent i = new Intent("com.crisis.app.UPDATE_MESSAGE");
sendBroadcast(i);
}
我的广播接收器类:
public final class ReceiveMessage extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent)
{
System.out.println("NOTIFY DATA CHANGED");
//Stuff happening
//Set adapter with array of message
adapter = new MessageRowAdapter(context, values);
listview.setAdapter(adapter);
}
}
当然,我在onPause和onResume上注册和取消注册。
因此,如果有人知道为什么它在一个场景中起作用而在另一个场景中没有差异......
也许你只能在意图中做一个senBroadcast吗?
提前致谢!
已编辑:已添加onMessage of GCMIntentService
的功能答案 0 :(得分:1)
解决了我的问题。
这是因为我在UIThread外面叫Toast。 Asynctask没有解决它,你必须使用:
new Thread() {
public void run() {
mainActivity.runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(context, getResources().getString(R.string.message_null), Toast.LENGTH_SHORT).show();
}
});
}
}.start();