Android 活动中的类实例化获取NullPointerException

Android 活动中的类实例化获取NullPointerException,android,android-activity,Android,Android Activity,我试图实例化一个类,该类将处理所有SharedReferences数据,但得到的是NullPointerException 以上是LogCat输出 01-02 14:24:52.234: E/AndroidRuntime(2599): FATAL EXCEPTION: main 01-02 14:24:52.234: E/AndroidRuntime(2599): java.lang.RuntimeException: Unable to instantiate activity Compone

我试图实例化一个类,该类将处理所有SharedReferences数据,但得到的是NullPointerException

以上是LogCat输出

01-02 14:24:52.234: E/AndroidRuntime(2599): FATAL EXCEPTION: main
01-02 14:24:52.234: E/AndroidRuntime(2599): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.my.app.android.myapp/com.my.app.android.myapp.MyAppAppActivity}: java.lang.NullPointerException
01-02 14:24:52.234: E/AndroidRuntime(2599):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1573)
01-02 14:24:52.234: E/AndroidRuntime(2599):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
01-02 14:24:52.234: E/AndroidRuntime(2599):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
01-02 14:24:52.234: E/AndroidRuntime(2599):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
01-02 14:24:52.234: E/AndroidRuntime(2599):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-02 14:24:52.234: E/AndroidRuntime(2599):     at android.os.Looper.loop(Looper.java:123)
01-02 14:24:52.234: E/AndroidRuntime(2599):     at android.app.ActivityThread.main(ActivityThread.java:3687)
01-02 14:24:52.234: E/AndroidRuntime(2599):     at java.lang.reflect.Method.invokeNative(Native Method)
01-02 14:24:52.234: E/AndroidRuntime(2599):     at java.lang.reflect.Method.invoke(Method.java:507)
01-02 14:24:52.234: E/AndroidRuntime(2599):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
01-02 14:24:52.234: E/AndroidRuntime(2599):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
01-02 14:24:52.234: E/AndroidRuntime(2599):     at dalvik.system.NativeStart.main(Native Method)
01-02 14:24:52.234: E/AndroidRuntime(2599): Caused by: java.lang.NullPointerException
01-02 14:24:52.234: E/AndroidRuntime(2599):     at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:100)
01-02 14:24:52.234: E/AndroidRuntime(2599):     at com.my.app.android.myapp.MyAppAppActivity.<init>(MyAppAppActivity.java:9)
01-02 14:24:52.234: E/AndroidRuntime(2599):     at java.lang.Class.newInstanceImpl(Native Method)
01-02 14:24:52.234: E/AndroidRuntime(2599):     at java.lang.Class.newInstance(Class.java:1409)
01-02 14:24:52.234: E/AndroidRuntime(2599):     at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
01-02 14:24:52.234: E/AndroidRuntime(2599):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1565)
01-02 14:24:52.234: E/AndroidRuntime(2599):     ... 11 more
登录类别:

package com.my.app.android.myapp;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;

public class Login {
    private static final String APP_SHARED_PREFS = "com.my.app.android.myapp";
    private SharedPreferences prefs;
    private Editor editor;
    private Context __context;

    public Login(Context context) {
        // Salva o contexto
        __context = context; 

        // Acessa as preferencias
        this.prefs  = context.getSharedPreferences(APP_SHARED_PREFS, Activity.MODE_PRIVATE);
        this.editor = this.prefs.edit();
    }

    public void logout() {
        // Remove o token salvo nas preferencias
        editor.putString("token_auth", "");
        editor.commit();

        // Chama a tela de login
        Intent i = new Intent(__context, MyAppAppActivity.class);
        __context.startActivity(i);
    }

    public boolean checkLogin() {
        if (prefs.getString("token_auth", "") != "") {
            return true;
        } else {
            return false;
        }
    }

    public void setToken(String token) {
        editor.putString("token_auth", token);
        editor.commit();
    }

    public String getToken() {
        return prefs.getString("token_auth", "");
    }
}
如果你还需要什么,尽管问


谢谢。

尝试用下面的代码代替您的代码

   public class MyAppAppActivity extends Activity {
  private Login login ;
  @Override
  public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     Intent i;
     login = new Login(getApplicationContext());

    // Temos um token?
    if (login.checkLogin()) {
        // Mapa
        i = new Intent(this, MyAppMapActivity.class);
        Toast.makeText(this, "Logado", Toast.LENGTH_LONG).show();
    } else {
        // Login
        i = new Intent(this, MyAppLoginActivity.class);
        Toast.makeText(this, "Não logado", Toast.LENGTH_LONG).show();
    }

    // Inicia a atividade
    startActivity(i);
}
   }

并将上下文变量_context替换为mContext

尝试将超级调用移动到onCreate()上调用的第一个对象

编辑:改为尝试以下操作:

 private Login login;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Intent i;
        login =  new Login(getApplicationContext());

如果问题仍然存在,还有一件事,请删除以前的日志并重新创建一个…再次出现相同的错误。。。唯一的区别是:01-02 16:24:39.453:E/AndroidRuntime(3654):在com.my.app.android.myapp.MyAppLoginActivity.(MyAppLoginActivity.java:27)MyAppLoginActivity.java:27行写了什么代码,写在这里问题是我实例化对象的方式。我已经更改了所有文件,这就解决了问题。谢谢。我已经这样做了,但错误仍然存在。。。我在下面发布的LogCat输出。谢谢,我必须改变实例化对象的方式。
super.onCreate(savedInstanceState);
Intent i;
 private Login login;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Intent i;
        login =  new Login(getApplicationContext());