1

Heya-onPostExecute()でAsyncTaskを拡張するクラスからstartActivity()を呼び出そうとしています。

フローは次のとおりです。

AsyncTaskを拡張するクラス:

protected void onPostExecute() {
    Login login = new Login();
    login.pushCreateNewOrChooseExistingFormActivity();
}

アクティビティを拡張するクラス:

public void pushCreateNewOrChooseExistingFormActivity() {
    // start the CreateNewOrChooseExistingForm Activity
    Intent intent = new Intent(Intent.ACTION_VIEW);
    **ERROR_HERE*** intent.setClassName(this, CreateNewOrChooseExistingForm.class.getName());
    startActivity(intent);
}

そして、私はこのエラーを受け取ります…毎回:

03-17 16:04:29.579: ERROR/AndroidRuntime(1503): FATAL EXCEPTION: main
03-17 16:04:29.579: ERROR/AndroidRuntime(1503): java.lang.NullPointerException
03-17 16:04:29.579: ERROR/AndroidRuntime(1503): at android.content.ContextWrapper.getPackageName(ContextWrapper.java:120)
03-17 16:04:29.579: ERROR/AndroidRuntime(1503): at android.content.ComponentName.(ComponentName.java:62)
03-17 16:04:29.579: ERROR/AndroidRuntime(1503): at android.content.Intent.setClassName(Intent.java:4850)
03-17 16:04:29.579: ERROR/AndroidRuntime(1503): at com.att.AppName.Login.pushCreateNewOrChooseExistingFormActivity(Login.java:47)

iOS開発者の場合-私は新しいViewControllerをナビゲーションコントローラーのスタックにプッシュしようとしていますpushViewController:animated:。どうやら-このプラットフォームで行うのは難しいです。

何か案は?前もって感謝します!

更新-修正済み:

@Falmarriのアドバイスによると、私はなんとかこの問題を解決することができました。

まず第一に、私はもはやLogin login = new Login();新しいログインオブジェクトを作成するために呼び出していません。悪い。悪い。悪い。クッキーはありません。

代わりに、を呼び出す準備をするときに.execute()、このチュートリアル(appfulcrum.com/?p=126)は、以下に示すように、私の目的のために、アプリケーションコンテキストをクラスに渡してAsyncTaskを実行することを提案します。

    CallWebServiceTask task = new CallWebServiceTask();
    // pass the login object to the task
    task.applicationContext = login;
    // execute the task in the background, passing the required params
    task.execute(login);

これで、でonPostExecute()、次のようなログインオブジェクトメソッドにアクセスできます。

        ((Login) applicationContext).pushCreateNewOrChooseExistingFormActivity();
        ((Login) applicationContext).showLoginFailedAlert(result.get("httpResponseCode").toString());
        ...

これが他の誰かに役立つことを願っています!特にiOS開発者はAndroidに移行しています...

4

1 に答える 1

5

Loginが拡張するクラスである場合、次のような新しいオブジェクトを自分Activityで作成することは絶対にしないでください。Login

Login login = new Login();

これは非常に間違っているので、戻ってAndroidチュートリアルのいくつかを実行する必要があります。

于 2011-03-17T21:54:37.700 に答える