是否可以在onPostExecute中启动活动?

时间:2012-12-18 15:22:15

标签: android android-asynctask

我需要将我的LoginMechanism更改为asynchTask,以便它不会在SDK 4.x中抛出android.os.NetworkOnMainThreadException。我不清楚如何在这个asynctask中开始一个新的意图。我知道这项工作将在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方法都会产生编译器错误,有人可以解释原因。 感谢

3 个答案:

答案 0 :(得分:3)

使用

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

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

而不是

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

从onPostExecute

开始新活动

答案 1 :(得分:1)

在:

new Intent(this, ActionActivity.class)

this ”表示AsyncTask对象。请改用(您的班级名称).this

答案 2 :(得分:0)

在AsyncTask中,这是指对象,它是一个AsyncTask。

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

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