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(); 
} 

} 
+0

在这些代码中没有变量'Unable'。抛出的异常究竟在哪里? – EJP

+0

@EJP在onPostExecute中,当它试图创建JSON对象JSON时引发异常 – MabrurChowdhury

回答

0

这似乎是最好的办法是找出当连接失败时,为什么您获得的特定错误,并修复您的代码,以便您可以优雅地处理失败。这可能比尝试监听超时更容易。你可以在你的onPostExecute方法中发布一些代码吗?