Как читать настройки при запуске приложения - PullRequest
0 голосов
/ 30 марта 2012

Я хотел бы знать, как получить данные из предпочтительной активности при запуске / возобновлении работы моего приложения.У меня есть действие с предпочтениями, когда пользователь может выбрать языковой стандарт приложения, проблема заключается в том, что при запуске приложения иногда не удается прочитать настройки из основного действия, что вызывает принудительное закрытие.вот код, который у меня есть.Пожалуйста, помогите, спасибо

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

}

, это файл Preferences.xml в папке 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>

журнал ошибок

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

еще раз спасибо за то, что вы взяливремя.

1 Ответ

0 голосов
/ 30 марта 2012

вы можете проверить предпочтения в onResume, вам не нужно помещать это в onCreate.Вы должны снова взглянуть на жизненный цикл андроида.Это очень фундаментально.http://developer.android.com/reference/android/app/Activity.html#onResume()

...