0

ユーザーデータとパスワードを保存したいのですが、「アクティビティのメソッドを実行できませんでした」というエラーが常に表示されます。

書き込みアクションは機能すると思います。

Editor editor = getSharedPreferences("pref", 0).edit();
editor.putString(CustomizedListView.KEY_USER, username);
editor.putString(CustomizedListView.KEY_PASSWORD, password);
System.out.println("username: " + username);
System.out.println("password: " + password);
editor.commit();

設定を読むとエラーが発生します:

public class RESTClient extends Activity {

    private ArrayList<NameValuePair> uebergabeParam = new ArrayList<NameValuePair>();

    @Override
    public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
    }

    public String getResponse(String URLParameter, HttpMethod method) {
        System.out.println("RESTClient");

        SharedPreferences pref = getPreferences(MODE_PRIVATE);
            // or
            SharedPreferences pref = getSharedPreferences("pref", MODE_PRIVATE);
        String username = pref.getString(CustomizedListView.KEY_USER, "");
        String password = pref.getString(CustomizedListView.KEY_PASSWORD, "");

    try {
        Client client = new Client();
        client.addParameter(method, uebergabeParam, URLParameter, username , password);
        return client.execute().get();
    } catch (InterruptedException e) {
        System.out.println("RESTClient getResponse " + e);
        e.printStackTrace();
    } catch (ExecutionException e) {
        System.out.println("RESTClient getResponse " + e);
        e.printStackTrace();
    }
    return "";
    }
}

次のエラーが発生します。

02-22 17:37:58.903: I/System.out(1714): RESTClient
02-22 17:37:58.903: D/AndroidRuntime(1714): Shutting down VM
02-22 17:37:58.903: W/dalvikvm(1714): threadid=1: thread exiting with uncaught exception (group=0x412f42a0)
02-22 17:37:58.918: E/AndroidRuntime(1714): FATAL EXCEPTION: main
02-22 17:37:58.918: E/AndroidRuntime(1714): java.lang.IllegalStateException: Could not execute method of the activity
02-22 17:37:58.918: E/AndroidRuntime(1714):     at android.view.View$1.onClick(View.java:3691)
02-22 17:37:58.918: E/AndroidRuntime(1714):     at android.view.View.performClick(View.java:4211)
02-22 17:37:58.918: E/AndroidRuntime(1714):     at android.view.View$PerformClick.run(View.java:17267)
02-22 17:37:58.918: E/AndroidRuntime(1714):     at android.os.Handler.handleCallback(Handler.java:615)
02-22 17:37:58.918: E/AndroidRuntime(1714):     at android.os.Handler.dispatchMessage(Handler.java:92)
02-22 17:37:58.918: E/AndroidRuntime(1714):     at android.os.Looper.loop(Looper.java:137)
02-22 17:37:58.918: E/AndroidRuntime(1714):     at android.app.ActivityThread.main(ActivityThread.java:4898)
02-22 17:37:58.918: E/AndroidRuntime(1714):     at java.lang.reflect.Method.invokeNative(Native Method)
02-22 17:37:58.918: E/AndroidRuntime(1714):     at java.lang.reflect.Method.invoke(Method.java:511)
02-22 17:37:58.918: E/AndroidRuntime(1714):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
02-22 17:37:58.918: E/AndroidRuntime(1714):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
02-22 17:37:58.918: E/AndroidRuntime(1714):     at dalvik.system.NativeStart.main(Native Method)
02-22 17:37:58.918: E/AndroidRuntime(1714): Caused by: java.lang.reflect.InvocationTargetException
02-22 17:37:58.918: E/AndroidRuntime(1714):     at java.lang.reflect.Method.invokeNative(Native Method)
02-22 17:37:58.918: E/AndroidRuntime(1714):     at java.lang.reflect.Method.invoke(Method.java:511)
02-22 17:37:58.918: E/AndroidRuntime(1714):     at android.view.View$1.onClick(View.java:3686)
02-22 17:37:58.918: E/AndroidRuntime(1714):     ... 11 more
02-22 17:37:58.918: E/AndroidRuntime(1714): Caused by: java.lang.NullPointerException
02-22 17:37:58.918: E/AndroidRuntime(1714):     at android.app.Activity.getLocalClassName(Activity.java:4556)
02-22 17:37:58.918: E/AndroidRuntime(1714):     at android.app.Activity.getPreferences(Activity.java:4589)
02-22 17:37:58.918: E/AndroidRuntime(1714):     at kommunikation.RESTClient.getResponse(RESTClient.java:67)
02-22 17:37:58.918: E/AndroidRuntime(1714):     at Login.onClick(Login.java:124)
02-22 17:37:58.918: E/AndroidRuntime(1714):     ... 14 more

