Android Java:致命异常:main
我经常遇到一个致命的异常:测试应用程序时出现主要错误,我看不出问题出在哪里 如果有人能发现我在这方面出了错,那将是一个很大的帮助 请在下面找到我的主页的代码:Android Java:致命异常:main,java,android,Java,Android,我经常遇到一个致命的异常:测试应用程序时出现主要错误,我看不出问题出在哪里 如果有人能发现我在这方面出了错,那将是一个很大的帮助 请在下面找到我的主页的代码: public class DashboardActivity extends Activity { UserFunctions userFunctions; Button btnLogout; @Override protected void onCreate(Bundle savedInstanceState) { super
public class DashboardActivity extends Activity {
UserFunctions userFunctions;
Button btnLogout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dashboard);
/**Dashboard Screen for the application * */
// Check login status in database
userFunctions = new UserFunctions ();
if(userFunctions.isUserLoggedIn(getApplicationContext())){
// user already logged in show databoard
btnLogout = (Button) findViewById(R.id.btnLogout);
btnLogout.setOnClickListener(new View.OnClickListener() {
public void onClick(View argo) {
userFunctions.logoutUser(getApplicationContext());
Intent login = new Intent (getApplicationContext(), LoginActivity.class);
login.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(login);
finish();
}
});
}else{
Intent login = new Intent (getApplicationContext(), LoginActivity.class);
login.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(login);
finish();
}
}
}
}
LogCat消息:
E/AndroidRuntime(21912): FATAL EXCEPTION: main
E/AndroidRuntime(21912): android.os.NetworkOnMainThreadException
E/AndroidRuntime(21912): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1144)
E/AndroidRuntime(21912): at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
E/AndroidRuntime(21912): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
E/AndroidRuntime(21912): at java.net.InetAddress.getAllByName(InetAddress.java:214)
E/AndroidRuntime(21912): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
E/AndroidRuntime(21912): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
E/AndroidRuntime(21912): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
E/AndroidRuntime(21912): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
E/AndroidRuntime(21912): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:670)
E/AndroidRuntime(21912): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:509)
E/AndroidRuntime(21912): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
E/AndroidRuntime(21912): at com.applicationnfclogin.internal.JSONParser.getJSONFormUrl(JSONParser.java:85)
E/AndroidRuntime(21912): at com.applicationnfclogin.internal.UserFunctions.loginUser(UserFunctions.java:33)
E/AndroidRuntime(21912): at com.applicationnfclogin.LoginActivity$1.onClick(LoginActivity.java:84)
E/AndroidRuntime(21912): at android.view.View.performClick(View.java:4475)
E/AndroidRuntime(21912): at android.view.View$PerformClick.run(View.java:18786)
E/AndroidRuntime(21912): at android.os.Handler.handleCallback(Handler.java:730)
E/AndroidRuntime(21912): at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime(21912): at android.os.Looper.loop(Looper.java:176)
E/AndroidRuntime(21912): at android.app.ActivityThread.main(ActivityThread.java:5419)
E/AndroidRuntime(21912): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(21912): at java.lang.reflect.Method.invoke(Method.java:525)
E/AndroidRuntime(21912): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
E/AndroidRuntime(21912): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
E/AndroidRuntime(21912): at dalvik.system.NativeStart.main(Native Method)
这就是strictmode的问题。。你可以用这个
StrictMode.ThreadPolicy policy = new StrictMode.
ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
“当应用程序试图在其主线程上执行网络操作时,会引发此异常”。您应该调用asynctask。看看这个解决方案:您正在主线程上执行
网络操作。android不允许这样做。使用asyntask
执行网络操作。在Android中,应避免在UI线程(也称为主线程)上执行繁重的工作,因为此时,应用程序将停止响应用户反馈(即触摸屏幕)。
您可以阅读更多关于Android中线程和进程的信息
在最新版本中,安卓已经制定了一项政策,不允许在主线程上执行网络作业,这样你的应用程序就永远不会停止运行。
为了连接到网络,您可以创建一个新线程,也可以创建一个用于处理后台线程和前台线程之间切换的线程。请发布logcat错误请共享logcat详细信息One:)如果您还需要什么,请告诉我您是否尝试在主线程上连接到internet,使用AyncTask或处理程序连接到internet,有关详细信息,请参阅异常名称,并向您提示:NetworkOnMainThreadException
-您应该在后台线程上进行联网,而不是在主UI线程中。即使这样做有效。用网络操作阻止UI线程仍然很糟糕!