Activity中的类实例化获得NullPointerException



我试图实例化一个类,将处理所有的SharedPreferences数据,但我得到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.Intent;
import android.os.Bundle;
import android.widget.Toast;
public class MyAppAppActivity extends Activity {
    private Login login = new Login(getApplicationContext());
    @Override
    public void onCreate(Bundle savedInstanceState) {
        Intent i;
        super.onCreate(savedInstanceState);
        // 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);
    }
}
登录类:

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

尝试将super调用移动到onCreate()上的第一个调用;

super.onCreate(savedInstanceState);
Intent i;

编辑:试试这个:

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

相关内容

最新更新