2012-01-02 7 views
0

すべてのSharedPreferencesデータを処理するクラスをインスタンス化しようとしていますが、NullPointerExceptionが発生しています。Activityのクラスインスタンス化が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", ""); 
    } 
} 

あなたが何かを必要とする場合は、単に尋ねます。

ありがとうございました。あなたの

答えて

1

代わりにコードの下に試してみるのコード

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

、あなたがのonCreate(を呼び出す最初のものであることを、スーパーの呼び出しを移動してみてくださいmContext

+0

は –

+0

はまだ問題が続く場合は、今、あなたの前のを削除し,,もう一つ – AAnkit

+0

....もう一度試して答えを編集した...同じ問題を継続ログと新しいもの... – AAnkit

1

であなたのコンテキスト変数_contextを交換してください)。

super.onCreate(savedInstanceState); 
Intent i; 

編集:代わりにこれを試してみてください:

private Login login; 

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

私はそれをしましたが、エラーが続く...私が下に投稿したLogCat出力。 –

+0

@ Danniel-magno私の編集を参照してください – sfratini

+1

ありがとう、私はオブジェクトをインスタンス化していた方法を変更する必要がありました。 –

関連する問題