在Android中无法使用Aquery获取JsonObject值

时间:2015-06-16 11:27:29

标签: android json aquery

使用这种方法https://code.google.com/p/android-query/wiki/AsyncAPI,我创建了此代码,用于从 api 获取 json 数据,但获取null,为什么?

此代码或方法有问题吗?

//获取代码

public static void fetchCodeData(Context context2) {
    AQuery aQuery = new AQuery(context2);
    if(CheckInternetConnection.isConnectingToInternet()) {
        aQuery.ajax(url, null, JSONObject.class, getGrandCodeCallback());

    }
}

private static AjaxCallback<JSONObject> getGrandCodeCallback() {
    return new AjaxCallback<JSONObject>() {

        private String accessCode;

        @Override
        public void callback(String url, JSONObject object, AjaxStatus status) {
            // get data here
Log.e("Object", "object=" + object.toString());
            if (object != null) {
                try {
                    accessCode = object.getJSONObject("data").getString("code");
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }
    }.header("Content-Type", "application/json; charset=utf-8")
    .header(Client_ID, Client_ID)
    .header(Client_SECRET, Client_SECRET);
}

调用java类活动:

fetchCodeData(getApplicationContext());

Log.e("getCallback",
            "AllOverApplicationVariable.accessCode==="
                + AllOverApplicationVariable.accessCode);

输出看起来像这样,在方法调用之后它返回null但是再次调用方法并获取json值?我不知道 ?为什么这个?

  

06-16 17:58:29.196:E / getCallback(12435):   AllOverApplicationVariable.accessCode ===空

     

06-16 17:58:30.202:E / Object(12435):   对象= { “数据”:{ “状态”: “”, “范围”: “”, “过期”:“2015-06-17   17时58分三十秒“ , ”代码“: ”69e11cfb3243244da5dc6b0aac1515569c06d2d2“, ”RESPONSE_TYPE“: ”代码“, ”CLIENT_ID“: ”1“, ”REDIRECT_URI“: ”HTTP://本地主机/ EADS“}}

AQuery支持多部分帖子,例如将图像上传到服务。只需执行常规POST并输入字节数组Inputstream 你能否明白我的错误,我做错了。

2 个答案:

答案 0 :(得分:1)

使用Aquery很容易从服务器获取数据。如果您使用标题和参数,请执行以下操作:

确保您的清单中包含以下权限。

  <uses-permission android:name="android.permission.INTERNET" /> 
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

和您必须实施的代码,

AQuery aQuery = new AQuery(mcontext);
    Map<String, Object> params = null;
    JSONObject mainJson = new JSONObject();
    try {
    // this is paramters
        mainJson.put("username", "jack");
        mainJson.put("pwd", "jack");
        StringEntity sEntity = new StringEntity(mainJson.toString(), HTTP.UTF_8);
        params = new HashMap<String, Object>();
        params.put(AQuery.POST_ENTITY, sEntity);
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (JSONException e) {
        e.printStackTrace();
    }

    if (CheckInternetConnection.isConnectingToInternet()) {
        aQuery.ajax(Url.urlUserHistoryAdList, params, JSONObject.class, new AjaxCallback<JSONObject>() {
        @Override
        public void callback(String url, JSONObject json, AjaxStatus status) {
            if (json != null) {
            String jsonString=json.toString();
            // Do whatever want in your fetched json from server
            } else {
            // json not getting properly, json data null
            }

        }
        }.header("Content-Type", "application/json; charset=utf-8").header(token, "123456789"));

所以请试试这个,可能会完美地工作。有关Aquery的更多详细信息,请参阅完整文档:https://code.google.com/p/android-query/wiki/AsyncAPI

答案 1 :(得分:0)

@BB:你的最终守则应该是,

public static void fetchCodeData(Context context2) {
    AQuery aQuery = new AQuery(context2);
    if(CheckInternetConnection.isConnectingToInternet()) {
        aQuery.ajax(url, AllOverApplicationVariable.accessCode, getGrandCodeCallback());
    }
}

也许这会奏效。