0

我有一个致命的例外:主要。

我相信我的异常是由以下代码引起的:

    public void onClick(View view) {
        String name = inputName.getText().toString();
        String password = inputPassword.getText().toString();
        UserFunctions userFunction = new UserFunctions();
        Log.d("Button", "Login");
            SONObject json = userFunction.loginUser(name, password);

        // check for login response
        try {
            if (json.getString(KEY_SUCCESS) != null) {
                loginErrorMsg.setText("");
                String res = json.getString(KEY_SUCCESS); 
        ....code body

这是我的 Logcat

08-20 18:41:26.490: E/AndroidRuntime(4240): FATAL EXCEPTION: main
08-20 18:41:26.490: E/AndroidRuntime(4240): android.os.NetworkOnMainThreadException
08-20 18:41:26.490: E/AndroidRuntime(4240):     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
08-20 18:41:26.490: E/AndroidRuntime(4240):     at   libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
08-20 18:41:26.490: E/AndroidRuntime(4240):     at libcore.io.IoBridge.connectErrno(IoBridge.java:127)

当我将代码更改为以下时,我没有异常。

Log.d("Button", "Login");
//JSONObject json = userFunction.loginUser(name, password);

try {
        if (json.getString(KEY_SUCCESS) != null) {
        loginErrorMsg.setText("");
        String res = json.getString(KEY_SUCCESS);
code body.....

有什么帮助吗?
谢谢。

4

1 回答 1

1

由于 Android 3.0 及更高版本(我可能错了),在主线程上执行此操作会出错,因为您的 UI 可能会冻结。建议在 asyncTask 中处理此问题,如此处所示。http://developer.android.com/reference/android/os/AsyncTask.html

注意:如果您是 Android 新手,请意识到异步任务非常重要,应该尽快学习。这将为您的应用程序提供流畅的 UI。您可能想要使用 AsyncTask 的另一个原因是任何涉及 android (sqlite) 中的数据库的事情。

于 2013-08-20T19:50:52.030 回答