gpt4 book ai didi

android - ArrayList 即使在将数据插入其中后仍显示 Null

转载 作者:行者123 更新时间:2023-11-29 01:08:02 26 4
gpt4 key购买 nike

我在程序中全局初始化了 Arraylist,并从 JSON 数据中添加了纬度和经度。在 ma​​keJsonPopularDestinationDetailPage() 中,值被添加到 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;
}
}

I don't get the exact reason ,why it is showing null.Can anyone explain it?

最佳答案

从您发布的代码来看,这似乎是一个时间问题。

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

这里的问题是,当 onMapReady 被调用时,很有可能 Request 还没有完成,你的数组仍然是 null。所以在访问arrayList之前需要确保请求已经完成。

例如,如果您想向 map 添加标记,而不是在 onMapReady 中进行,您可以创建另一个将在请求完成 block 内调用的函数:

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

关于android - ArrayList 即使在将数据插入其中后仍显示 Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45559765/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com