2012-03-30 14 views
0

アプリの起動時/再開時の設定アクティビティからデータを取得する方法を知りたいと思います。 私は、ユーザーがアプリケーションのロケールを選択できるようなプリファレンスアクティビティを持っていますが、アプリ起動時にforcecloseを引き起こす主なアクティビティからプリファレンスを読み込めないことがあるようです。ここにいくつかのコードがあります。 助けてください、おかげアプリの起動時の環境設定の読み方

import java.util.Locale; 

import android.app.Activity; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.content.res.Configuration; 
import android.graphics.PixelFormat; 
import android.graphics.Typeface; 
import android.net.Uri; 
import android.os.Bundle; 
import android.preference.PreferenceManager; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.Window; 

import android.widget.ImageButton; 
import android.widget.TextView; 

public class Main extends Activity { 
    /** Called when the activity is first created. */ 

    String ListPreference; 

    //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
    //       Locale 
    //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 

    private void getPrefs() { 
     // Get the xml/preferences.xml preferences 
     SharedPreferences prefs = PreferenceManager 
         .getDefaultSharedPreferences(getBaseContext()); 
     ListPreference = prefs.getString("listPref", "French"); 


     if (ListPreference.equals("1")) {//do something 
      String languageToLoad = "fr"; 
      Locale locale = new Locale(languageToLoad); 
      Locale.setDefault(locale); 
      Configuration config = new Configuration(); 
      config.locale = locale; 
      getBaseContext().getResources().updateConfiguration(config, 
        getBaseContext().getResources().getDisplayMetrics()); 


     } 


    if (ListPreference.equals("2")) {//do something 
     String languageToLoad = "en"; 
     Locale locale = new Locale(languageToLoad); 
     Locale.setDefault(locale); 
     Configuration config = new Configuration(); 
     config.locale = locale; 
     getBaseContext().getResources().updateConfiguration(config, 
       getBaseContext().getResources().getDisplayMetrics()); 

    } 
    } 
    //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
    //        END locale Code 
    //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     screenOn(); 
     setup(); 
     getPrefs(); 





    PreferenceManager.setDefaultValues(this, R.xml.preference, false); 


      this.overridePendingTransition(R.anim.fade_in, R.anim.fade_out); 

     } 

     private void setup() { 

      text1= (TextView) findViewById(R.id.Main_Action_Bar_Text); 
      Button1= (ImageButton) findViewById(R.id.sample); 
      Button2 = (ImageButton) findViewById(R.id.sample); 
      Button3 = (ImageButton) findViewById(R.id.sample); 
      Button4 = (ImageButton) findViewById(R.id.sample); 
      text2= (TextView) findViewById(R.id.sample); 
      text3= (TextView) findViewById(R.id.sample); 
      text4= (TextView) findViewById(R.id.sample); 
      text5= (TextView) findViewById(R.id.sample); 


      Typeface font = Typeface.createFromAsset(getAssets(), "font/kb.ttf"); 

      } 

     @Override 
     protected void onResume() { 
      super.onResume(); 
      getPrefs(); 
      setup(); 
     } 

} 

が、これは時間を割いて

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp.information.Main}: 
android.view.InflateException: Binary XML file line #5: Error inflating class java.lang.reflect.Constructor 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 
at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:130) 
at android.app.ActivityThread.main(ActivityThread.java:3687) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:507) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: android.view.InflateException: Binary XML file line #5: Error inflating class java.lang.reflect.Constructor 
at android.preference.GenericInflater.createItem(GenericInflater.java:397) 
at android.preference.GenericInflater.onCreateItem(GenericInflater.java:417) 
at android.preference.GenericInflater.createItemFromTag(GenericInflater.java:428) 
at android.preference.GenericInflater.rInflate(GenericInflater.java:481) 
at android.preference.GenericInflater.rInflate(GenericInflater.java:493) 
at android.preference.GenericInflater.inflate(GenericInflater.java:326) 
at android.preference.GenericInflater.inflate(GenericInflater.java:263) 
at android.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:251) 
at android.preference.PreferenceManager.setDefaultValues(PreferenceManager.java:444) 
at android.preference.PreferenceManager.setDefaultValues(PreferenceManager.java:422) 
at com.myapp.information.Main.onCreate(Main.java:168) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) 
... 11 more 
Caused by: java.lang.reflect.InvocationTargetException 
at java.lang.reflect.Constructor.constructNative(Native Method) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:415) 
at android.preference.GenericInflater.createItem(GenericInflater.java:383) 
... 23 more 
Caused by: java.lang.NullPointerException 
at android.content.res.AssetManager.getResourceTextArray(AssetManager.java:214) 
at android.content.res.Resources.getTextArray(Resources.java:361) 
at android.content.res.TypedArray.getTextArray(TypedArray.java:628) 
at android.preference.ListPreference.<init>(ListPreference.java:49) 
... 26 more 









    // this is the line that throws exception (Main.java:168) 
// I assume this line is to read the preferences when app starts 

PreferenceManager.setDefaultValues(this, R.xml.preference, false); 

おかげで再びRES/XMLフォルダ

<?xml version="1.0" encoding="utf-8"?> 
    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
      <PreferenceCategory 
        android:title="Language"> 
        <ListPreference 
          android:title="Select Language" 

          android:key="listPref" 
          android:defaultValue="1" 
          android:entries="@array/Language" 
          android:entryValues="@array/listValues" /> 
      </PreferenceCategory> 

      </PreferenceScreen> 

エラーログにあるpreferences.xmlです。

答えて