1

LoginMechanismをasynchTaskに変更して、SDK4.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 内では、これは AsyncTask であるオブジェクトを参照します。

親アクティビティまたはコンテキストを参照したいので、次のように置き換えます

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