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

3
使用这种方法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===null

06-16 17:58:30.202: E/Object(12435): object={"data":{"state":"","scope":"","expires":"2015-06-17 17:58:30","code":"69e11cfb3243244da5dc6b0aac1515569c06d2d2","response_type":"code","client_id":"1","redirect_uri":"http://localhost/eads"}}

AQuery支持多部分POST请求,例如将图像上传到服务。只需进行常规POST并放置字节数组、输入流即可。请帮我识别错误,我哪里做错了。


首先检查响应字符串中是否包含 data。请分享您的 logcat 跟踪记录并提供更好的解决方案。 - Vinothkumar Arputharaj
你的Json对象中是否包含DATA及其子元素CODE? 最好的解决方案是Vinothkumar所说的。 - Hardik Bharadava
请提供原始英文文本。 - B B
我认为问题出在参数上。你正在传递JSONObject.class,但是你需要在aQuery中使用的数据在AllOverApplicationVariable.accessCode下。所以我认为你需要传递AllOverApplicationVariable.accessCode - Hardik Bharadava
@BB:看,我已经发布了一个答案,也许那会对你有所帮助。 - Hardik Bharadava
2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
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


0

@BB:你的最终代码应该是这样的,

public static void fetchCodeData(Context context2) {
    AQuery aQuery = new AQuery(context2);
    if(CheckInternetConnection.isConnectingToInternet()) {
        aQuery.ajax(url, AllOverApplicationVariable.accessCode, getGrandCodeCallback());
    }
}
也许这样会有效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,