Volley 返回 null
值。
我收到了 Volley 的响应,但当我尝试返回 imageurl 时,它显示 null
值。不知道为什么请帮忙。
源代码如下:
public class Mediaimage {
String imageurl;
Context context;
public Mediaimage(Context context) {
this.context = context;
}
public String getimageurl(String id){
String url="http://www.mytre.com/wp-json/wp/v2/media/"+id;
RequestQueue requestqueue = Volley.newRequestQueue(context);
StringRequest stringrequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
imageurl=response;
JSONObject jsonObject = new JSONObject(response);
String j = jsonObject.getString("guid");
jsonObject = new JSONObject(j);
imageurl =jsonObject.getString("rendered");
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
requestqueue.add(stringrequest);
Log.i("imageurl",""+imageurl);
return imageurl;
}
}
NewsView.java文件代码
public class Imageloader implements Runnable {
@Override
public void run() {
Mediaimage mediaimages = new Mediaimage(NewsView.this);
contentimage_again = mediaimages.getimageurl(featuredmedia);
// contentimage_again = getimageurl(featuredmedia);
Log.i("jhggggggggggggggggj",""+contentimage_again);
synchronized (this){
try {
wait(4000);
// Log.i("jhggggggggggggggggj",""+contentimage_again);
ImageLoader.getInstance().displayImage(contentimage_again, contentimage);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// Toast.makeText(getApplicationContext(), "hehe"+contentimage_again, Toast.LENGTH_SHORT).show();
}
}
最佳答案
你不能用这样的函数获取imageUrl。因为请求运行异步,在一段时间后它通过 onResponse 方法收到。您必须更改您的方法以无效向用户显示一些加载,并且当调用 onReponse 时从 onResponse 方法继续您的过程。您需要一个回调接口(interface)并将其返回到fragment或activity。从 onResponse 中,您可以从服务器获取 imageURl,然后将其设置为您的 imageView。
这里是回调接口(interface)类:
public interface ResponseCallback {
void onImageResponse(String imageURL);
}
媒体图像类:
public class MediaImage {
String imageurl;
Context context;
ResponseCallback callback;
public Mediaimage(Context context, ResponseCallback callback) {
this.context = context;
this.callback=callback;
}
public void getimageurl(String id){
String url="http://www.mytre.com/wp-json/wp/v2/media/"+id;
RequestQueue requestqueue = Volley.newRequestQueue(context);
StringRequest stringrequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
imageurl=response;
JSONObject jsonObject = new JSONObject(response);
String j = jsonObject.getString("guid");
jsonObject = new JSONObject(j);
imageurl =jsonObject.getString("rendered");
callback.onImageResponse(imageurl);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
requestqueue.add(stringrequest);
}
}
这是图像加载器类:
public class Imageloader implements Runnable {
@Override
public void run() {
Mediaimage mediaimages = new Mediaimage(NewsView.this);
mediaimages.getimageurl(featuredmedia, new ResponseCallback() {
@Override
public void onImageResponse(String imageUrl) {
ImageLoader.getInstance().displayImage(imageUrl, contentimage);
}
});
// contentimage_again = getimageurl(featuredmedia);
Log.i("jhggggggggggggggggj", "" + contentimage_again);
// Toast.makeText(getApplicationContext(), "hehe"+contentimage_again, Toast.LENGTH_SHORT).show();
}
}
关于java - 为什么 Volley 返回空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42111913/