【问题标题】:NullPointerException when changing android:name value更改 android:name 值时出现 NullPointerException
【发布时间】:2013-08-13 22:00:04
【问题描述】:

在一个 Android 项目中,我需要一种方法来检索字符串值,而不是从上下文中,而是从静态方法中。

为此,我实现了解决方案How can I get a resource content from a static context?,并在应用程序标签中添加了 android:name 属性:

<application android:label="@string/app_name" android:allowBackup="true" android:name=".App">

现在,应用程序启动,但在辅助页面的 OnCreate() 中执行以下代码行时抛出 NullPointerException:

findViewById(R.layout.level).setDrawingCacheEnabled(true);

重要的部分是R.layout.level(“level”是描述页面的文档的名称,level.xml),这个对象现在好像是空的。这里是堆栈跟踪:

23:42:33.255    3550    com.UpMap   ERROR   AndroidRuntime  FATAL EXCEPTION: main
23:42:33.255    3550    com.UpMap   ERROR   AndroidRuntime  java.lang.RuntimeException: Unable to start activity ComponentInfo{com.UpMap/com.UpMap.LevelActivity}: java.lang.NullPointerException
23:42:33.255    3550    com.UpMap   ERROR   AndroidRuntime      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
23:42:33.255    3550    com.UpMap   ERROR   AndroidRuntime      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
23:42:33.255    3550    com.UpMap   ERROR   AndroidRuntime      at android.app.ActivityThread.access$2300(ActivityThread.java:125)
23:42:33.255    3550    com.UpMap   ERROR   AndroidRuntime      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
23:42:33.255    3550    com.UpMap   ERROR   AndroidRuntime      at android.os.Handler.dispatchMessage(Handler.java:99)
23:42:33.255    3550    com.UpMap   ERROR   AndroidRuntime      at android.os.Looper.loop(Looper.java:123)
23:42:33.255    3550    com.UpMap   ERROR   AndroidRuntime      at android.app.ActivityThread.main(ActivityThread.java:4627)
23:42:33.255    3550    com.UpMap   ERROR   AndroidRuntime      at java.lang.reflect.Method.invokeNative(Native Method)
23:42:33.255    3550    com.UpMap   ERROR   AndroidRuntime      at java.lang.reflect.Method.invoke(Method.java:521)
23:42:33.255    3550    com.UpMap   ERROR   AndroidRuntime      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
23:42:33.255    3550    com.UpMap   ERROR   AndroidRuntime      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
23:42:33.255    3550    com.UpMap   ERROR   AndroidRuntime      at dalvik.system.NativeStart.main(Native Method)
23:42:33.255    3550    com.UpMap   ERROR   AndroidRuntime  Caused by: java.lang.NullPointerException
23:42:33.255    3550    com.UpMap   ERROR   AndroidRuntime      at com.UpMap.LevelActivity.onCreate(LevelActivity.java:64)
23:42:33.255    3550    com.UpMap   ERROR   AndroidRuntime      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
23:42:33.255    3550    com.UpMap   ERROR   AndroidRuntime      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
23:42:33.255    3550    com.UpMap   ERROR   AndroidRuntime      ... 11 more

我该如何解决这个问题?对于大多数人来说,最初的解决方案似乎还可以,但对我来说却不是!这与 android:name 属性有关吗?

【问题讨论】:

  • 试着把属性的全名写成“com.google.gms.maps.GoogleMaps”(我的意思是引发 NPE 的活动的名称)
  • 似乎无关

标签: java android nullpointerexception


【解决方案1】:

您需要在使用它的资源之前对布局进行膨胀。

LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
RelativeLayout mFrame = (RelativeLayout)inflater.inflate(R.layout.level, null);   
//Now you can use/reference its resources/views etc.
mFrame.setDrawingCacheEnabled(true);

【讨论】:

  • 在执行 inflate 方法时它给了我android.view.InflateException: Binary XML file line #31: Error inflating class fragment
【解决方案2】:

我自己以这种方式解决了:我没有引用R.layout.level,而是使用android:id="@+id/LevelLayout" 为LevelActivity 的根布局提供了一个ID。 然后我把这行改成:

 findViewById(R.id.LevelLayout).setDrawingCacheEnabled(true);

现在可以了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    • 2019-04-20
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 2013-11-13
    • 1970-01-01
    相关资源
    最近更新 更多