【发布时间】:2017-09-19 08:54:12
【问题描述】:
大家好, 我在我的 MainActivity java 中有一个方法,它将标记 googlemap 片段中的位置,但是当我从非活动类调用该方法时,它给了我一个错误
java.lang.RuntimeException:无法在线程内创建处理程序 没有调用 Looper.prepare()
我可以做标记的mainActivity方法是
public void addMarkers(Double lat, Double lng, String name){
MarkerOptions options = new MarkerOptions()
.title(name)
.position(new LatLng(lat, lng));
mGoogleMap.addMarker(options);
}
而我调用该方法的非 Activity 类是
private int parseDataTag(){
try {
JSONArray ja = new JSONArray(jsonData);
JSONObject jo = null;
AdvanceSearch advanceSearch = new AdvanceSearch(); //MainActivity class
for(int i=0;i<ja.length();i++){
jo=ja.getJSONObject(i);
int id = jo.getInt("id");
String name = jo.getString("name");
String lat = jo.getString("latitude");
String lng = jo.getString("longtitude");
advanceSearch.addMarkers(Double.parseDouble(lat), Double.parseDouble(lng), name);
}
return 1;
} catch (JSONException e) {
e.printStackTrace();
}
return 0;
}
【问题讨论】:
-
你阻塞了你的主线程 UI 线程..这就是原因
-
阿克谢先生是什么意思?对不起这里的初学者:)
-
AdvanceSearch advanceSearch = new AdvanceSearch();- 这将为您提供一个完全独立的“MainActivity”实例。它的 UI 永远不会显示,所以添加标记是毫无用处的。如果您想在android中显示Activity,请使用startActivity(new Intent(myCurrentContext, MyNewActivity.class));之类的内容,另请参阅 Shivam Rawat 的回答。
标签: java android class methods