如何在JSONParser中正确解析字符串为整数?

时间:2017-06-04 14:36:01

标签: android json parsing

我有这段代码来检索数据库中的值:

            if(json != null){
            try{
                result = json.getJSONArray("monthly");
                if(!result.toString().equals("[]")) {
                    for (int i = 0; i < result.length(); i++) {
                        JSONObject source = result.getJSONObject(i);
                        String month = source.getString("month");
                        String counted = source.getString("counted");

                        Toast.makeText(getActivity(), month, Toast.LENGTH_SHORT).show();

                    }

注意

  

String month = source.getString(&#34; month&#34;);

快速返回刚刚在2秒左右后加载的值。但是当我尝试使用此代码将该值解析为整数时:

  

int month = Integer.parseInt(source.getString(&#34; month&#34;));

完成需要很长时间。那么我要问的是你如何正确地将该数据解析为整数?

编辑: JSON

  

{&#34;每月&#34;:[{&#34;一个月&#34;:&#34; 2&#34;&#34;计数&#34;:&#34; 1&#34; },{&#34;一个月&#34;:&#34; 3&#34;&#34;计数&#34;:&#34; 1&#34;},{&#34;一个月&#34 ;: #&34; 4&#34;&#34;计数&#34;:&#34; 1&#34;},{&#34;一个月&#34;:&#34; 5&#34;&#34 ;计数&#34;:&#34; 5&#34;},{&#34;一个月&#34;:&#34; 6&#34;&#34;计数&#34;:&#34; 2&# 34;},{&#34;一个月&#34;:&#34; 7&#34;&#34;计数&#34;:&#34; 3&#34;},{&#34;一个月&#34 ;:&#34; 8&#34;&#34;计数&#34;:&#34; 1&#34;},{&#34;一个月&#34;:&#34; 9&#34;,& #34;计数&#34;:&#34; 2&#34;},{&#34;一个月&#34;:&#34; 10&#34;&#34;计数&#34;:&#34; 1&#34;},{&#34;一个月&#34;:&#34; 11&#34;&#34;计数&#34;:&#34; 3&#34;},{&#34;一个月& #34;:&#34; 12&#34;&#34;计数&#34;:&#34; 2&#34;}]}

1 个答案:

答案 0 :(得分:0)

您可以在JSONObject上使用getInt:

source.getInt("month") 

性能始终是一个问题,但是在解析数据时会根据大小产生相当大的影响。如果您尝试在UI线程上执行此操作,则不应该这样做。而是使用一些后台线程。 AsyncTask是Android在后台线程上运行代码的特定方式,然后将结果传递回UI线程。

编辑:

这是我的代码,并且使用getString与getInt没有显着的性能影响,因此代码中的其他地方一定存在问题。

    try {
        JSONObject json =
            new JSONObject("{'monthly':[{'month':'2','counted':'1'},{'month':'3','counted':'1'},{'month':'4','counted':'1'},{'month':'5','counted':'5'},{'month':'6','counted':'2'},{'month':'7','counted':'3'},{'month':'8','counted':'1'},{'month':'9','counted':'2'},{'month':'10','counted':'1'},{'month':'11','counted':'3'},{'month':'12','counted':'2'}]}");
        JSONArray result = json.getJSONArray("monthly");
        for (int i = 0; i < result.length(); i++) {
            JSONObject source = result.getJSONObject(i);
            int month = source.getInt("month");
            String counted = source.getString("counted");

            Toast.makeText(this,
                           "" + month,
                           Toast.LENGTH_SHORT)
                 .show();
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }