出问题的地方是一个负责网络请求的父类,大致功能就是调用接口,然后判断接口的返回
如果接口的返回不符合预期就弹出toast提示,提示文字也来自接口的返回。
try {
netResultInfo = JSON.parseObject(string, NetResultInfo.class);
if (){
//接口调用成功
back = netResultInfo.getResult();
}else {
if (needTip){
Message msg = mMsgHandler.obtainMessage(TOAST);
msg.obj = netResultInfo.getMsg();
mMsgHandler.handleMessage(msg);
}
if (needCheckToken){
//当token和服务端不对的情况
}
}
}catch (Exception e){
LogHelper.customLogging(e.toString());
}
return back;
/*省略一些无关代码*/
private void executeByMessage(Message msg){
switch (msg.what){
case TOAST:
if (msg.obj instanceof String){
MyToast.show(mContext, msg.obj.toString());
}
break;
}
}
代码如上,收到消息之后会抛异常java.lang.RuntimeException: Can't toast on a thread that has not called Looper.prepare(),而且抛异常的位置是我给出的代码片里面的try catch,是否可以理解为编译器认为我的handler不在UI线程里面?
这里如果按照编译器给的提示去加上Looper.prepare和Looper.loop的话,就会死循环,导致最后的return back无法被执行到,而我需要这个return来在主线程中执行其他操作,所以无法使用这个办法来实现toast的效果
请问还有别的什么办法可以继续toast,同时不阻塞线程让return可以执行到?
相关环境:
ext {
minSdkVersion=19
compileSdkVersion = 26
targetSdkVersion = 26
buildToolsVersion = "26.0.2"
}
classpath 'com.android.tools.build:gradle:3.2.0' 对应使用gradle-4.6-all.zip