1

これは私の SharedPreference クラスです:

public class MySharedPrefs {
private static final String APP_SHARED_PREFS = "com.astroved.Horawatch";
private SharedPreferences appSharedPrefs;
private Editor prefsEditor;

public MySharedPrefs(Context context)
{
    this.appSharedPrefs = context.getSharedPreferences(APP_SHARED_PREFS, Activity.MODE_PRIVATE);
    this.prefsEditor = appSharedPrefs.edit();
}

public String getPrefsValue(String value) {
    return appSharedPrefs.getString(value, "");
}

public void savePrefsValue(String key , String Value) {
    prefsEditor.putString(key, Value);
    prefsEditor.commit();
}

public Boolean checkKey(String Key)
{
    if(appSharedPrefs.contains(Key))
        return true;    
    else
        return false;
}

}

MyFunctionClass :

public class Functions_class extends Activity{


AstroVedTime tz,lat,lon;
TimeZone tz1;
protected MySharedPrefs appPrefs;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);{
        appPrefs = new MySharedPrefs(Functions_class.this);
    }
    }

public void user_informations(int myear,int mMonth, int mDay){

    int year = myear,month = mMonth+1,day = mDay;
    Moment mn = new Moment(year,month,day,user_device_time());
    //appPrefs = new MySharedPrefs(Functions_class.this);

    if(appPrefs.checkKey("City_name1")){
        TimeZone.setDefault(TimeZone.getTimeZone(appPrefs.getPrefsValue("selected_time_zone")));
        Log.v("LOG_TAG"+"here the error is : ", appPrefs.getPrefsValue("selected_lat")+"");
        Log.v("LOG_TAG", appPrefs.getPrefsValue("selected_longi")+"");
        tz1 = TimeZone.getDefault();
        lat = new AstroVedTime(Double.parseDouble(appPrefs.getPrefsValue("selected_lat")));// Latitude
        lon = new AstroVedTime(Double.parseDouble(appPrefs.getPrefsValue("selected_longi")));// Longitude
    }

これは私のlogcatです:

 08-10 14:07:14.947: E/AndroidRuntime(475): FATAL EXCEPTION: Thread-13
08-10 14:07:14.947: E/AndroidRuntime(475): java.lang.NullPointerException
08-10 14:07:14.947: E/AndroidRuntime(475):  at com.astroved.horawatch.Functions_class.user_informations(Functions_class.java:46)
08-10 14:07:14.947: E/AndroidRuntime(475):  at com.astroved.horawatch.HoraWatchActivity$13$1.run(HoraWatchActivity.java:1106)
08-10 14:07:16.628: E/WindowManager(475): Activity com.astroved.horawatch.HoraWatchActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@407f1950 that was originally added here
08-10 14:07:16.628: E/WindowManager(475): android.view.WindowLeaked: Activity com.astroved.horawatch.HoraWatchActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@407f1950 that was originally added here
08-10 14:07:16.628: E/WindowManager(475):   at android.view.ViewRoot.<init>(ViewRoot.java:258)
08-10 14:07:16.628: E/WindowManager(475):   at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
08-10 14:07:16.628: E/WindowManager(475):   at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
08-10 14:07:16.628: E/WindowManager(475):   at android.view.Window$LocalWindowManager.addView(Window.java:424)
08-10 14:07:16.628: E/WindowManager(475):   at android.app.Dialog.show(Dialog.java:241)
08-10 14:07:16.628: E/WindowManager(475):   at com.astroved.horawatch.HoraWatchActivity$13.onClick(HoraWatchActivity.java:1103)
08-10 14:07:16.628: E/WindowManager(475):   at android.view.View.performClick(View.java:2485)
08-10 14:07:16.628: E/WindowManager(475):   at android.view.View$PerformClick.run(View.java:9080)
08-10 14:07:16.628: E/WindowManager(475):   at android.os.Handler.handleCallback(Handler.java:587)
08-10 14:07:16.628: E/WindowManager(475):   at android.os.Handler.dispatchMessage(Handler.java:92)
08-10 14:07:16.628: E/WindowManager(475):   at android.os.Looper.loop(Looper.java:123)
08-10 14:07:16.628: E/WindowManager(475):   at android.app.ActivityThread.main(ActivityThread.java:3683)
08-10 14:07:16.628: E/WindowManager(475):   at java.lang.reflect.Method.invokeNative(Native Method)
08-10 14:07:16.628: E/WindowManager(475):   at java.lang.reflect.Method.invoke(Method.java:507)
08-10 14:07:16.628: E/WindowManager(475):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
08-10 14:07:16.628: E/WindowManager(475):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-10 14:07:16.628: E/WindowManager(475):   at dalvik.system.NativeStart.main(Native Method)

上記のエラーが発生しています。値の呼び出しに間違いがありSharedPreferenceます。私はそれを理解することができません。以前はこのエラーが発生しました

at android.content.contextwrapper.getsharedpreferences contextwrapper.java 146

を呼び出して上記のエラーをクリアしSharedPreferencesましたOnCreate。上記のエラーをクリアするにはどうすればよいLogcatですか。どこが間違っていますか?

Anotherアクティビティのonclick中にMyFunctionClassのメソッドを呼び出しています。以下に示します

ホラウォッチ アクティビティ :

public Functions_class func_cls = new Functions_class();
 private OnClickListener show_panchang_page = new OnClickListener(){

    public void onClick(View v) { 

        pbarDialog = new ProgressDialog( HoraWatchActivity.this );
        pbarDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        pbarDialog.setMessage("Loading Panchang...");
        pbarDialog.show();
               Thread t = new Thread(){
                   public void run(){
                       func_cls.user_informations(mYear, mMonth, mDay); 
                       Message myMessage=new Message();
                       Bundle resBundle = new Bundle();
                       resBundle.putString("status", "SUCCESS"); 
                       myMessage.obj=resBundle;
                       handler.sendMessage(myMessage);
                   }
               };
              t.start();
    }
};

より迅速な対応は私を大いに助けます.Thanks.

4

3 に答える 3

2

問題が見つかりました。問題は、ののこの変数に appPrefsありuser_informationsますFunction class。その時点ではnullです。

あなたがしていることは、onCreate()でappPrefsを開始したことですが、このようなことをpublic Functions_class func_cls = new Functions_class();すると、onCreateは呼び出されません。つまり、メソッドに直接入り、nullを返します。既存のコードにいくつかの変更を加える必要があります。

これを試して、

1)最初に現在のアクティビティコンテキストをメソッドに渡します。

