【发布时间】:2014-02-28 08:02:59
【问题描述】:
我的 android 应用程序中有一个方法,它根据它的名称返回 drawable id,这个方法在正常情况下运行良好,但是当从单独的线程运行它时,它返回 @987654321 @,即使在 UIThread 上运行此线程。
这个方法是:
public int get_drawable(int status){
int res;
res = getResources().getIdentifier("something"+ Integer.toString(status) , "drawable", getPackageName()); // this is the line which throws the Exception
return res;
}
还有例外:
02-04 13:43:14.644: WARN/System.err(594): java.lang.NullPointerException
02-04 13:43:14.664: WARN/System.err(594): at android.content.ContextWrapper.getResources(ContextWrapper.java:81)
02-04 13:43:14.664: WARN/System.err(594): at com.example.solaceap.HomeView.get_drawable(HomeView.java:525)
02-04 13:43:14.674: WARN/System.err(594): at com.example.solaceap.JSONParsing.alter_light(JSONParsing.java:689)
02-04 13:43:14.674: WARN/System.err(594): at com.example.solaceap.JSONParsing.parse_hmm_response(JSONParsing.java:297)
02-04 13:43:14.674: WARN/System.err(594): at com.example.solaceap.JSONParsing.check_hmm_type(JSONParsing.java:218)
02-04 13:43:14.684: WARN/System.err(594): at com.example.solaceap.JSONParsing.parse_hmm_response(JSONParsing.java:170)
02-04 13:43:14.684: WARN/System.err(594): at com.example.solaceap.Login.parse_response(Login.java:143)
02-04 13:43:14.704: WARN/System.err(594): at com.example.solaceap.Login.response_received(Login.java:129)
02-04 13:43:14.704: WARN/System.err(594): at com.example.solaceap.Login$2$1.run(Login.java:106)
02-04 13:43:14.714: WARN/System.err(594): at android.os.Handler.handleCallback(Handler.java:605)
02-04 13:43:14.724: WARN/System.err(594): at android.os.Handler.dispatchMessage(Handler.java:92)
02-04 13:43:14.724: WARN/System.err(594): at android.os.Looper.loop(Looper.java:137)
02-04 13:43:14.724: WARN/System.err(594): at android.app.ActivityThread.main(ActivityThread.java:4340)
02-04 13:43:14.724: WARN/System.err(594): at java.lang.reflect.Method.invokeNative(Native Method)
02-04 13:43:14.724: WARN/System.err(594): at java.lang.reflect.Method.invoke(Method.java:511)
02-04 13:43:14.724: WARN/System.err(594): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
02-04 13:43:14.734: WARN/System.err(594): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
02-04 13:43:14.734: WARN/System.err(594): at dalvik.system.NativeStart.main(Native Method)
更新:
在做了一些尝试后,我发现getPackageName() 是引发异常的那个,即使尝试静态提供我的资源包名称它也会给我相同的结果。
HomeView 是我的 android 应用程序中的一个 Activity 类,但 JSONParsing 类是一个普通的 java 类,它从 HomeView 调用此方法。
【问题讨论】:
-
@MD 只是我将它定义为我的应用程序中的最终字符串,感谢那个通知我在问题中替换了它
-
除了
Integer.toString(status)之外,尝试获取字符串中的整数值为Integer.parseInt(status) -
尝试
context.getPackageName(),将上下文传递给此方法并执行此操作 -
问题是你什么时候开始新线程?也许您从中获取包名称的上下文尚未正确创建。
-
@MRefaat 只有一个 UI 线程 - 无需启动新线程。反正。您需要正确中断线程和处理程序中断。
标签: android resources android-resources ui-thread getresource