![](/img/trans.png)
[英]Android java.lang.IllegalStateException, not on the main thread
[英]java.lang.IllegalStateException: Not on the main thread
当服务器上的制造商的表中没有可用数据并且数据对象为空时,我试图从FragmentActivity映射中的Goolge映射中删除标记,但数据对象为空,但出现以下错误。 我该如何解决?
错误:
07-12 20:53:05.697: E/AndroidRuntime(26364): FATAL EXCEPTION: IntentService[IntentService]
07-12 20:53:05.697: E/AndroidRuntime(26364): Process: com.bustracker, PID: 26364
07-12 20:53:05.697: E/AndroidRuntime(26364): java.lang.IllegalStateException: Not on the main thread
07-12 20:53:05.697: E/AndroidRuntime(26364): at com.google.l.a.ce.b(Unknown Source)
07-12 20:53:05.697: E/AndroidRuntime(26364): at com.google.maps.api.android.lib6.d.ct.a(Unknown Source)
07-12 20:53:05.697: E/AndroidRuntime(26364): at com.google.maps.api.android.lib6.d.aq.a(Unknown Source)
07-12 20:53:05.697: E/AndroidRuntime(26364): at com.google.android.gms.maps.model.internal.t.onTransact(SourceFile:51)
07-12 20:53:05.697: E/AndroidRuntime(26364): at android.os.Binder.transact(Binder.java:380)
07-12 20:53:05.697: E/AndroidRuntime(26364): at com.google.android.gms.maps.model.internal.zzi$zza$zza.remove(Unknown Source)
07-12 20:53:05.697: E/AndroidRuntime(26364): at com.google.android.gms.maps.model.Marker.remove(Unknown Source)
07-12 20:53:05.697: E/AndroidRuntime(26364): at com.bustracker.GetLLRD.onHandleIntent(GetLLRD.java:120)
07-12 20:53:05.697: E/AndroidRuntime(26364): at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
07-12 20:53:05.697: E/AndroidRuntime(26364): at android.os.Handler.dispatchMessage(Handler.java:102)
07-12 20:53:05.697: E/AndroidRuntime(26364): at android.os.Looper.loop(Looper.java:145)
07-12 20:53:05.697: E/AndroidRuntime(26364): at android.os.HandlerThread.run(HandlerThread.java:61)
GetLLRD IntentService类中的onHandleIntent方法:
protected void onHandleIntent(Intent intent) {
if (data != null && !data.isEmpty()) {
Intent intent1 = new Intent(this, Map.class);
intent1.putExtra("list_data", data);
intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent1);
} else if (Map.markerMap != null
&& !Map.markerMap.isEmpty()) {
Iterator<HashMap.Entry<Integer, Marker>> it = Map.markerMap
.entrySet().iterator();
while (it.hasNext()) {
HashMap.Entry<Integer, Marker> entery = it
.next();
int key = entery.getKey();
Map.marker = Map.markerMap.get(key);
System.out.println("test marker " + Map.marker );
//Line 120.
Map.marker .remove();
Map.markerMap.remove(key);
// Marker value = entery.getValue();
}
}
地图片段活动:
public class Map extends FragmentActivity implements OnMapReadyCallback {
GoogleMap map;
static HashMap<Integer, Marker> markerMap = new HashMap<Integer, Marker>();
static Marker marker = null;
...
}
快速解决此异常的方法是将地图更新放入Runnable
以便在主线程上执行(下面的代码)。 但是,对该问题的真正答案是您需要重新考虑设计。 IntentService
代码在活动中使用静态数据是不安全的。 使用IntentService
的原因是IntentService
? 映射更新必须在主线程上运行。 IntentService
的目的之一是执行无法在主线程上完成且需要后台线程的操作。 当IntentService
包含需要主线程的代码时,为什么IntentService
使用它呢?
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
Iterator<HashMap.Entry<Integer, Marker>> it = Map.markerMap
.entrySet().iterator();
while (it.hasNext()) {
HashMap.Entry<Integer, Marker> entery = it
.next();
int key = entery.getKey();
Map.marker = Map.markerMap.get(key);
System.out.println("test marker " + Map.marker );
//Line 120.
Map.marker.remove();
// Remove from map using iterator
it.remove();
// Marker value = entery.getValue();
}
}
});
您无法从后台线程启动活动。 onHandleIntent
代码在后台线程中执行。 要从主线程开始活动,您需要向主线程循环程序发布可运行程序。
protected void onHandleIntent(Intent intent) {
if (data != null && !data.isEmpty()) {
Handler mainHandler = new Handler(getApplicationContext.getMainLooper());
mainHandler.post(new Runnable() {
@Override
public void run() {
Intent intent1 = new Intent(this, Map.class);
intent1.putExtra("list_data", data);
intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent1);}
});
} else if (Map.markerMap != null && !Map.markerMap.isEmpty()) {..........}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.