2
在我的应用程序,如果在我的AsyncTask方法没有互联网连接我上onPostExecute()以下结果如何主动检查互联网连接或检查android中的连接超时?
“价值无法java.lang.String类型不能转换成JSONArray”。
因此,我需要检查恒定的互联网连接。此外,如果有连接超时,我需要向用户显示一条消息。
那么,我该如何解决这个问题呢?
P.S现在我检查,如果没有互联网从下面的代码
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
public class InternerConnection {
public static boolean isNetworkAvailable(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager
.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
}
连接,但如果有一个不好的网络,我发现了上面引述消息。
EDITED
这里是我的onPostExecute和doInBackground方法
@Override
protected void onPostExecute(String result) {
try {
// dialog.dismiss();
Log.v("esty", "Restaurent output :" + result);
Restaurants rd = new Restaurants();
JSONObject json = new JSONObject(result);
JSONObject obj = json.getJSONObject("Restaurant");
String ID = obj.getString("Id");
String RestaurantBrandId = obj.getString("RestaurantBrandId");
String RestaurantBrand = obj.getString("RestaurantBrand");
/*.......................... Rest of the JSON parsing
..................................................*/
((RestaurantsDetailsGeneralActivity) activity).Bind(rd);
super.onPostExecute(result);
} catch (Exception ex) {
Log.v("error", "Restaurant detail :" + ex.getMessage());
}
}
@Override
protected String doInBackground(Void... params) {
try {
HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams,
TIMEOUT_MILLISEC);
HttpConnectionParams.setSoTimeout(httpParams, TIMEOUT_MILLISEC);
HttpParams p = new BasicHttpParams();
HttpClient httpclient = new DefaultHttpClient(p);
String url = "http://89b69f2297434a0eac543944c620faae.cloudapp.net/RestaurantsApi/Details";
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
nameValuePairs.add(new BasicNameValuePair("restaurantNumber",
AppGlobal.ResturantNumber));
HttpClient httpClient = new DefaultHttpClient();
String paramsString = URLEncodedUtils.format(nameValuePairs,
"UTF-8");
HttpGet httpget = new HttpGet(url + "?" + paramsString);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String responseBody = httpclient.execute(httpget, responseHandler);
return responseBody;
} catch(ConnectException e){
//not getting this exception. Do in background always returns a result.
return e.getMessage();
}catch (SocketTimeoutException ste){
Log.v("esty", ste.toString());
return ste.toString();
}catch (Exception ex) {
return ex.getMessage();
}
}
在这些代码中没有变量'Unable'。抛出的异常究竟在哪里? – EJP
@EJP在onPostExecute中,当它试图创建JSON对象JSON时引发异常 – MabrurChowdhury