App Force关闭致电DoInbackground以从服务器获取JSON文件



我想在调用服务器上调用PHP文件并将JSON数据存储到Android应用中的SQLITE数据库时创建一个JSON数据。但是,当我单击按钮执行获取过程时,应用程序关闭。这是我的代码示例

 else if (type.equals("getjson")){
        try {
            URL url = new URL(json_url);
            HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
            httpURLConnection.setRequestMethod("GET");
            httpURLConnection.setDoOutput(true);
            httpURLConnection.setDoInput((true));
            InputStream inputStream = httpURLConnection.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "iso-8859-1"));
            String result ="";
            String line="";
            while ((line = bufferedReader.readLine())!=null){
                result += line;
            }
            bufferedReader.close();
            inputStream.close();
      //      return result;
            JSONArray jsonArray = null;
            try {
                jsonArray = new JSONArray(result);
                JSONObject jsonObject;
                for (int i = 0; i < jsonArray.length(); i++) {
                    jsonObject = jsonArray.getJSONObject(i);
                    String tempEid = jsonObject.getString("eid");
                    String tempEname = jsonObject.getString("ename");
                    boolean res = db.insertDb(tempEid, tempEname);
                    return String.valueOf(res);
                }
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

这是错误日志

FATAL EXCEPTION: AsyncTask #1
    Process: com.iamaravind.dhishnareg, PID: 14847
   java.lang.RuntimeException: An error occurred while executing doInBackground()
       at android.os.AsyncTask$3.done(AsyncTask.java:325)
       at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
       at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
       at java.util.concurrent.FutureTask.run(FutureTask.java:242)
       at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
       at java.lang.Thread.run(Thread.java:761)
    Caused by: java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
       at com.iamaravind.dhishnareg.BackgroundWorker.doInBackground(BackgroundWorker.java:41)
       at com.iamaravind.dhishnareg.BackgroundWorker.doInBackground(BackgroundWorker.java:31)
       at android.os.AsyncTask$2.call(AsyncTask.java:305)
       at java.util.concurrent.FutureTask.run(FutureTask.java:237)
       at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243) 
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
       at java.lang.Thread.run(Thread.java:761) 

请检查获得JSON的代码是否正确。

    public void getJson(View view)
{
    String type = "getjson";
    BackgroundWorker backgroundWorker = new BackgroundWorker(this);
    backgroundWorker.execute(type);
}

这是调用函数。

您不应在每种情况下从for循环中返回。

您应该从循环内部删除线return String.valueOf(res);,并使用不同的逻辑处理错误。如果res == false,您可能会返回false,但不要无条件地返回。否则将不使用循环。

最新更新