Wie handle ich mit kein Internet und verlor die Verbindung in Android?

Ich habe eine Anwendung, die eine Verbindung zum Internet herstellen muss, um einige Aktionen durchzuführen, aber wenn kein Internet verfügbar ist, wird es abstürzen. Ich habe gelesen, dass ich unbedingt versuchen muss. Ich habe versucht, es zu benutzen, wie man in AsyncTask sehen kann, aber es funktioniert nicht. Ich weiß nicht warum Die App stürzt ab. Wie man mit versuchen, fangen, wo man es in meinem Code?

Noch eine Sache, was ist, wenn die App Internet-Verbindung verloren, während Prozess läuft. Wie soll ich mit diesem Ding umgehen, damit meine App nicht abstürzt. Vielen Dank.

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.home); lv = (ListView) findViewById(R.id.mybookslistview); new connectToServer().execute(); } class connectToServer extends AsyncTask<Void, Void, Void>{ CustomListViewAdapter adapter; HttpResponse response; @Override protected Void doInBackground(Void... params) { ids_list.clear(); names_list.clear(); writers_list.clear(); HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost(link); ArrayList<NameValuePair> list = new ArrayList<NameValuePair>(); list.add(new BasicNameValuePair(word, connectionPurpose)); try { post.setEntity(new UrlEncodedFormEntity(list, HTTP.UTF_8)); response = client.execute(post); BufferedReader br = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); sb = new StringBuffer(); String tempVar = ""; while((tempVar = br.readLine()) != null){ sb.append(tempVar); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } //Get data from stringbuffer and put it in array list if(!sb.toString().trim().contentEquals("null")){ content_array = sb.toString().split(","); for(int s = 0; s < content_array.length; s++){ if(content_array[s].contains("-")){ String temp[] = content_array[s].split("-"); ids_list.add(temp[0].trim()); names_list.add(temp[1].trim()); writers_list.add(temp[2].trim()); } } } return null; } @Override protected void onPostExecute(Void result) { super.onPostExecute(result); connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); if(!mWifi.isConnected()){ adb = new AlertDialog.Builder(Home.this); adb.setMessage("لا يوجد إنترنت. قم بتفعيل الإنترنت ثم حاول مرة أخرى."); adb.setPositiveButton("حاول مجددا", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { new connectToServer().execute(); } }); adb.setNegativeButton("إغلاق التطبيق", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); } }); //It shows dialog if no connection adb.create().show(); }else{ list = new ArrayList<Home.ListViewItem>(); for(x = 0; x < ids_list.size(); x++){ list.add(new ListViewItem(){{bookName = names_list.get(x); writerName = writers_list.get(x);}}); } adapter = new CustomListViewAdapter(Home.this, list); lv.setAdapter(adapter); if(sb.toString().trim().contentEquals("null")){ Toast.makeText(Home.this, "لا توجد نتائج.", Toast.LENGTH_LONG).show(); } } 

Das ist mein logcat:

  java.net.UnknownHostException: Unable to resolve host "globalmall.ca": No address associated with hostname at java.net.InetAddress.lookupHostByName(InetAddress.java:424) at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) at java.net.InetAddress.getAllByName(InetAddress.java:214) at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137) at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:670) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:509) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) at readit.Mansour.inc.Home$connectToServer.doInBackground(Home.java:106) at readit.Mansour.inc.Home$connectToServer.doInBackground(Home.java:1) at android.os.AsyncTask$2.call(AsyncTask.java:287) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) at java.util.concurrent.FutureTask.run(FutureTask.java:137) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) at java.lang.Thread.run(Thread.java:856) Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname) at libcore.io.Posix.getaddrinfo(Native Method) at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:55) at java.net.InetAddress.lookupHostByName(InetAddress.java:405) ... 18 more Caused by: libcore.io.ErrnoException: getaddrinfo failed: ENETUNREACH (Network is unreachable) ... 21 more threadid=13: thread exiting with uncaught exception (group=0x40e582a0) 

  • AsyncTask mehrmals ausführen
  • Android: Identifizieren Sie, welchen Code ein AsyncTask ausgeführt wird
  • Übergeben von zwei Parametern zur asynthetischen Methode. wie man?
  • Android AsyncTask nicht auf PostExecute aufrufen
  • ListView onScroll fügt weitere Elemente hinzu
  • Update Fortschrittsbalken in Listenansicht für Multi-Dateien herunterladen
  • Android: ProgressDialog wird nicht in der Adapterklasse angezeigt
  • Android - Richtige Verwendung von AsyncTasks?
  • 3 Solutions collect form web for “Wie handle ich mit kein Internet und verlor die Verbindung in Android?”

    Sie können entweder eine method erstellen oder eine Klasse kann dort sein, wo Sie die Methode als static instanziieren können.

    Hier ist eine Methode namens isConnectedToInternet() die prüft, ob das Internet verbunden ist oder nicht. Rückkehr booleschen auf der Basis der Verbindung zurück zur aufrufenden Funktion.

    Snippet:

      public boolean isConnectedToInternet(){ ConnectivityManager connectivity = (ConnectivityManager)getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivity != null) { NetworkInfo[] info = connectivity.getAllNetworkInfo(); if (info != null) for (int i = 0; i < info.length; i++) if (info[i].getState() == NetworkInfo.State.CONNECTED) { return true; } } return false; } 

    Sie können auf der Basis des Rückgabewerts von isConnectedToInternet() ob AysncTask ausgeführt werden AysncTask oder werfen Sie Popup auf. Hier wurde mir der Benutzer hinzugefügt, um seine Data Settings .

    So etwas wie diese:

      if(isConnectedToInternet()) { // Run AsyncTask } else { // Here I've been added intent to open up data settings Intent intent=new Intent(Settings.ACTION_MAIN); ComponentName cName = new ComponentName("com.android.phone","com.android.phone.NetworkSetting"); intent.setComponent(cName); } 

    Wie du schon erwähnt hast, wenn du die Verbindung dazwischen verlierst. Sie können den Statuscode nach der Antwort von httpclient überprüfen und relevante Informationen an den Benutzer aufrufen. Sie können dieses Snippet unter AysncTask .

      DefaultHttpClient httpclient = new DefaultHttpClient(); HttpResponse response = null; response = httpclient.execute(httpget); int code = response.getStatusLine().getStatusCode(); 
     public class CheckNetClass { public static Boolean checknetwork(Context mContext) { NetworkInfo info = ((ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE)) .getActiveNetworkInfo(); if (info == null || !info.isConnected()) { return false; } if (info.isRoaming()) { // here is the roaming option you can change it if you want to // disable internet while roaming, just return false return true; } return true; } } use this class to check internet availability like if (CheckNetClass.checknetwork(getApplicationContext())) { new GetCounterTask().execute(); } else { Toast.makeText(getApplicationContext(),"Sorry,no internet connectivty",1).show(); } 

    Hoffe das hilft..

    Interessant. Sie haben in Ihrem Stapel diese Zeilen:

     org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) readit.Mansour.inc.Home$connectToServer.doInBackground(Home.java:106) 

    Was bedeutet, dass die beleidigende Linie ist

     response = client.execute(post); 

    Das unterscheidet sich von der Linie, die du erwähnt hast. Überprüfen Sie die Stack-Trace und die Zeile, die es erwähnt. Auch sehen Sie, wenn Sie es beheben, indem Sie Exception fangen. Wenn du es nicht tust, dann hast du ein größeres Problem, denn UnknownHostException ist eine Unterklasse von IOException , die du bereits fängst.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.