Android JSONObject始终返回“null”

时间:2017-04-17 06:35:39

标签: java android json

我正在尝试从我的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");}
}

抱歉我的英语不好。希望你理解:)

2 个答案:

答案 0 :(得分:1)

猜猜,因为你没有显示足够的代码。

最有可能在收到结果之前检查结果。 AsyncTask与主线程异步运行,您必须等到它完成才能使用结果。

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

答案 1 :(得分:0)

你需要初始化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;
    }

试试这个