2017-08-08 19 views
2

后显示空我)在全球范围内初始化ArrayList的计划中,并添加从JSON Data.In的makeJsonPopularDestinationDetailPage(纬度和经度值ArrayList中添加,这是相当好,因为我期望在函数内。但是当我尝试访问另一个函数时,它显示为空。为什么arraylist不显示null?的ArrayList甚至推到的数据是

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

我没有得到确切的原因,为什么它显示null.Can人 解释呢?

+0

需要更多的代码来图这一点 –

+0

@kapsym更新检查 – seon

+0

是'OnMapReady'的,你是不是能够访问阵列的功能之一? – ShahiM

回答

1

从您发布的代码,它很可能是它是一个时间问题。

即该ArrayList被填充在HTTP请求的完成块。而且,您正试图在onMapReady事件期间访问arraylist中的值。

这里的问题是,当onMapReady被调用,它是更有可能的请求尚未完成,你的阵列仍然空。所以你需要在访问arrayList之前确保请求已经完成。

举例来说,如果你想标记添加的,而不是在onMapReady做的地图,你可以创建一个将请求完成块内部调用另一个函数:

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

是的男人,尺寸是给定的。 空隙addMarker(){ 的System.out.println( “Addoing标记” + destination_list_google_map.size()); } – seon

+0

添加标记的代码可以放在任何地方。唯一的条件是它必须被称为* AFTER *收到响应。所以你可以在你的activity中创建'addMarkers()'函数,并从请求的onResponse中调用它。 – ShahiM

+0

我如何设置值为onMapReady? – seon