2011-06-03 51 views
2

有没有人试过吗?在应用程序处于后台时更改语言

我有一个应用程序,我已配置根据设备的区域设置使用两种不同语言运行。

重现步骤。

(考虑到我用法语和英语)

  1. 设置英语语言环境。
  2. 加载应用程序。
  3. 将应用程序发送到后台。
  4. 将设备区域设置更改为法语。
  5. 返回到您的应用并将其激活。
  6. (全部看起来好吧..现在一切都用法语加载(因为它应该))
  7. 转到另一个屏幕。
  8. 收到NullPointerException !!!

HUH ?!

对此有何看法?

后来编辑(请求)

这里的亚行堆栈跟踪:

06-04 00:35:27.093: WARN/dalvikvm(18434): threadid=3: thread exiting with uncaught exception (group=0x4001dc20) 
06-04 00:35:27.093: ERROR/AndroidRuntime(18434): Uncaught handler: thread main exiting due to uncaught exception 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.MyPackageName.__XXXXX__/com.MyPackageName.__XXXXX__.activity.MenuTabActivity}: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.MyPackageName.__XXXXX__/com.MyPackageName.__XXXXX__.activitygroup.MyProfileActivityGroup}: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.MyPackageName.__XXXXX__/com.MyPackageName.__XXXXX__.activity.myprofile.DriverProfileActivity}: java.lang.NullPointerException 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496) 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  at android.app.ActivityThread.access$2200(ActivityThread.java:119) 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863) 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  at android.os.Handler.dispatchMessage(Handler.java:99) 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  at android.os.Looper.loop(Looper.java:123) 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  at android.app.ActivityThread.main(ActivityThread.java:4363) 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  at java.lang.reflect.Method.invoke(Method.java:521) 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:862) 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620) 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  at dalvik.system.NativeStart.main(Native Method) 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434): Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.MyPackageName.__XXXXX__/com.MyPackageName.__XXXXX__.activitygroup.MyProfileActivityGroup}: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.MyPackageName.__XXXXX__/com.MyPackageName.__XXXXX__.activity.myprofile.DriverProfileActivity}: java.lang.NullPointerException 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496) 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  at android.app.ActivityThread.startActivityNow(ActivityThread.java:2335) 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127) 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339) 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:648) 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  at android.widget.TabHost.setCurrentTab(TabHost.java:320) 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  at android.widget.TabHost.addTab(TabHost.java:213) 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  at com.MyPackageName.__XXXXX__.activity.MenuTabActivity.onCreate(MenuTabActivity.java:80) 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  ... 11 more 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434): Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.MyPackageName.__XXXXX__/com.MyPackageName.__XXXXX__.activity.myprofile.DriverProfileActivity}: java.lang.NullPointerException 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496) 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  at android.app.ActivityThread.startActivityNow(ActivityThread.java:2335) 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127) 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339) 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  at com.MyPackageName.__XXXXX__.activitygroup.MyProfileActivityGroup.startChildActivity(MyProfileActivityGroup.java:69) 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  at com.MyPackageName.__XXXXX__.activitygroup.MyProfileActivityGroup.onCreate(MyProfileActivityGroup.java:63) 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  ... 20 more 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434): Caused by: java.lang.NullPointerException 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  at com.MyPackageName.__XXXXX__.activity.myprofile.DriverProfileActivity.onCreate(DriverProfileActivity.java:545) 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) 
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):  ... 27 more 

有人吗?

+3

什么是堆栈跟踪说呢? – Kaj 2011-06-03 21:49:01

+0

它的工作原理就像你所期望的,如果你在法国开始了区域设置? – CaseyB 2011-06-03 21:55:39

+0

是的,从非活动状态返回时它的工作方式与预期相同 – 2011-06-03 21:57:57

回答

1

发现了什么是错误的。

我的OnDestroy方法中有一个System.Exit(0),它在我进入后台时处于屏幕中。

看来,如果您将应用程序发送到背景然后回来,OnDestroy将不会被调用。

如果在此期间发生变化的区域设置,然后再回来吧,OnDestray将被称为!!!!

这很奇怪,但它更多但在我的情况下,onDestroy被隐式调用(System.exit(0),但屏幕仍然存在..应用程序没有退出(甚至更多..它您输入正确加载的法语!),这是令人困惑的。

反正..怪异的东西解决了,谢谢。

+0

由于某种原因,每次从活动 – ACM64 2011-06-10 15:06:09

+0

中调用onDestroy时,onDestroy在更改LOCALE后被调用onl。你确定我们的发言吗?当按下home键时,活动处于“睡眠模式”。我没有理由打电话给Destroy! – 2011-06-14 09:37:04

+0

那么,睡眠模式实际上不是“从活动中脱身”,它的生命周期有点改变,因为当前的活动仍然处于最佳状态。 – ACM64 2011-06-23 10:29:05

0

没有真正看到你的代码,它是不可能确定问题是什么。上面的评论给你一个开始尝试调试问题的好地方。有一点需要注意,只要你使用String作为关键字。如果在运行应用程序期间键被翻译,它将无法找到值。

1

它可能是,你在外面活动的生命周期和当你切换没有被创造了一些对象,所以你应该检查下一个:

  1. 如果这个工程W/O第4步?
  2. 如果被缓存某些值/没有翻译正确(就像你设置一些领域,而不是每次更新)

    mField = getString(R.string.title); 
    
相关问题