【问题标题】:Call a method from the main activity class to a non activity class java.lang.RuntimeException从主活动类调用方法到非活动类 java.lang.RuntimeException
【发布时间】: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


【解决方案1】:

您不能像普通 Java 类那样创建活动对象,因为活动必须经历活动生命周期才能获得有效的上下文。

相反,您可以创建一个接口侦听器,帮助您与活动进行通信。

您可以了解如何做到这一点here

【讨论】:

    【解决方案2】:

    您应该使用您拥有的上下文在您的活动中调用您的方法。

     ((MainActivity) context).yourMethod();
    

    【讨论】:

    • 这太抽象了。请准确说明它将如何提供帮助。
    猜你喜欢
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    相关资源
    最近更新 更多