2)メソッド内のこの行のコメントを解除しますappPrefs = new MySharedPrefs(context);

public void user_informations(int myear,int mMonth, int mDay,Context context){

    int year = myear,month = mMonth+1,day = mDay;
    Moment mn = new Moment(year,month,day,user_device_time());
    appPrefs = new MySharedPrefs(context);

    if(appPrefs.checkKey("City_name1")){
        TimeZone.setDefault(TimeZone.getTimeZone(appPrefs.getPrefsValue("selected_time_zone")));
        Log.v("LOG_TAG"+"here the error is : ", appPrefs.getPrefsValue("selected_lat")+"");
        Log.v("LOG_TAG", appPrefs.getPrefsValue("selected_longi")+"");
        tz1 = TimeZone.getDefault();
        lat = new AstroVedTime(Double.parseDouble(appPrefs.getPrefsValue("selected_lat")));// Latitude
        lon = new AstroVedTime(Double.parseDouble(appPrefs.getPrefsValue("selected_longi")));// Longitude
    }
于 2012-08-10T09:38:07.633 に答える
1

アクティビティ クラス Functions_class を手動でインスタンス化しています。アクティビティを開始すると、フレームワークがこれを処理します。Functions_class がアクティビティとして使用されていない場合でも、Functions_class の oncreate を手動で呼び出す必要があります。appPrefs が初期化されている場所です。user_informations 関数で appPrefs が null です。初期化します。

于 2012-08-10T09:31:47.237 に答える
1

目に見えるActivity(HoraWatchActivity.this)からフォーカスされていないActivity(iefunc_cls.user_informations(mYear、mMonth、mDay);)のメソッドを呼び出しているので、あなたのアプローチは間違っていると思います..そしてその関数は何もしていません共有された好みから価値を得る。データの取得は、NonActivity クラスで行う必要があります。appPrefs は null であり、初期化されていません。

于 2012-08-10T09:33:14.833 に答える