【问题标题】:Android - raw resources as InputStreamAndroid - 作为 InputStream 的原始资源
【发布时间】:2011-08-18 11:39:30
【问题描述】:

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

一切都好。

但是,当我开始运行时,我得到一个常量 NullPointerException。
对于上下文,我有一个连接类,扩展应用程序,基本构造函数应该只是将证书作为 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 中,这似乎认为它无法访问它?是这样吗,还是我错过了一些令人眼花缭乱的东西?

【问题讨论】:

    标签: android resources nullpointerexception inputstream


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题。原来我使用了错误的(空)上下文,所以实际上没有资源可以通过 getResource() -> NullPointerException...

      【讨论】:

        【解决方案3】:

        您似乎无法从构造函数访问资源,因为该对象尚未初始化。尝试稍后调用它,当你第一次真正需要它时。

        【讨论】:

        • 我试过了,我认为它有效,但它没有。所以我创建了一个新的 RCPHandshake2 实例,然后调用它的 getSocketFactory() 方法。我什至尝试过这样做。getResources()....但它没有帮助。你还有什么想法吗?在此先感谢:-)
        猜你喜欢
        • 2014-09-15
        • 2015-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-09
        • 1970-01-01
        • 1970-01-01
        • 2011-05-04
        相关资源
        最近更新 更多