Danniel Magno
Danniel Magno

Reputation: 304

Class instantiation in Activity gets NullPointerException

I'm trying to instantiate a class which will handle all the SharedPreferences data, but I'm getting NullPointerException.

Above is the LogCat output.

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

Main activity:

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

Login class:

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", "");
    }
}

If you need anything else, just ask.

Thanks.

Upvotes: 0

Views: 1123

Answers (2)

sebastianf182
sebastianf182

Reputation: 9978

Try moving the super call to be the first thing you call on the onCreate();

super.onCreate(savedInstanceState);
Intent i;

Edit: Try this instead:

 private Login login;

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

Upvotes: 1

AAnkit
AAnkit

Reputation: 27549

try below code in place of you code

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

and replace your context variable _context with mContext

Upvotes: 1

Related Questions