java - 为什么 Volley 返回空值?

标签 java android android-volley

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/

相关文章:

Android如何发出http请求以获取ImageView的图像链接

android - Volley 错误处理广义化

android - logcat 中的 Volley 错误消息 "null"

java - 在 Spring Boot 中更改了 Rest Service 输入参数

java - 如何使用 ANTLR v3 构建日期/小时语法?

java - 如何在登录表单中添加spring security

java - Android Volley RxJava - 多个请求

java - Univocity - 如何动态提供日期格式

Android SDK "Slide"能力

Android 布局,高度以百分比表示