Android 尝试捕获未捕获异常

Android 尝试捕获未捕获异常,android,try-catch,toast,Android,Try Catch,Toast,如果网络呼叫不可用,我正在尝试阻止应用程序崩溃 如果网络呼叫可用,则我想单击按钮继续进行下一个活动。渔获量应显示一个祝酒词 然而,应用程序仍在崩溃,而不是显示祝酒词 这是我的密码:- public void GoToStation(View v) { try { Intent myIntent = new Intent( MainActivity.this, CustomizedListView

如果网络呼叫不可用,我正在尝试阻止应用程序崩溃

如果网络呼叫可用,则我想单击按钮继续进行下一个活动。渔获量应显示一个祝酒词

然而,应用程序仍在崩溃,而不是显示祝酒词

这是我的密码:-

public void GoToStation(View v)
{

        try {

            Intent myIntent = new Intent(
                             MainActivity.this, CustomizedListViewStation.class);
            startActivityForResult(myIntent, 0);
        } catch (Exception myIntent) {
            // TODO Auto-generated catch block
            Context context = getApplicationContext();
            CharSequence text = "There is no data for this Community";
            int duration = Toast.LENGTH_LONG;
            Toast toast = Toast.makeText(context, text, duration);
            toast.show();
        }
日志:-

08-01 12:36:56.944: E/AndroidRuntime(32556): FATAL EXCEPTION: main
08-01 12:36:56.944: E/AndroidRuntime(32556): java.lang.RuntimeException: Unable to start     activity     ComponentInfo{police.uk.greatermanchesterpoliceandroid/police.uk.greatermanchesterpoliceandroid.CustomizedListViewStation}: android.os.NetworkOnMainThreadException
08-01 12:36:56.944: E/AndroidRuntime(32556):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100)
08-01 12:36:56.944: E/AndroidRuntime(32556):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
08-01 12:36:56.944: E/AndroidRuntime(32556):    at android.app.ActivityThread.access$600(ActivityThread.java:140)
08-01 12:36:56.944: E/AndroidRuntime(32556):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227)
08-01 12:36:56.944: E/AndroidRuntime(32556):    at android.os.Handler.dispatchMessage(Handler.java:99)
08-01 12:36:56.944: E/AndroidRuntime(32556):    at android.os.Looper.loop(Looper.java:137)
08-01 12:36:56.944: E/AndroidRuntime(32556):    at android.app.ActivityThread.main(ActivityThread.java:4898)
08-01 12:36:56.944: E/AndroidRuntime(32556):    at java.lang.reflect.Method.invokeNative(Native Method)
08-01 12:36:56.944: E/AndroidRuntime(32556):    at java.lang.reflect.Method.invoke(Method.java:511)
08-01 12:36:56.944: E/AndroidRuntime(32556):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008)
08-01 12:36:56.944: E/AndroidRuntime(32556):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775)
08-01 12:36:56.944: E/AndroidRuntime(32556):    at dalvik.system.NativeStart.main(Native Method)
08-01 12:36:56.944: E/AndroidRuntime(32556): Caused by: android.os.NetworkOnMainThreadException
08-01 12:36:56.944: E/AndroidRuntime(32556):    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1118)
08-01 12:36:56.944: E/AndroidRuntime(32556):    at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
08-01 12:36:56.944: E/AndroidRuntime(32556):    at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
08-01 12:36:56.944: E/AndroidRuntime(32556):    at java.net.InetAddress.getAllByName(InetAddress.java:214)
08-01 12:36:56.944: E/AndroidRuntime(32556):    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
08-01 12:36:56.944: E/AndroidRuntime(32556):    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
08-01 12:36:56.944: E/AndroidRuntime(32556):    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
08-01 12:36:56.944: E/AndroidRuntime(32556):    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
08-01 12:36:56.944: E/AndroidRuntime(32556):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:670)
08-01 12:36:56.944: E/AndroidRuntime(32556):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:509)
08-01 12:36:56.944: E/AndroidRuntime(32556):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
08-01 12:36:56.944: E/AndroidRuntime(32556):    at police.uk.greatermanchesterpoliceandroid.XMLParser.getXmlFromUrl(XMLParser.java:45)
08-01 12:36:56.944: E/AndroidRuntime(32556):    at police.uk.greatermanchesterpoliceandroid.CustomizedListViewStation.onCreate(CustomizedListViewStation.java:108)
08-01 12:36:56.944: E/AndroidRuntime(32556):    at android.app.Activity.performCreate(Activity.java:5206)
08-01 12:36:56.944: E/AndroidRuntime(32556):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
08-01 12:36:56.944: E/AndroidRuntime(32556):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064)
08-01 12:36:56.944: E/AndroidRuntime(32556):    ... 11 more
08-01 12:37:05.694: I/Process(32556): Sending signal. PID: 32556 SIG: 9

而不是先检查互联网连接。在if code->
if(isOnline()){}
中删除try-catch块并调用isOnline函数:

public boolean isOnline() {
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    if (netInfo != null && netInfo.isConnectedOrConnecting()) {
        return true;
    }
    return false;
}
用以下内容替换您的try catch:

if (isOnline()){
    Intent myIntent = new Intent(MainActivity.this, CustomizedListViewStation.class);
    startActivityForResult(myIntent, 0);
} 

else {            
    Context context = getApplicationContext();
    CharSequence text = "There is no data for this Community";
    int duration = Toast.LENGTH_LONG;
    Toast toast = Toast.makeText(context, text, duration);
    toast.show();
}

如果您200%确定需要在主线程中进行网络活动,请使用此选项,使用:

if (android.os.Build.VERSION.SDK_INT > 9) {
  StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
  StrictMode.setThreadPolicy(policy);
}

否则,请查看和。

这是因为您在主线程上运行代码,因此它会引发
NetworkOnMainThreadException
。这不在您的代码中,因此您无法捕获它,您也不应该尝试捕获它,因为您的应用程序将永远无法工作,因为它将永远不会因为此错误尝试建立网络连接

您需要在单独的线程(如ASyncTask)中执行网络活动,并且不再引发此异常


出现此异常的原因是网络活动通常会导致应用程序延迟,因为网络呼叫往往会阻塞,直到完成为止。如果在主线程上执行网络活动,则应用程序的用户可能会收到一条ANR(应用程序无响应)消息,这意味着用户可以强制关闭应用程序,因为在后台,应用程序似乎不再响应任何内容,因为它正在执行网络活动

您是否收到任何错误?您是否尝试调试它?为什么不在打开下一个活动之前检查连接?Somesh-该错误是我预期的网络主线程错误,但如果是这种情况,我希望终止。异常应为
ActivityNotFoundException
!!我对如何实现ifisonline有点困惑。我在布局中有一个带有onclick的按钮。我将如何使它以这种方式工作?检查更新的答案以实现它。只需用我编写的代码替换你的try-catch即可。对不起,朋友,点击按钮后应用程序仍在崩溃。很奇怪。有什么想法吗?你能把logcat贴出来吗?这看起来正是我需要的。这将放在哪里?在活动的onCreate中。但是,请注意,这是一个糟糕的做法,你应该考虑从长远来看把你的网络代码移到后台线程。这会不会影响我的应用程序在游戏商店中被认可?没有苹果商店的应用商店。他们真的不关心你使用的技术,尽管这会解决你的问题,但这是一个非常糟糕的主意。您的用户很可能会收到应用程序无响应(ANR)消息,这将导致他们强制关闭应用程序,并可能在play store中收到负面评论。虽然这样做不会导致应用程序被从play store中撤出,但谷歌永远不会推广你的应用程序,因为他们希望应用程序按照开发指南进行开发