У меня есть метод в моем приложении для Android, который возвращает идентификатор в соответствии с его именем, этот метод работает так хорошо в обычных случаях, но при запуске его из отдельного потока он возвращает Null
, даже при запуске этой нити на UIThread
.getPackageName() возвращает null
Этот метод:
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;
}
И Exception:
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)
UPDATE:
после выполнения некоторых попыток я нашел, что getPackageName()
является один который бросает Exce ption, даже если попытаться статически предоставить имя моего ресурса, это дает мне тот же результат.
HomeView
- класс активности в моем приложении для Android, но класс JSONParsing
- это нормальный класс java, который вызывает этот метод из HomeView
.
@MD это просто я определил его как последнюю строку в моем приложении, thx для этого уведомления я заменил его в вопросе – MRefaat
Попробуйте получить целочисленное значение в строке как 'Integer.parseInt (status)' кроме 'Integer.toString (status)' – GrIsHu
try 'context.getPackageName()', передать контекст этому методу и сделать это –