我在服务中的声明不会循环。

时间:2013-01-04 10:54:17

标签: android json for-loop println

我已经提供了更新我的应用程序的服务,它应该从网上获取JSON,如果数据是新的,则将其插入数据库中:

protected void onHandleIntent(Intent intent) {


            datasource = new pollDataSource(this);
            datasource.open();


            // Creating JSON Parser instance
            JSONParser jParser = new JSONParser();

            // getting JSON string from URL
            JSONObject json = jParser.getJSONFromUrl(url);


            try {

                // Getting Array of Contacts
                domanda = json.getJSONArray(TAG_DOMANDE);
                System.out.println("inside the try");
                // looping through All Contacts
                System.out.println("length: " + domanda.length());
                for(int i = 0; i < domanda.length(); i++){
                    System.out.println("in the for!: " + i);
                    JSONObject c = domanda.getJSONObject(i);
                    System.out.println("raw: "+ c.getString(TAG_CATEGORIA));
                    // Storing each json item in variable
                    String id = c.getString(TAG_ID);
                    String testoDomanda = c.getString(TAG_TESTODOMANDA);
                    String categoria = c.getString(TAG_CATEGORIA);
                    int quanteRisposte = c.getInt(TAG_QUANTERISPOSTE);
                    System.out.println("string: "+categoria);

                    datasource.createCategoria(categoria);
                    //TEOTODO inserimento della categoria, se necessario
                    //TEOTODO inserimento della domanda                 


                    for(int ua = 0; ua < quanteRisposte; ua++){
                    //TEOTODO inserimento dei testi risposte.   

                    }



                }
            } catch (JSONException e) {
              //  e.printStackTrace();
            }
...

所有println的logcat是:

01-04 10:47:06.213: I/System.out(653): inside the try
01-04 10:47:06.223: I/System.out(653): length: 3
01-04 10:47:06.233: I/System.out(653): in the for!: 0
01-04 10:47:06.233: I/System.out(653): raw: zodiaco
01-04 10:47:26.773: I/System.out(653): inside the try
01-04 10:47:26.773: I/System.out(653): length: 3
01-04 10:47:26.773: I/System.out(653): in the for!: 0
01-04 10:47:26.785: I/System.out(653): raw: zodiaco
01-04 10:47:47.414: I/System.out(653): inside the try
01-04 10:47:47.423: I/System.out(653): length: 3
01-04 10:47:47.423: I/System.out(653): in the for!: 0
01-04 10:47:47.423: I/System.out(653): raw: zodiaco
01-04 10:48:07.963: I/System.out(653): inside the try
01-04 10:48:07.963: I/System.out(653): length: 3
01-04 10:48:07.963: I/System.out(653): in the for!: 0
01-04 10:48:07.973: I/System.out(653): raw: zodiaco

你可以看到我有两个问题,第一个,for应该做3次迭代,但它只做一次......为什么?

和第二个,如果我打印出原始数据,我得到的是“zodiaco”,这是我从网上获得的一个类别,但是如果我将它分配给一个字符串变量,那么,println只是忽略整行......任何人都是一个想法? :d

提前感谢。

1 个答案:

答案 0 :(得分:0)

你的for循环可能会遇到异常,你决定用空的catch块忽略它。

处理异常时,通常有两种情况:

  • 要么你不知道该怎么办=&gt;不要抓住它并让调用代码处理它(如果你想避免强制关闭,你需要在某个阶段捕获它)
  • 或者你可以用它做一些有用的事情(比如重试或让​​用户知道有问题),在这种情况下你可以抓住并处理它。

当你还处于开发阶段时,只需记录就可以了,但至少你会得到有关正在发生的事情的反馈。

仅使用空的catch语句吞下异常(几乎)绝不是一个好的选择。