我正在尝试请求JSON资源 . 这段代码工作正常,如果我多次调用它,它会在这一行上抛出一个NullPointer异常
InputStream in = new BufferedInputStream(conn.getInputStream());
再次,这段代码似乎可以正常工作几次 . 但如果它被调用超过两次或三次,它会抛出错误 .
任何的想法?
In this method
public JSONObject makeHttpRequest(String data) {
// request method is POST
try {
urlObj = new URL(someURLHere);
conn = (HttpURLConnection) urlObj.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("Accept-Charset", "UTF-8");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Accept", "application/json");
//conn.setRequestProperty("Content-Length", "" + data.length());
conn.setFixedLengthStreamingMode(data.getBytes().length);
conn.setReadTimeout(10000);
conn.setConnectTimeout(15000);
conn.connect();
wr = new DataOutputStream(conn.getOutputStream());
wr.writeBytes(data);
wr.flush();
wr.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
//Receive the response from the server
InputStream in = new BufferedInputStream(conn.getInputStream());
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
result = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
result.append(line);
}
} catch (IOException e) {
e.printStackTrace();
}
conn.disconnect();
if (result != null) {
Log.d("JSON Parser", "Result string: " + result.toString());
// try parse the string to a JSON object
try {
jObj = new JSONObject(result.toString());
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
} else {
Log.d("JSON Parser", "Result string WAS NULL: ");
}
// return JSON Object
return jObj;
}
The null pointer exception.
JSONCommunicator.makeHttpRequest(JSONCommunicator.java:123)E / AndroidRuntime:FATAL EXCEPTION:AsyncTask#4 java.lang.RuntimeException:在android.os.AsyncTask $ 3.done执行doInBackground()时发生错误(AsyncTask.java:299 )java.util.concurrent.FutureTask $ Sync.innerSetException(FutureTask.java:273)at java.util.concurrent.FutureTask.setException(FutureTask.java:124)at java.util.concurrent.FutureTask $ Sync.innerRun( FutureTask.java:307)在java.util.concurrent.ThreadPoolExecutor的android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:230)的java.util.concurrent.FutureTask.run(FutureTask.java:137) . runWorker(ThreadPoolExecutor.java:1076)java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:569)at java.lang.Thread.run(Thread.java:856)引起:java.lang.NullPointerException在JSONCommunicator.makeHttpRequest(JSONCommunicator.java:141)
Here is the background method used to call the JSONCommunicator.
public class BGDownloadImageList extends AsyncTask<String, Void, Boolean> {
boolean hasResults = false;
@Override
protected void onPreExecute() {
}
@Override
protected Boolean doInBackground(String... params) {
String json = JSONCalls.getImagesJSON());
System.out.println("doInBackground: JSON: " + json);
JSONCommunicator jsonCommunicator = new JSONCommunicator();
if(jsonCommunicator != null) {
JSONObject result = jsonCommunicator.makeHttpRequest(json); //NOTICE THIS IS AN IMAGE REQUEST
System.out.println("doInBackground: result: " + result);
JSONObject dictTowx, dictData;
try {
dictTowx = result.getJSONObject("towXResponse");
dictData = dictTowx.getJSONObject("Data");
if (dictData != null) {
System.out.println("IMAGES " + dictData);
if (dictData.has("Message")) {
if (dictData.getString("Message").equals("no images")) {
System.out.println("NO IMAGES");
}
} else {
hasResults = true;
addImagesToArray(dictData);
}
}
} catch (JSONException e) {
System.out.println("doInBackground: JSON ERROR");
e.printStackTrace();
}
} else {
System.out.println("doInBackground: jsonCommunicator NULL");
}
return hasResults; //passed to OnPostExecute
}
@Override
protected void onPostExecute(Boolean r) {
////...
}
}