2017-09-19 4 views
0

Bonjour les gars, J'ai une méthode sur mon java MainActivity qui va marquer les endroits sur le fragment googlemap, mais quand j'appelle cette méthode d'une classe d'activité non, il me donne une erreurAppelez une méthode de la classe d'activité principale à une classe de non-activité java.lang.RuntimeException

java.lang.RuntimeException: Impossible de créer gestionnaire intérieur thread qui n'a pas appelé Looper.prepare()

Ma méthode de MainActivity qui peut faire un marqueur est

public void addMarkers(Double lat, Double lng, String name){ 
    MarkerOptions options = new MarkerOptions() 
      .title(name) 
      .position(new LatLng(lat, lng)); 
    mGoogleMap.addMarker(options); 
} 

et ma classe non d'activité qui appelle la méthode est

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; 
} 
+0

Vous bloquez votre interface utilisateur de mainthread thread..that est pourquoi – Akshay

+0

que voulez-vous dire monsieur Akshay? Désolé débutant ici :) –

+0

'AdvanceSearch advanceSearch = nouvelle AdvanceSearch();' - cela vous donnera une instance complètement autonome de votre "MainActivity". Son interface utilisateur ne sera jamais affichée, donc ajouter des marqueurs est tout à fait inutile. Si vous voulez montrer une 'Activity' dans' android', utilisez quelque chose comme 'startActivity (new Intent (monEntierContext, MyNewActivity.class));' Voir aussi la réponse de Shivam Rawat. – 0X0nosugar

Répondre

1

Vous ne pouvez pas créer un objet d'une activité comme une classe Java normale parce que les activités doivent passer par le cycle de vie de l'activité pour atteindre valide le contexte. Au lieu de cela, vous pouvez créer un écouteur d'interface qui vous aidera à communiquer de nouveau avec votre activité.

Vous pouvez savoir comment faire here

-1

Vous devriez appeler votre méthode dans votre activité en utilisant le contexte que vous avez.

((MainActivity) context).yourMethod(); 
+0

C'est trop abstrait. S'il vous plaît expliquer exactement comment cela va aider. – iceman