Android - 作为InputStream的原始资源

时间:2011-05-04 11:57:28

标签: android resources nullpointerexception inputstream

所以我正在尝试与Android建立HTTPS连接,使用客户端证书进行验证。我已将此证书导入BKS商店,并插入我的res / raw。

一切都好。

但是,当我来运行时,我得到一个常量的NullPointerException 对于上下文,我有一个Connection类,扩展了Application,基本的构造函数应该只是将cert作为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 个答案:

答案 0 :(得分:3)

似乎您无法从构造函数访问资源,因为该对象尚未启动。当你第一次真正需要时,试着稍后再打电话。

答案 1 :(得分:0)

我遇到了同样的问题。原来我使用了一个错误的(空)Context,所以实际上没有资源可以通过getResource()访问 - &gt; NullPointerException ...

答案 2 :(得分:0)

要使用原始InputStream打开这些资源,请调用具有资源ID(即R.raw.filename)的Resources.openRawResource()。