理由がわからないので、あなたが助けてくれることを願っています。どうもありがとうございます!

編集:

public class CustomizedListView extends Activity {

    // Login
    public static final String KEY_USER = "user";  
    public static final String KEY_PASSWORD = "password";
}

getReponse()メソッドも編集し、

super.onCreate(savedInstanceState);

4

3 に答える 3

1

メソッドを呼び出す必要がありsuper.onCreate()ますonCreate()

派生クラスは、このメソッドのスーパークラスの実装を呼び出す必要があります。そうでない場合は、例外がスローされます。-ドキュメント

その例外のルートは、アクティビティがまだ初期化されていないことを示しています。コンテキストがなく、そのフィールドの多くはnullです。理由の1つは、呼び出していないことですが、返さsuper.onCreate()れるとすぐに別の例外がスローされますonCreate()(上記のドキュメントの行が示すように)。キーワードを使用してアクティビティのインスタンスをインスタンス化し、newこのメソッドを呼び出そうとして、期待どおりに機能しないなど、異常な処理を行っていると思われます。アクティビティを作成するときは、適切なチャネルを通過する必要があります。具体的には、 startActivity()を呼び出す必要があります。

于 2013-02-22T16:51:43.563 に答える
0

以下のリンクから、なぜ電話する必要があるのか​​を読んでくださいsuper.onCreate(savedInstanceState);

super.onCreate(savedInstanceState);

@Override
public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
}

sharedPreferenceこのように保存されたデータを読み込みます

public String getResponse(String URLParameter, HttpMethod method) {

    SharedPreferences pref = getPreferences("pref", MODE_PRIVATE);
    String username = pref.getString(CustomizedListView.KEY_USER, "");
    String password = pref.getString(CustomizedListView.KEY_PASSWORD, "");

        ...
}

NPE のユーザー名またはパスワードの値が null である可能性があると思います。デバッグで確認してください。

editor.putString(CustomizedListView.KEY_USER, username);
editor.putString(CustomizedListView.KEY_PASSWORD, password);
于 2013-02-22T16:54:19.450 に答える
0

あなたのコードで私が見ることができるのは、あなたがメソッドgetPreferences()を混在させていることですgetSharedPreferences().2つ目は、設定の異なるファイルがある場合です. これによりアプリケーションがクラッシュするかどうかはわかりません。

getSharedPreferences()1 つの設定ファイルのみで作業している場合は、参照しているファイルをコンパイル時に指定する必要がある複数の設定ファイルがある場合は、この方法を使用しないでください。

最終編集:

を持たないメソッドから SharedPreferences を呼び出していますContext:

public String getResponse(String URLParameter, HttpMethod method){

   SharedPreferences pref = getSharedPreferences("pref", MODE_PRIVATE);

}

これを使用している限りActivity

public String getResponse(String URLParameter, HttpMethod method){

       SharedPreferences pref = getAplicationContext().getSharedPreferences("pref", MODE_PRIVATE);

    }
于 2013-02-22T16:55:34.390 に答える