2013-02-22 38 views
0

我想存储用户数据和密码,但我总是收到错误“无法执行活动的方法”。SharedPreferences获取“无法执行Acitvity的方法”

我觉得写动作作品:

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);

+0

你在方法中有一个'return'语句? – Wenger 2013-02-22 16:46:53

+0

发布kommunikation.RESTClient.getResponse(RESTClient.java:67)上的内容。 – 2013-02-22 16:46:55

+0

@ user2047688此字段“CustomizedListView.KEY_PASSWORD”的值是什么? – 2013-02-22 16:54:30

回答

1

你需要调用super.onCreate()onCreate()方法。

Derived classes must call through to the super class's implementation of this method. If they do not, an exception will be thrown. - Docs

该异常的根表示您的活动尚未初始化。它没有上下文,它的很多字段都是空的。其中一个原因是您没有拨打super.onCreate(),但是,只要返回onCreate(),就会抛出一个不同的例外(正如上述文档中的行所示)。我怀疑你正在做一些不寻常的事情,比如使用new关键字来实例化一个活动的实例,并试图调用这种不能按预期工作的方法。创建活动时,您需要通过适当的渠道。具体而言,您需要致电startActivity()。从下面的链接

+0

当我设置'String username =“mm”;'手动的活动工作正常。问题应该是getPreferences – user2047688 2013-02-22 17:16:37

+0

是的,这是因为设置字符串不需要上下文。获取首选项需要有效的上下文,除非您使用Android预期的渠道,否则您的活动不是有效的上下文。 – Samuel 2013-02-22 18:18:38

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可能的用户名或密码为空值。使用调试进行检查。

editor.putString(CustomizedListView.KEY_USER, username); 
editor.putString(CustomizedListView.KEY_PASSWORD, password); 
+0

仍然收到此错误。 – user2047688 2013-02-22 16:58:32

+0

您是否按照上面所述的方式编辑了getResponse方法。 – 2013-02-22 16:59:58

+0

@ user2047688 kommunikation.RESTClient.getResponse(RESTClient.java:67) – 2013-02-22 17:13:54

0

我可以在你的代码中看到的是,你是混合方法getPreferences()getSharedPreferences(),第二个是当你有偏好diferent文件。我不知道这是否会导致应用程序崩溃。

如果您只使用1个首选项文件,请避免使用方法getSharedPreferences()如果您确实有多个首选项文件,您必须在编译时指定您指向的文件。

最后编辑:

您呼叫从一个方法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); 

    } 
+0

像其他人指出,你还需要调用'super.onCreate' – Eliud 2013-02-22 16:58:05

+0

我做到了,但我仍然有这个问题,当我手动设置用户名和密码硬编码时,我没有得到这个错误。 – user2047688 2013-02-22 17:26:04

+0

查看我的新编辑。希望它有效 – Eliud 2013-02-22 17:44:11