简体   繁体   English

用字符串实例化后,JSONObject返回一个非null值“ null”

[英]JSONObject returns a non null value of “null” after instantiating with string

I need to download JSON and then store it in JSONObject. 我需要下载JSON,然后将其存储在JSONObject中。

I am using org.json.JSONArray. 我正在使用org.json.JSONArray。

Here's all the code in one place: 这是所有代码的一处:

import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class Test
{
    public static JSONObject getJSON()
    {
    try
    {
        URL uri = new URL("http://events.makeable.dk/api/getEvents");
        HttpURLConnection urlConnection = (HttpURLConnection) uri.openConnection();
        if (urlConnection.getResponseCode() != HttpURLConnection.HTTP_OK)
        {
            return null;
        }

        InputStream inputStream = urlConnection.getInputStream();

        if (inputStream != null)
        {
            BufferedReader br = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
            StringBuffer buffer = new StringBuffer();

            try
            {
                String line;
                while ((line = br.readLine()) != null)
                {
                    buffer.append(line);
                }
                br.close();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }



            String json = buffer.toString();

            JSONObject jObject = null;
            try {
                jObject = new JSONObject(json);
            }
            catch (JSONException e) {
                e.printStackTrace();

            }
            int i = 1;
            return jObject;
        }
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
    return null;
}
}

Testing method 测试方法

 @Test
    public void addition_isCorrect() throws Exception
    {
        JSONObject json = Test.getJSON();
        assertNotNull(json);
        assertTrue(json.length()>0);
    }

First assert passes, the second doesn't, cause length == 0. 第一个断言通过,第二个未通过,导致length == 0。

And what I get is this . 我得到的是这个 A JSONObject object with value of string "null". 值为字符串“ null”的JSONObject对象。

No exception is thrown. 没有异常被抛出。 I wrote the contents of buffer to file and validated it, and it validates fine. 我将缓冲区的内容写到文件中并对其进行了验证,它可以很好地进行验证。

Another picture http://i.imgur.com/P03MiEZ.png 另一张图片http://i.imgur.com/P03MiEZ.png

Why is it acting like this? 为什么会这样呢?

Gradle 摇篮

apply plugin: 'com.android.application'

android {

testOptions {
    unitTests.returnDefaultValues = true
}
compileSdkVersion 23
buildToolsVersion "24.0.0 rc3"

defaultConfig {
    applicationId "baaa.myapplication"
    minSdkVersion 23
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.+'
}

Since you are running your code with Junit, it running on the SDK on your computer. 由于使用Junit运行代码,因此代码在计算机上的SDK上运行。 This SDK doesn't provide everything, some are just some skeleton class providing signature of method and documentation but not the code. 该SDK不能提供所有内容,有些只是一些框架类,提供方法和文档的签名,但不提供代码。 So you can't execute directly. 因此,您不能直接执行。

You need to import the library to be able to run it on testing. 您需要导入库才能在测试中运行它。

testCompile 'org.json:json:the_correct_version'

See the version here : 在这里查看版本:

http://mvnrepository.com/artifact/org.json/json http://mvnrepository.com/artifact/org.json/json

This is based on the answer on this post : Android unit test not mocked 这是基于此帖子的答案: 未嘲笑Android单元测试

首先将json字符串转换为JSONArray,然后使用该JSONArray对象获取每个JSONObject

Please have a try of this 请尝试一下

String json = buffer.toString();
JSONObject jsonObject = new JSONObject(json);
JsonObject updatedJson = jsonObject.optJSONObject("json");
return updatedJson;

Dear you first try to get only json = buffer.toString(); 亲爱的您首先尝试仅获取json = buffer.toString(); tell me the value of json. 告诉我json的值。

if your string json is null then problem in file reading code. 如果您的字符串json为null,则文件读取代码有问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM