I am having what should be a simple problem
In my activity I make a async function call
json = jsonParser.post(URL, params);
my class + function looks like this
public class json {
static InputStream stream = null;
static JSONObject jObj = null;
static String json = "";
public json() {
// TODO Auto-generated constructor stub
}
public JSONObject post(String url, List<NameValuePair> NameValuePairs) {
try {
String paramString = URLEncodedUtils
.format(NameValuePairs, "utf-8");
Log.d("AsyncTask","1:Startet http");
HttpParams httpParameters = new BasicHttpParams();
// Set the timeout in milliseconds until a connection is established.
// The default value is zero, that means the timeout is not used.
int timeoutConnection = 3000;
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
// Set the default socket timeout (SO_TIMEOUT)
// in milliseconds which is the timeout for waiting for data.
int timeoutSocket = 5000;
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
HttpPost httpPost = new HttpPost(url);
Log.d("AsyncTask","1: http Post");
httpPost.setEntity(new UrlEncodedFormEntity(NameValuePairs));
Log.d("AsyncTask","1: send http.post");
HttpResponse httpResponse = httpClient.execute(httpPost);
Log.d("AsyncTask", " receive Response");
// make sure response is good (Int 200)
if(httpResponse.getStatusLine().getStatusCode() == 200){
HttpEntity httpEntity = httpResponse.getEntity();
if (httpEntity != null) {
Log.d("AsyncTask", " get Entity");
stream = httpEntity.getContent();
json = convertStreamToString(stream);
Log.d("AsyncTask", "Convert Json");
stream.close();
} else {
Log.d("AsyncTask","1: no internet connection");
}
Log.d("AsyncTask", "After Convert Json");
} else {
Log.e("AsyncTask: ", "server not found error code: " + String.valueOf(httpResponse.getStatusLine().getStatusCode()));
}
} catch (UnsupportedEncodingException e) {
Log.d("AsyncTask","2: no internet connection");
e.printStackTrace();
} catch (ClientProtocolException e) {
Log.d("AsyncTask","3: no internet connection");
e.printStackTrace();
} catch (IOException e) {
Log.d("AsyncTask","7: no internet connection");
e.printStackTrace();
}
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("AsyncTask","error1");
//Log.e("JSON Parser", "Error parsing data " + e.toString());
}
Log.e("AsyncTask","retun to getgame");
//Log.d("JSON_POST", jObj.toString());
// return JSON String
return jObj; // <--- this is the problem
}
My problem is when the server is not responding with an ok, my function is returning null.(making the app terminate) I would somehow like to catch this and return to my async where I want to post a toast with the error code... so that the User knows to try again later.
can anyone help me on how to do this?
Instead of returning jObj
blindly, you can try to check whether it's null, and if it is, assign it a new blank JSONObject
. Replace that last line with:
if (jObj != null) {
return jObj;
} else {
return new JSONObject();
}
That should at least remove the null error.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.