android - 更改语言设置后 Android 应用中的空指针异常

标签 android

我的 Android 应用程序在打开后崩溃并出现空指针异常,转到“设置”并将语言从“英语(美国)”更改为“英语(英国)”,然后返回到应用程序。将语言从英语更改为西类牙语也会导致崩溃。

应用程序因 ViewPager 对象变为空而崩溃。此对象在 Activity 的 onCreate() 方法中创建,并在我的代码中的其他位置访问,但从未更改或重新创建。

我没有对我的应用进行任何本地化,以使其适用于英语(美国)以外的语言。

public class TabMainActivity extends FragmentActivity implements ActionBar.TabListener, OnSharedPreferenceChangeListener
{
    ActionBar actionBar;
    ActionBar.Tab popsVideoTab, corralStatusTab, reportsTab,currentStatusTab, storeStatusTab, supportTab;
    ViewPager viewPager;
    TabsPagerAdapter mAdapter;
    Context context;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tabmain);
    actionBar = getActionBar();     
    actionBar.setDisplayShowTitleEnabled(true);

    mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
    viewPager = (ViewPager) findViewById(R.id.pager);
    viewPager.setAdapter(mAdapter);

    // Creating ActionBar tabs.
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);


    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener()
    {
         @Override
        public void onPageSelected(int position)
        {
            actionBar.setSelectedNavigationItem(position);
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2)
        {
        }

        @Override
        public void onPageScrollStateChanged(int arg0)
        {
        }
    });
}


public int pagerGetCurrentItem()
{
    int pagerCurrentItem = viewPager.getCurrentItem();
    return pagerCurrentItem;
}

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pager"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    </android.support.v4.view.ViewPager>
</FrameLayout>

Stack Trace如下。

USER_COMMENT=null
ANDROID_VERSION=4.4.2
APP_VERSION_NAME=4.5.2
BRAND=samsung
PHONE_MODEL=SM-T210R
CUSTOM_DATA=
STACK_TRACE=java.lang.RuntimeException: Unable to start activity ComponentInfo{com.carttronics.storeport/com.carttronics.storeport.TabMainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2400)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2458)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4041)
at android.app.ActivityThread.access$1000(ActivityThread.java:172)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1311)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5598)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.carttronics.storeport.TabMainActivity.pagerGetCurrentItem(TabMainActivity.java:507)
at com.carttronics.storeport.CurrentStatusFragmentTab.onCreate(CurrentStatusFragmentTab.java:95)
at android.support.v4.app.Fragment.performCreate(Fragment.java:1477)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:893)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1086)
at android.support.v4.app.FragmentManagerImpl.dispatchCreate(FragmentManager.java:1879)
at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:215)
at com.carttronics.storeport.TabMainActivity.onCreate(TabMainActivity.java:66)
at android.app.Activity.performCreate(Activity.java:5459)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)
... 12 more

最佳答案

更改语言后,将调用 Activity 的 OnDestroy 方法,然后调用 onCreate 方法。 onCreate Activity 为我的应用程序创建了一个新的 ViewPager。我的应用程序有几个 fragment ,其中一个在再次重新创建之前调用了 onResume() 并访问了 ViewPager 对象。

我对所有对 ViewPager 的引用进行了空值检查,应用程序不再崩溃。

关于android - 更改语言设置后 Android 应用中的空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33676544/

相关文章:

android - 单击 web View 中 html 中的链接时,如何防止文本改变颜色? (安卓)

android - Cordova-CLI 和图标(不包括在内)

java - Android中主线程和AsyncTask之间的ConcurrentLinkedQueue使用

Android 语音转文本问题

android - Room SQLite 数据库 - 删除所有 LIKE % :param%

java - android 如何查找 View 中定义的元素

android - 将 google play/apple store 自动续订订阅与内部帐户同步的预期行为是什么?

java - Samsung Galaxy Tab S 无法从 "Download"目录获取 listFiles

android - 无法获取 BatchedBridge,请确保您的包已正确打包

java - 检查隐藏 wifi 网络的可用性