android - JsonRequester 库从内部函数访问监听器

标签 android json listener android-volley

我正在玩 JsonRequester Library它使用 volley 从 URLS 获取 JSON 数据。

我的问题是,如何从 getJson 函数内部的 onResponse 监听器返回 JSONObject?

这是我的 JsonHelpers 类:

import android.content.Context;
import android.support.annotation.Nullable;

import com.alirezaafkar.json.requester.interfaces.Methods;
import com.alirezaafkar.json.requester.interfaces.Response;
import com.alirezaafkar.json.requester.requesters.JsonObjectRequester;
import com.alirezaafkar.json.requester.requesters.RequestBuilder;
import com.android.volley.VolleyError;
import org.json.JSONObject;

public class JSONHelper {

    public static int USER_REQUEST = 0;

    public JSONObject getJson(Context context, String url){

        JsonObjectRequester mUserRequester;




        JsonObjectListener objectListener = new JsonObjectListener();

        mUserRequester = new RequestBuilder(context)
                .requestCode(USER_REQUEST)
                .showError(true)
                .buildObjectRequester(objectListener);

        mUserRequester.request(Methods.GET, url);


    }

    private class JsonObjectListener extends Response.SimpleObjectResponse {
        @Override
        public void onResponse(int requestCode, @Nullable JSONObject jsonObject) {

        }

        @Override
        public void onErrorResponse(int requestCode, VolleyError volleyError, @Nullable JSONObject errorObject) {
            //Error (Not server or network error)
        }

        @Override
        public void onFinishResponse(int requestCode, VolleyError volleyError, String message) {
            //Network or Server error
        }

        @Override
        public void onRequestStart(int requestCode) {
            //Show loading or disable button
        }

        @Override
        public void onRequestFinish(int requestCode) {
            //Hide loading or enable button
        }
    }

}

最佳答案

回调

public interface Callback {
    public void onResponse(JsonObject jsonObject);
}

当您需要 JsonObject

时的类
getJson(this, url, new Callback(){
    public void onResponse(JsonObject jsonObject){
         // Do what you want here
}
});

GetJson

public void getJson(Context context, String url, Callback callBack){
        JsonObjectRequester mUserRequester;
        JsonObjectListener objectListener = new JsonObjectListener();

        mUserRequester = new RequestBuilder(context)
                .requestCode(USER_REQUEST)
                .showError(true)
                .buildObjectRequester(objectListener);

        mUserRequester.request(Methods.GET, url);
    }

JsonObjectListener

private class JsonObjectListener extends Response.SimpleObjectResponse {
    private Callback callback;
    public JsonObjectListener(Callback callBack){
         this.callBack = callBack;
    }

    @Override
    public void onResponse(int requestCode, @Nullable JSONObject jsonObject){
        callback.onResponse(jsonObject);
    }
 }

它应该可以工作,告诉它是否解决了您的问题。

关于android - JsonRequester 库从内部函数访问监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36769702/

相关文章:

android - 如何使 console.log 在 android 原生 react 中工作

javascript - D3 : Hyperlinks in tree diagram

.net - 将特定 .net 对象公开为 JSON

jms - Spring DefaultMessageListenerContainer - 监听器不读取 Websphere MQ 上的消息

java - 实现多个接口(interface)的类的替代方案?

java - 如何将 ArrayList<Integer> 转换为 int[]?

java - 暂停和恢复可运行线程

java - 如何将 Intent 发送到 gameView

javascript - 如何使用 $q 返回一个 http 请求异步的值(使用 typescript)

java - 手动调用监听器方法的坏习惯