我想在调用服务器上调用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,但不要无条件地返回。否则将不使用循环。