为什么我不能解析JSON?

时间:2018-06-18 15:13:16

标签: android json

我很抱歉我是初学者。

我尝试将值放入字符串名[],int age [],int hand [], 但是所有的值都是null。

我不知道哪个部分有问题。因为我是从youtube学到的。

我只想将数据存储到数组中。

谢谢

public class main extends AppCompatActivity {
String oName[] = new String []; 
int oAge [] = new int [];
int oHand [] = new int [];

protected void onCreate(Bundle savedInstanceState) {...}

private class DownloadTask extends AsyncTask<String, Integer, String> {
    @Override
    protected String doInBackground (String... values) { 
        InputStream is = null;
        String result = ""; //Get json?
        String line;
        try {
            URL ua = new URL("https://api.myjson.com/bins/r5kim"); //json address
            HttpURLConnection conn = (HttpURLConnection) ua.openConnection();
            conn.setRequestMethod("GET");
            conn.connect();
            is = conn.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
            while ((line = reader.readLine()) != null) {
                result += line;
            }
            is.close();
           JSONObject jo = new JSONObject(result); //get json
           JSONArray op = jo.getJSONArray("opponents"); //json array?? parse??
            for(int i = 0; i < op.length(); i++) {
                oName[i] = op.getJSONObject(i).getString("name"); //Get null
                oAge[i] = op.getJSONObject(i).getInt("age"); //Get null
                oHand[i] = op.getJSONObject(i).getInt("hand"); //Get null
                }
            } catch (MalformedURLException e) { //exception
                e.printStackTrace();
            } catch (IOException e) { //exception
                e.printStackTrace();
            } catch (JSONException e) { //exception
                e.printStackTrace();
            }
        return null;
    }
}

1 个答案:

答案 0 :(得分:0)

由于你没有发布json字符串,因此很难确定你做错了什么。

我能给你的最好建议是查看gson library这是Android上最常见的json解析器(有更多,这是我使用的)。 how to add reference

观看视频,在谷歌上搜索,也在这里搜索你会发现成千上万的“如何使用gson帖子”,但无论如何,我会为你提供最快的“如何”。

<强> 1。假设你有一个这样的字符串:

{
   "id":1,
   "name":"Little Mouse"
}

<强> 2。创建一个与json字符串

传递的对象匹配的对象
public class MyObject{
    private int id;
    private String name;
    //getters and setters
}

第3。现在初始化gson并将字符串解析为所需的对象

//Initialize Gson object with GsonBuilder (you can customize it, you will learn)
Gson gson = new GsonBuilder().create();

//parse your string using an object matching your output
MyObject myObject = gson.fromJson(myJsonString, MyObject.class);

这很简单,但如果您需要帮助,请自由询问

发布脚本:

您可以使用自定义参数和嵌套类来随意解析任何类。您只需创建一个模型类,其中包含您需要使用相同名称编写的参数(或者您可以显式显示所需的名称)并使用相同的属性类型(int,string,...)

这是你的模特:

public class myJsonModel{

    private List<Opponent> opponents;

    //getters and setters
}

public class Opponent{
    private String name;
    private String age;
    private String hand;
    //getters and setters
}

所以你的结果应该是

myJsonModel myObject = gson.fromJson(myJsonString, myJsonModel.class);