2017-08-08 1 views
2

I Global Initialized Arraylist in Programm haben, und hinzugefügt die Breite und Länge der JSON Data.In die makeJsonPopularDestinationDetailPage() der Wert in der Arraylist hinzugefügt und es ist ganz gut, wie ich innerhalb der Funktion erwartete. Aber wenn ich versuche, auf die andere Funktion zuzugreifen, zeigt es null. Warum zeigt die Arraylist nicht Null an?Arraylist wird angezeigt Null auch nach Daten drängen hinein

PopularDestinationGridDetail

private void makeJsonPopularDestinationDetailPage() { 

     RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext()); 
     String URL1 = Navigation_URL_Popular_Destination + "/1"; 

     StringRequest stringRequest = new StringRequest(Request.Method.GET, URL1, 
       new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 
         try { 


          // 
          JSONObject jsonObject = new JSONObject(response); 
          title = jsonObject.getString("title"); 
          description = jsonObject.getString("description"); 
          latitude = jsonObject.getString("latitude"); 
          longitude = jsonObject.getString("longitude"); 
          templeTitle.setText(title); 
          textDescription.setText(description); 

          destination_list_google_map.add(new ClassDestinationGoogleMap(latitude, longitude)); 
          addMarker(); 


         } catch (JSONException e) { 
          Toast.makeText(getApplicationContext(), "Fetch failed!", Toast.LENGTH_SHORT).show(); 
          e.printStackTrace(); 
         } 

// 
//      System.out.println("Wow" + destination_list_google_map.get(0).getLatitude()); 
//      System.out.println("Wow" + destination_list_google_map.get(0).getLongitude()); 




        } 

       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       Toast.makeText(getApplicationContext(), error.toString(), LENGTH_LONG).show(); 
      } 
     }) { 

      @Override 
      public Map<String, String> getHeaders() throws AuthFailureError { 
       Map<String, String> headers = new HashMap<String, String>(); 
       // headers.put("Authorization", "Bearer " + access_token); 
       headers.put("Content-Type", "application/x-www-form-urlencoded"); 
       return headers; 
      } 

     }; 


     requestQueue.add(stringRequest); 

    } 





    @Override 
    public void onClick(View v) { 
     int id = v.getId(); 

     if (id == R.id.destination_button_gallery) { 
      fragmentManager = getSupportFragmentManager(); 
      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
      fragmentTransaction.replace(R.id.fragment_changer_detaildestination, new FragmentImageGallery()) 
        .commit(); 


      imageButtongallery.setBackground(ContextCompat.getDrawable(getApplicationContext(), R.drawable.destination_circular_shape_icon_withclick)); 
      imageButtongallery.setImageResource(R.mipmap.destination_imagebutton_gallery_onclick); 

      ButtonVideo.setBackground(ContextCompat.getDrawable(getApplicationContext(), R.drawable.destination_circular_shape_icon_without_click)); 
      ButtonVideo.setImageResource(R.mipmap.destination_video_button_without_click); 


      ButtonAudio.setBackground(ContextCompat.getDrawable(getApplicationContext(), R.drawable.destination_circular_shape_icon_without_click)); 
      ButtonAudio.setImageResource(R.mipmap.destination_audio_button_without_click); 


     } else if (id == R.id.destination_button_video) { 
      fragmentManager = getSupportFragmentManager(); 
      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
      fragmentTransaction.replace(R.id.fragment_changer_detaildestination, new FragmentVideoDestination()).commit(); 


      imageButtongallery.setBackground(ContextCompat.getDrawable(getApplicationContext(), R.drawable.destination_circular_shape_icon_without_click)); 
      imageButtongallery.setImageResource(R.mipmap.destination_imagebutton_gallery_without_click); 

      ButtonVideo.setBackground(ContextCompat.getDrawable(getApplicationContext(), R.drawable.destination_circular_shape_icon_withclick)); 
      ButtonVideo.setImageResource(R.mipmap.destination_video_button_onclick); 


      ButtonAudio.setBackground(ContextCompat.getDrawable(getApplicationContext(), R.drawable.destination_circular_shape_icon_without_click)); 
      ButtonAudio.setImageResource(R.mipmap.destination_audio_button_without_click); 


     } else if (id == R.id.destination_button_audio) { 

      fragmentManager = getSupportFragmentManager(); 
      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
      fragmentTransaction.replace(R.id.fragment_changer_detaildestination, new FragmentAudioDestination()).commit(); 

      imageButtongallery.setBackground(ContextCompat.getDrawable(getApplicationContext(), R.drawable.destination_circular_shape_icon_without_click)); 
      imageButtongallery.setImageResource(R.mipmap.destination_imagebutton_gallery_without_click); 

      ButtonVideo.setBackground(ContextCompat.getDrawable(getApplicationContext(), R.drawable.destination_circular_shape_icon_without_click)); 
      ButtonVideo.setImageResource(R.mipmap.destination_video_button_without_click); 


      ButtonAudio.setBackground(ContextCompat.getDrawable(getApplicationContext(), R.drawable.destination_circular_shape_icon_withclick)); 
      ButtonAudio.setImageResource(R.mipmap.destination_audio_button_onclick); 


     } else { 

      fragmentManager = getSupportFragmentManager(); 
      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
      fragmentTransaction.replace(R.id.fragment_changer_detaildestination, new FragmentImageGallery()) 
        .commit(); 

     } 


    } 


    void addMarker(){ 



     Double x = Double.valueOf(destination_list_google_map.get(0).getLatitude()); 
     Double y = Double.valueOf(destination_list_google_map.get(0).getLongitude()); 


     System.out.println("x"+x); 
     System.out.println("y"+y); 


     LatLng populardestination = new LatLng(x, y); 
     mMap.addMarker(new MarkerOptions().position(populardestination).title("Suman")); 
     CameraPosition cameraPosition = new CameraPosition.Builder().target(populardestination).zoom(15).build(); 
     mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); 





    } 




    @Override 
    public void onMapReady(GoogleMap googleMap) { 

     // System.out.println("object" + destination_list_google_map.get(position).getLatitude()); 

//  System.out.println("Wow" + destination_list_google_map.get(0).getLatitude()); *****why null, idon't get it 
//  System.out.println("Wow" + destination_list_google_map.get(0).getLongitude()); 

// 
     // destination_list_google_map.get(0).getLatitude(); 

// 
//  Double x = Double.valueOf(27.6644); 
//  Double y = Double.valueOf(85.3188); 
//  Double x = Double.valueOf(destination_list_google_map.get(0).getLatitude()); 
//  Double y = Double.valueOf(destination_list_google_map.get(0).getLongitude()); 

     mMap = googleMap; 


//  LatLng populardestination = new LatLng(x, y); 
//  googleMap.addMarker(new MarkerOptions().position(populardestination).title("Suman")); 
//  CameraPosition cameraPosition = new CameraPosition.Builder().target(populardestination).zoom(15).build(); 
//  googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); 

    } 

ClassDestinationGoogleMap

public class ClassDestinationGoogleMap implements Serializable { 

    public String latitude; 
    public String longitude; 

    public ClassDestinationGoogleMap(String lati, String longi) { 
     latitude = lati; 
     longitude = longi; 


    } 


    public String getLatitude() { 
     return latitude; 
    } 

    public String getLongitude() { 
     return longitude; 
    } 
} 

ich nicht den genauen Grund bekommen, warum es zeigt null.Can jemand es erklären?

+0

mehr Code benötigen, um Figur dies aus –

+0

@ Kapsym aktualisiert Überprüfung – seon

+0

Ist "OnMapReady" eine der Funktionen, wo Sie nicht auf das Array zugreifen können? – ShahiM

Antwort

1

Aus dem Code, den Sie gepostet haben, scheint es wahrscheinlich, dass es sich um ein Timing-Problem handelt.

, d. H. Die Array-Liste wird im Abschlussblock einer HTTP-Anfrage ausgefüllt. Und Sie versuchen, die Werte in der Arraylist während des Ereignisses onMapReady zuzugreifen.

Das Problem hier ist, dass wenn OnMapReady aufgerufen wird, ist es mehr als wahrscheinlich, dass die Anforderung noch nicht abgeschlossen ist, und Ihr Array ist immer noch null. Sie müssen also sicherstellen, dass die Anfrage abgeschlossen ist, bevor Sie auf die ArrayList zugreifen.

Zum Beispiel, wenn Sie Markierungen auf der Karte hinzufügen möchten, anstatt es in onMapReady tun, können Sie eine andere Funktion erstellen, die innerhalb des Anforderungsabschlussblock aufgerufen wird:

public void onResponse(String response) { 
    ... 
    destination_list_google_map.add(new ClassDestinationGoogleMap(latitude, longitude)); 
    ... 
    addMarkers(); 
} 

... 
... 

@Override 
public void onMapReady(GoogleMap googleMap) { 
    //save map object to variable 
    mMap = googleMap; 
} 

void addMarkers() { 
    //ArrayList will have values here 
    Double x = Double.valueOf(destination_list_google_map.get(0).getLatitude()); 
    Double y = Double.valueOf(destination_list_google_map.get(0).getLongitude()); 

    LatLng populardestination = new LatLng(x, y); 
    mMap.addMarker(new MarkerOptions().position(populardestination).title("Suman")); 
} 
+0

ja mann, die größe ist gegeben. void addMarker() { System.out.println ("Hinzufügende Markierung" + destination_list_google_map.size()); } – seon

+0

Der Code zum Hinzufügen von Markern kann überall platziert werden. Die einzige Bedingung ist, dass es aufgerufen werden muss * AFTER * die Antwort wird empfangen. Sie können also die Funktion 'addMarkers()' in Ihrer Aktivität erstellen und sie aus der onResponse Ihrer Anfrage aufrufen. – ShahiM

+0

Wie kann ich den Wert auf onMapReady ???? – seon

Verwandte Themen