我有一个名为‘支付通’的应用,它提供了aidl,可以是其他应用调用它的服务。我现在的问题是,如果我在远程服务的方法中使用了Toast.Text方法时就会报一下的错误11-15 13:25:12.338: E/JavaBinder(4410): *** Uncaught remote exception! (Exceptions are not yet supported across processes.)
11-15 13:25:12.338: E/JavaBinder(4410): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
11-15 13:25:12.338: E/JavaBinder(4410): at android.os.Handler.<init>(Handler.java:197)
11-15 13:25:12.338: E/JavaBinder(4410): at android.os.Handler.<init>(Handler.java:111)
11-15 13:25:12.338: E/JavaBinder(4410): at android.widget.Toast$TN.<init>(Toast.java:324)
11-15 13:25:12.338: E/JavaBinder(4410): at android.widget.Toast.<init>(Toast.java:91)
11-15 13:25:12.338: E/JavaBinder(4410): at android.widget.Toast.makeText(Toast.java:238)
11-15 13:25:12.338: E/JavaBinder(4410): at com.zyt.remoteservice.PlayService.playfollow(PlayService.java:41)
11-15 13:25:12.338: E/JavaBinder(4410): at com.zyt.remoteservice.PlayService.access$0(PlayService.java:39)
11-15 13:25:12.338: E/JavaBinder(4410): at com.zyt.remoteservice.PlayService$MyBinder.play(PlayService.java:35)
11-15 13:25:12.338: E/JavaBinder(4410): at com.zyt.remoteservice.IPlayService$Stub.onTransact(IPlayService.java:48)
11-15 13:25:12.338: E/JavaBinder(4410): at android.os.Binder.execTransact(Binder.java:351)
11-15 13:25:12.338: E/JavaBinder(4410): at dalvik.system.NativeStart.run(Native Method)我想知道为什么远程调用服务的时候不能在服务中使用Toast.Text。为什么本地应用中调用Service的方法的时候,方法体中可以使用Toast.Text。Android Service远程服务
11-15 13:25:12.338: E/JavaBinder(4410): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
11-15 13:25:12.338: E/JavaBinder(4410): at android.os.Handler.<init>(Handler.java:197)
11-15 13:25:12.338: E/JavaBinder(4410): at android.os.Handler.<init>(Handler.java:111)
11-15 13:25:12.338: E/JavaBinder(4410): at android.widget.Toast$TN.<init>(Toast.java:324)
11-15 13:25:12.338: E/JavaBinder(4410): at android.widget.Toast.<init>(Toast.java:91)
11-15 13:25:12.338: E/JavaBinder(4410): at android.widget.Toast.makeText(Toast.java:238)
11-15 13:25:12.338: E/JavaBinder(4410): at com.zyt.remoteservice.PlayService.playfollow(PlayService.java:41)
11-15 13:25:12.338: E/JavaBinder(4410): at com.zyt.remoteservice.PlayService.access$0(PlayService.java:39)
11-15 13:25:12.338: E/JavaBinder(4410): at com.zyt.remoteservice.PlayService$MyBinder.play(PlayService.java:35)
11-15 13:25:12.338: E/JavaBinder(4410): at com.zyt.remoteservice.IPlayService$Stub.onTransact(IPlayService.java:48)
11-15 13:25:12.338: E/JavaBinder(4410): at android.os.Binder.execTransact(Binder.java:351)
11-15 13:25:12.338: E/JavaBinder(4410): at dalvik.system.NativeStart.run(Native Method)我想知道为什么远程调用服务的时候不能在服务中使用Toast.Text。为什么本地应用中调用Service的方法的时候,方法体中可以使用Toast.Text。Android Service远程服务
解决方案 »
- android 自己的服务,发出通知提示,遇到错误logcat如下,求解???
- Activity退出后,BroadcastReceiver就报错
- Conversion to Dalvik format failed with error 1
- 一个你可能没遇到过的问题
- android 多条通知
- android手机系统对话框的图标,有办法使用吗?
- 图片缓存放sd卡还是安装路径中,各有什么利弊?
- 如何在一个activity中监听开机键是否按下
- fragment如何加载网络数据并直接显示,不是listfragment
- Android问题
- 读者 青年文摘 应用开发 内容获取
- android新闻客户端怎么做?
这个意思是很明显,
子线程是没有消息队列的,需要这样写:new Thread(){
public void run(){
Looper.prepare();
myLooper = Looper.myLooper();
Looper.loop();
}
}.start();
把上面的myLooper传给handlerHandler handler = new MyHandler(myLooper);
1 在 onCreate 方法就是主线程中新建一个 Handler,并实现
2 在子线程中发送消息给第一步的对象发送一个消息,可以附带相关数据
h = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch(msg.what) {
case 0:
Toast.makeText(c, msg.obj.toString(), Toast.LENGTH_LONG).show();
break;
} }
};
Message msg = new Message();
msg.what = 0;
msg.obj = "show text";
h.sendMessage(msg);