После отлова исключения эмулятор по-прежнему показывает «Приложение неожиданно остановилось» - PullRequest
0 голосов
/ 06 октября 2011
private InputStream getISFromURL(String url) {
  //post
  InputStream is=null;
  try {
    HttpParams params=new BasicHttpParams();
    HttpConnectionParams.setConnectionTimeout(params, 3000);
    HttpConnectionParams.setSoTimeout(params, 3000);
    HttpClient httpClient=new DefaultHttpClient(params);
    HttpPost httpPost=new HttpPost(url);
    HttpResponse httpResponce=httpClient.execute(httpPost);
    HttpEntity httpEntity=httpResponce.getEntity();
    is=httpEntity.getContent();
  } catch (Exception e) {
    this.context.startActivity(new Intent(this.context, Splash.class));
    Log.d("imsoft", "getJSONdataFromURL ="+e.toString());
  }
  return is;
}

Этот код работает хорошо, если интернет-соединение живо, но когда я отключаю свою систему (которая также отключает эмулятор), этот метод генерирует UnknownHostException, и он ловится в блоке catch, открывая мой Splash.java (заставку), но в в то же время он также дает мне «Приложение неожиданно остановлено. Пожалуйста, повторите попытку».

Поэтому, пожалуйста, дайте мне ответ или предложения, которые могут мне помочь.

Ответы [ 3 ]

1 голос
/ 06 октября 2011

Как вы и просили, вот мой комментарий в более формальном ответе:

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

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

Попробуйте набрать adb logcat в оболочке, чтобы увидеть, что и где происходит.

0 голосов
/ 06 октября 2011

Вы можете использовать эту функцию:

public static boolean isOnline(Context mContext) {
    ConnectivityManager cm = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    if (netInfo != null && netInfo.isConnectedOrConnecting())
        return true;
    else
        return false;
}

для контроля, онлайн вы или нет.Вы должны добавить разрешение, чтобы сделать это:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
0 голосов
/ 06 октября 2011

Я думаю, что это вызывает исключение, потому что после блока catch он подходит к этому выражению return is;, которое считается нулевым, если код вызывает исключение.

...