Android JSONObject 总是返回"null"



我正在尝试从我的Web服务器解析JSON。获取数据不是问题,但是当我尝试创建JSONObject时,它总是返回null

我的JSON:

{"apikey":"c34750f19843vo45239o","error":false}

和我的java:

private class GetJSON extends AsyncTask<Void, Void, Void> {
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }
    @Override
    protected Void doInBackground(Void... arg0) {
        JSONResult = null;
        HttpHandler sh = new HttpHandler();
        sh.HTTPMethod = DefaultMethod;
        // Making a request to url and getting response
        String jsonStr = sh.makeServiceCall(ApiUrl+tmpUrl);
        System.out.println("Response from "+ApiUrl+tmpUrl+": " + jsonStr);
        if (jsonStr != null) {
            try {
                JSONResult = new JSONObject(jsonStr);
            } catch (final JSONException e) {
                System.out.println("Json parsing error: " + e.getMessage());
            }
        } else {
            System.out.println("Couldn't get json from server.");
        }
        return null;
    }
    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        clearRequest();
    }
}

我尝试过使用jsonStr.toString(),但结果相同。我也可以在Java中记录我的JSON字符串,但没有解析。

这是返回null的地方:

if(JSONResult != null && JSONResult.has("apikey")) {
    ApiKey = JSONResult.getString("apikey");
    System.out.println("Successfully got ApiKey: "+ApiKey);
}else{
    if(JSONResult == null){System.out.println("Is Null");}
}

对不起,我的英语不好。希望您理解:(

只是猜测,因为您没有显示足够的代码。

很可能在收到结果之前检查结果。AsyncTask不同步到您的主线程,您必须等到完成后才能使用结果。

实际上,这就是为什么有onPostExecute方法的原因。这是处理结果的正确位置。

您需要初始化jsonobject jsonresult = null;在您的Doinbackground方法

   @Override
    protected Void doInBackground(Void... arg0) {
        JSONObject JSONResult = null;
        HttpHandler sh = new HttpHandler();
        sh.HTTPMethod = DefaultMethod;
        // Making a request to url and getting response
        String jsonStr = sh.makeServiceCall(ApiUrl+tmpUrl);
        System.out.println("Response from "+ApiUrl+tmpUrl+": " + jsonStr);
        if (jsonStr != null) {
            try {
                JSONResult = new JSONObject(jsonStr);
            } catch (final JSONException e) {
                System.out.println("Json parsing error: " + e.getMessage());
            }
        } else {
            System.out.println("Couldn't get json from server.");
        }
        return null;
    }

尝试此

最新更新