在Android项目中,我需要一种方法来检索不是来自Context的字符串值,而是来自静态方法。
为此,我已经实现了解决方案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),此对象现在似乎为null。这里是堆栈跟踪:
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属性相关的东西吗?
答案 0 :(得分:0)
在使用资源之前,您需要对布局进行充气。
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);
答案 1 :(得分:0)
我已经通过这种方式解决了问题:我没有引用R.layout.level
,而是使用android:id="@+id/LevelLayout"
为LevelActivity的根布局提供了ID。
然后我把这条线改成了:
findViewById(R.id.LevelLayout).setDrawingCacheEnabled(true);
现在可行了