2011-12-19 5 views
0

Мое приложение выполнило HTTP-запрос, в котором он передает данные в php-скрипт, а затем ждет ответа. Когда у телефона есть подключение к Интернету, но соединение действительно плохое (т. Е. Плохой сигнал или маршрутизатор не подключен к Интернету), приложение просто заставляет закрывать. Как я могу остановить это?Force Close при ожидании ответа в Интернете

До сих пор эти шаги он принимает

  1. Person прессы кнопка отправки

  2. Это запускает задачу Async, что делает, что телефон имеет соединение (плохие соединения проходят это)

  3. Выполняет HTTP-сообщение

  4. Ожидает ответа

Все эти шаги окружены попытками захвата, которые обрабатывают исключения, однако я все еще получаю силу закрывается.

Вот код AsyncTask

private class checkDatabase extends AsyncTask<String, Void, Boolean> { 

    ProgressDialog progressDialog; 

    protected void onPreExecute() { 
     super.onPreExecute(); 
     // Starting the progress dialog 
     progressDialog = ProgressDialog.show(Login.this, "", 
       "Connecting. Please wait...", true); 

    } 

    protected Boolean doInBackground(String... info) { 
     // TODO Auto-generated method stub 

     ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo netInfo = cm.getActiveNetworkInfo(); 

     if (netInfo != null && netInfo.isConnected()) { 

      String us = info[0]; 
      String ps = info[1]; 

      String responseText; 

      if (us.equals("") || ps.equals("")) { 
       //No username or password 
       return false; 
      } else { 
       try { 
        // Create a new HttpClient and Post Header 
        HttpClient httpclient = new DefaultHttpClient(); 
        HttpPost httppost = new HttpPost(
          "http://www.myfirstagent.com/android/loginquery.php"); 

        // Add your data 
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(
          2); 
        nameValuePairs.add(new BasicNameValuePair("username", 
          us)); 
        nameValuePairs.add(new BasicNameValuePair("password", 
          ps)); 
        httppost.setEntity(new UrlEncodedFormEntity(
          nameValuePairs)); 
        HttpResponse response; 
        // Execute HTTP Post Request 
        try { 
         response = httpclient.execute(httppost); 
         responseText = EntityUtils.toString(response 
           .getEntity()); 
        } catch (Exception e) { 
         //problem connecting 
         return false; 

        } 

        if (responseText.equals("accept")) { 
         return true; 
        } else if (responseText.equals("decline")) { 
         //invalid username or password 
         return false; 

        } else { 
         //something went wrong 
         return false; 
        } 

       } catch (Exception e) { 

        //something went wrong 
        return false; 
       } 
      } 

     } else { 
      //No connection 
      return false; 
     } 

    } 

    protected void onPostExecute(Boolean result) { 

     // Dismissing the progress dialog 
     if (progressDialog.isShowing()) 
      progressDialog.dismiss(); 
     super.onPostExecute(result); 
    } 
} 
+0

Какое исключение вызывает замыкание силы? –

+0

У вас есть разрешение на доступ в Интернет? –

+0

Я не уверен, что такое исключение, потому что это происходит в местах без соединения, и я не уверен, как имитировать плохое соединение, поскольку у меня есть только хорошая связь у меня дома. – TomRichardson

ответ

0

Просто проверьте, если ответ, если нуль.

Если вы хотите поймать все, что может произойти, вы можете поймать Throwable.

Узнайте, как читать трассировку стека, это лучший совет для вас. Вы должны понять, где ваша программа терпит неудачу, и как они могут понять, почему они терпят неудачу и исправляют их.

+0

Я могу это сделать, однако я не могу получить сообщения об ошибках, так как я не могу воссоздать эту ошибку дома с полным подключением. – TomRichardson

+1

включить режим полета. – Snicolas

+0

Я сделал это, однако он не получает те же ошибки. Даже когда я удаляю чек для подключения. – TomRichardson