1

我需要将我的 LoginMechanism 更改为 asynchTask,以便它不会在 SDK 4.x 中引发 android.os.NetworkOnMainThreadException。我不清楚如何在这个异步任务中开始一个新的意图。我了解工作将在 doInBackground-Method 中完成,并且此返回结果将在 onPostExecute 方法中进行处理。在这种方法中,我尝试开始我的新活动和我的服务,但它显示了编译器错误

The constructor Intent(MainActivity.LoginTask, Class<AttachService>) is undefined

这是 onPostExecute 方法

        @Override
    protected void onPostExecute(String result) {
        super.onPostExecute( result );
        if (result.equals("")){
            loginError.setText(R.string.login_error);
            loginError.setVisibility(View.VISIBLE);
        }
        else{
            loginError.setVisibility(View.INVISIBLE);
            startService(new Intent(LoginTask.this, AttachService.class));
            Log.d(TAG, "setting status of user " + login.getText().toString() + " to stored for service endpoint  " + service_endpoint_spinner.getSelectedItemId());
            if (appData.getLoggedInUser() == null){
                loggedInUser = DBManager.getInstance().storeUser(user,hashedPw,target, true);
                appData.setLoggedInUser(loggedInUser);
                DBManager.getInstance().setUserStatusToStored(loggedInUser);
            }
            startActivity(new Intent(this, ActionActivity.class));          
        }

    }

所有 startservice 和 startActivity 方法都会产生编译器错误,有人可以解释原因。谢谢

4

3 回答 3

3

采用

startActivity(new Intent(Your_Current_Activity.this, ActionActivity.class));  

或者

startActivity(new Intent(getApplicationContext(), ActionActivity.class));

代替

startActivity(new Intent(this, ActionActivity.class)); 

从 onPostExecute 开始新活动

于 2012-12-18T15:24:26.877 回答
1

在:

new Intent(this, ActionActivity.class)

this ” 表示 AsyncTask 对象。使用(你的班级名称).this代替。

于 2012-12-18T15:25:36.130 回答
0

在 AsyncTask 内部,this 指的是对象,它是一个 AsyncTask。

您想引用父活动或上下文,因此将其替换为

startActivity(new Intent(ParentActivity.this, ActionActivity.class));
于 2012-12-18T15:25:54.180 回答