Android - необработанные ресурсы как InputStream - PullRequest
0 голосов
/ 04 мая 2011

Поэтому я пытаюсь установить HTTPS-соединение с Android, используя сертификат клиента для проверки. Я импортировал этот сертификат в магазин BKS и вставил в мой res / raw.

Все хорошо.

Однако, когда я запускаюсь, я получаю постоянное исключение NullPointerException.
Для контекста у меня есть класс Connection, расширяющий Application, и базовый конструктор должен просто открыть сертификат как InputStream и держать его готовым. Когда я приду, чтобы установить соединение, это будет использовано. Следующим образом (сокращенно):

public class RCPHandshake2 extends Application {

   InputStream in;

   public RCPHandshake2(){
    super.onCreate();
    in = getResources().openRawResource(R.raw.test);        
   }

}

Сборка для этого работает нормально, однако, когда мы туда добираемся (строка 36 в реальной версии), трассировка стека выглядит так:

java.lang.RuntimeException: Unable to start activity   ComponentInfo{com.<company>.t1v2/com.<company>.t1v2.SplashAndText}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
at android.app.ActivityThread.access$2200(ActivityThread.java:119)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4363)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at android.content.ContextWrapper.getResources(ContextWrapper.java:80)
at com.<company>.<component>.RCPHandshake2.<init>(RCPHandshake2.java:36)
at com.<company>.t1v2.SplashAndText.onCreate(SplashAndText.java:43)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
... 11 more

Это кажется неожиданным. Кто-нибудь сталкивался с подобным раньше?
Вечная любовь и признательность в обмен на любые решения / подсказки / советы / указатели от кого-то более опытного с этим, что я !!

PS - В принципе, хотя я знаю, что там есть необработанный ресурс, и он появляется в R.java, кажется, что он не может получить к нему доступ? Это тот случай, или я что-то ослепляю?

Ответы [ 3 ]

3 голосов
/ 04 мая 2011

Кажется, вы не можете получить доступ к ресурсам из конструктора, так как объект еще не был инициализирован. Попробуйте позвонить позже, когда вам действительно понадобится это в первый раз.

0 голосов
/ 31 августа 2018

Чтобы открыть эти ресурсы с помощью необработанного InputStream, вызовите Resources.openRawResource () с идентификатором ресурса, который является R.raw.filename.

0 голосов
/ 09 октября 2013

У меня была такая же проблема.Оказалось, что я использовал неправильный (пустой) контекст, поэтому на самом деле не было ресурсов для доступа через getResource () -> NullPointerException ...

...