2016-03-16 23 views
-1

我想使用SharedPreferences保存設置,但它使我的應用程序崩潰!我曾在Eclipse中使用過它。SharedPreferences在Studio中崩潰我的應用程序

SharedPreferences prefs= PreferenceManager.getDefaultSharedPreferences(this); 
    String font =prefs.getString("font", ""); 
    int size =prefs.getInt("size", 10); 
    int space =prefs.getInt("space", 7); 

    final TextView txt = (TextView) findViewById(R.id.textView5); 
    SeekBar seeksize = (SeekBar) findViewById(R.id.seekBar1); 
    SeekBar fasele = (SeekBar) findViewById(R.id.seekBar2); 

    seeksize.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 

     @Override 
     public void onStopTrackingTouch(SeekBar arg0) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onStartTrackingTouch(SeekBar arg0) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) { 
      // TODO Auto-generated method stub 
      //txt1.setTextSize(arg1); 
      txt.setTextSize(arg1); 
     } 
    }); 

    fasele.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 

     @Override 
     public void onStopTrackingTouch(SeekBar arg0) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onStartTrackingTouch(SeekBar arg0) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) { 
      // TODO Auto-generated method stub 
      //txt1.setTextSize(arg1); 
      txt.setLineSpacing(arg1,1); 
     } 
    }); 
    final Typeface zar = Typeface.createFromAsset(getAssets(), "font/BZAR.TTF"); 
    final Typeface nazanin = Typeface.createFromAsset(getAssets(), "font/BNAZANIN.TTF"); 
    final Typeface kodak = Typeface.createFromAsset(getAssets(), "font/BKOODKBD.TTF"); 

    RadioButton rb_nazanin = (RadioButton) findViewById(R.id.radio0); 
    RadioButton rb_zar = (RadioButton) findViewById(R.id.radio1); 
    RadioButton rb_kodak = (RadioButton) findViewById(R.id.radio2); 


    rb_nazanin.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
     @SuppressLint("NewApi") 
     @Override 
     public void onCheckedChanged(CompoundButton arg0, boolean arg1) { 
      // TODO Auto-generated method stub 
      if (arg1 == true) 
      { 
       txt.setTypeface(nazanin); 
       SharedPreferences shared = getSharedPreferences("Prefs", MODE_PRIVATE); 
       SharedPreferences.Editor editor = shared.edit(); 
       editor.putString("font", "nazanin"); 
       editor.apply(); 


      } 
     } 
    }); 

    rb_zar.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

     public void onCheckedChanged(CompoundButton arg0, boolean arg1) { 
      // TODO Auto-generated method stub 
      if (arg1 == true) 
      { 
       txt.setTypeface(zar); 
       SharedPreferences shared = getSharedPreferences("Prefs", MODE_PRIVATE); 
       SharedPreferences.Editor editor = shared.edit(); 
       editor.putString("font", "zar"); 
       editor.apply(); 
      } 
     } 
    }); 

    rb_kodak.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

     public void onCheckedChanged(CompoundButton arg0, boolean arg1) { 
    // TODO Auto-generated method stub 
      if (arg1 == true) 
      { 
       txt.setTypeface(kodak); 
       SharedPreferences shared = getSharedPreferences("Prefs", MODE_PRIVATE); 
       SharedPreferences.Editor editor = shared.edit(); 
       editor.putString("font", "kodak"); 
       editor.apply(); 
      } 
     } 
    }); 

logcat的錯誤

二月3日至17日:24:46.113 1700至1700年/ com.example.material.testnavi E/AndroidRuntime:致命異常:主了java.lang.RuntimeException : 無法啓動活動 ComponentInfo {com.example.material.testnavi/com.example.material.testnavi.MainTan}: java.lang.RuntimeException:原生字體無法在 android.app.ActivityThread.performLaunchActivity( ActivityThread.java:2180 ) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) at android.app.ActivityThread.access $ 600(ActivityThread.java:141)at android.app.ActivityThread $ H.handleMessage(ActivityThread.java :1234) at android.os.Handler.dispatchMessage(Handler.java:99)at android.os.Looper.loop(Looper.java:137)at android.app.ActivityThread.main(ActivityThread.java:5041 )at java.lang.reflect.Method.invokeNative(Native Method)at java.lang.reflect.Method.invoke(Method.java:511)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run( ZygoteInit.java:793) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)at dalvik.system.NativeStart.main(本地方法)引起: java.lang.RuntimeException:本機字體不能在 android.graphics.Typeface。(Typeface.java:175)at android.graphics.Typeface。 (android.app.Activity.performCreate(Activity.java:5104)at android.app。)創建自動生成器(Typeface.java:149) com.example.material.testnavi.MainTan.onCreate(MainTan.java:79) Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 在android.app。 ActivityThread.access $ 600 (ActivityThread.java:141)at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1234) at android.os.Handler.dispatchMessage(Handler.java:99)at android.os.Looper.loop (Looper.java:137)at android.app.ActivityThread.main(ActivityThread.java:5041)at java.lang.reflect.Method.invokeNative(Native Method)at java.lang.reflect.Method.invoke( Method.java:511)在 com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)在 dalvik.system.NativeStart.main(Native Method)

+2

發佈您的'LogCat'錯誤... – Aspicas

+0

PreferenceManager.getDefaultSharedPreferences(this)和getSharedPreferences(「Prefs」,MODE_PRIVATE)返回兩個不同的文件。這就是說,沒有堆棧跟蹤,很難說出問題的可能性。 – spacitron

回答

0

我想我可能會認爲你的錯誤是什麼(不日誌,我可能是錯的),但你從defaultSharedPrefs得到的值:

SharedPreferences prefs= PreferenceManager.getDefaultSharedPreferences(this); 

而在另一個設置它們:

   SharedPreferences shared = getSharedPreferences("Prefs", MODE_PRIVATE); 

這可能是爲什麼你檢索的值都不好。將此最後一行替換爲:

SharedPreferences prefs= PreferenceManager.getDefaultSharedPreferences(this); 

使用相同的首選項獲取和設置值。

相關問題