2013-11-02 4 views
0

Я использую Asynctask для извлечения некоторых данных из Интернета и использования их в дальнейших расчетах. Я также проверил проверку соединения, он возвращает false, если нет соединения, но он выходит из строя, если есть интернет-соединение, а «сервер выключен». Я хочу отобразить диалоговое окно, чтобы уведомить пользователя о том, что их Интернет испытывает проблемы. Но я не могу понять. Пожалуйста помоги. Заранее спасибо. :)Ошибка приложения при сбое сети/сервер

HttpClient client; 
String URL, re, element; 
JSONObject json, getjson; 
int i, j, statusCode; 
HttpGet httpget; 
HttpResponse response; 
HttpEntity entity; 
InputStream is; 
BufferedReader reader; 
StringBuilder sb, sb1; 

SharedPreferences getinput, passjson; 
ProgressDialog pd; 
Context context = DataRetrieve.this; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 

    super.onCreate(savedInstanceState); 

    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    setContentView(R.layout.dataretrieve); 
    // Bundle gotBasket = getIntent().getExtras(); 
    // URL = gotBasket.getString("key"); 
    getinput = getSharedPreferences("input", 0); 
    URL = getinput.getString("key", null); 

    if (!isNetworkReachable()) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(context); 
     builder.setTitle("No Network Connection"); 
     builder.setMessage("The Network is unavailable. Please check your internet connection."); 
     builder.setPositiveButton("Settings", 
       new DialogInterface.OnClickListener() { 

        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         // TODO Auto-generated method stub 
         Intent m = new Intent(
           android.provider.Settings.ACTION_SETTINGS); 
         startActivity(m); 
        } 
       }); 
     builder.setNegativeButton("Cancel", 
       new DialogInterface.OnClickListener() { 

        @Override 
        public void onClick(DialogInterface arg0, int arg1) { 
         // TODO Auto-generated method stub 
         Intent n = new Intent(DataRetrieve.this, 
           OpTilt.class); 
         startActivity(n); 
        } 
       }); 

     builder.create().show(); 
    } else { 
     Read r = new Read(); 
     r.execute(); 

    } 

} 

private boolean isNetworkReachable() { 
    // TODO Auto-generated method stub 
ConnectivityManager mManager = (ConnectivityManager) context 
      .getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo current = mManager.getActiveNetworkInfo(); 
    if (current != null && current.isConnectedOrConnecting()) { 
     return true; 
    } 

    return false; 
} 

public class Read extends AsyncTask<String, Integer, String> { 
    @Override 
    protected void onPreExecute() { 

     pd = new ProgressDialog(DataRetrieve.this); 
     pd.setTitle("Processing..."); 
     pd.setMessage("Please wait."); 
     pd.setCancelable(false); 
     pd.setIndeterminate(true); 
     pd.show(); 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     // TODO Auto-generated method stub 
     re = null; 
     is = null; 
     json = null; 
     try { 

      httpget = new HttpGet(URL); 
      client = new DefaultHttpClient(); 
      response = client.execute(httpget); 
      entity = response.getEntity(); 
      is = entity.getContent(); 
      statusCode = response.getStatusLine().getStatusCode(); 

     } catch (Exception e) { 

      statusCode = -1; 
      Log.e("log_tag", "Erro http " + e.toString()); 
     } 
     if (statusCode == 200) { 

      try { 
       reader = new BufferedReader(new InputStreamReader(is, 
         "UTF-8"), 8); 
       sb = new StringBuilder(); 
       String line = null; 
       while ((line = reader.readLine()) != null) { 
        sb.append(line + "\n"); 
       } 
       is.close(); 
       re = sb.toString(); 

      } catch (Exception e) { 
       Log.e("log_tag", "Erro conversão " + e.toString()); 
      } 

     } 
     return re; 

    } 

    @Override 
    protected void onPostExecute(String result) { 
     // TODO Auto-generated method stub 
     pd.dismiss(); 
     try { 

      json = new JSONObject(result); 
      getjson = json.getJSONObject("Solar"); 
      String H[] = new String[getjson.length()]; 
      for (i = 0, j = 1; i < getjson.length(); i++, j++) { 
       H[i] = getjson.getString("" + j); 

      } 
      SharedPreferences sendHm; 
      sendHm = getSharedPreferences("parsedata", 0); 
      SharedPreferences.Editor editor = sendHm.edit(); 
      for (int k = 0; k < H.length; k++) { 
       editor.putString("Hm" + k, H[k]); 
      } 
      editor.commit(); 
      Intent f = new Intent(DataRetrieve.this, Calculator.class); 
      startActivity(f); 
      /* 
      * Bundle bundle = new Bundle(); bundle.putStringArray("key1", 
      * H); Intent f = new Intent(DataRetrieve.this, 
      * Calculator.class); f.putExtras(bundle); startActivity(f); 
      */ 

     } 

     catch (JSONException e) { 
      Log.e("log_tag", "Erro dados " + e.toString()); 
     } 

    } 
} 

@Override 
protected void onPause() { 
    // TODO Auto-generated method stub 
    super.onPause(); 
    finish(); 
} 

} 
+1

's неправильно? вы получаете какие-либо ошибки? Все равно ветвь else-if в isNetworkReachable() не нужна – Blackbelt

+0

Вы правы, я ее удалю. Проблема в том, что он обнаруживает, включена ли сеть или нет. Я хочу проверить, работает ли сеть, или нет. Когда сеть опускается, приложение показывает индикатор выполнения, а затем сбой. – renupok92

+0

Я редактировал код и удалял ветку else-if. Но моя проблема остается. – renupok92

ответ

1

изменить ваш postExcute код метода ниже (вы должны проверить результат не является нулевым или пустым)

pd.dismiss(); 
    if(!TextUtils.isEmpty(result)) 
    { 

    try { 

     json = new JSONObject(result); 
     getjson = json.getJSONObject("Solar"); 
     String H[] = new String[getjson.length()]; 
     for (i = 0, j = 1; i < getjson.length(); i++, j++) { 
      H[i] = getjson.getString("" + j); 

     } 
     SharedPreferences sendHm; 
     sendHm = getSharedPreferences("parsedata", 0); 
     SharedPreferences.Editor editor = sendHm.edit(); 
     for (int k = 0; k < H.length; k++) { 
      editor.putString("Hm" + k, H[k]); 
     } 
     editor.commit(); 
     Intent f = new Intent(DataRetrieve.this, Calculator.class); 
     startActivity(f); 
     /* 
     * Bundle bundle = new Bundle(); bundle.putStringArray("key1", 
     * H); Intent f = new Intent(DataRetrieve.this, 
     * Calculator.class); f.putExtras(bundle); startActivity(f); 
     */ 

    } 

    catch (JSONException e) { 
     Log.e("log_tag", "Erro dados " + e.toString()); 
    } 
    } 
+0

Вы могли бы запустить сервер Ping для этого сервера? –

+0

@ Hardik.Thats great.It WORKS! ..: D. Не могли бы вы также объяснить, что делает это утверждение if? И вот еще. Теперь я должен поместить диалог уведомления в оператор else. Правильно? – renupok92

+0

TextUtils.isEmpty() проверяет, что строка пустая или пустая, и вы должны поместить pd.dismiss() из условия, поэтому я отредактировал свой код. – Hardik

Смежные вопросы