0

在我的 Android 项目中,我已将我的证书文件raw/作为raw/mycert.p12.

然后,我尝试X509Certificate通过执行以下操作来获取实例:

//Get input stream of mycert.p12, the input stream is not null
InputStream inputStream = mContext.getResources().openRawResource(com.my.app.R.raw.mycert);

//Get an instance of CertificateFactory
CertificateFactory cf = CertificateFactory.getInstance("X.509");

//Get buffered input stream
InputStream bis = new BufferedInputStream(inputStream);

//Generate certificate instance
//NullpointerException here...
X509Certificate cert = (X509Certificate) cf.generateCertificates(bis);

我也尝试过手动安装此证书(mycert.p12),我确定它是 x.509 类型的证书。

但是为什么从输入流生成它的实例时会得到NullpointerException呢?

4

1 回答 1

0

有人遇到过类似的问题参考答案: Context.anymethod 我指的是应用程序的 R 文件,所以我不能给出从我的库项目的 R 文件中获得的资源 ID。

它将编译,因为库项目 jar 文件包含资源(R.raw.xml_file),但对 context.something 的调用将始终给出 null 作为结果,因为它引用了没有那个特定的 app R 文件里面的资源。

我最后不得不把我的 xml 文件放在应用程序的 res/raw 文件夹中,并以这种方式访问​​ xml_file 原始资源:

int xml_id = context.getResources().getIdentifier("xml_file_name", "raw", context.getPackageName());

// Getting input stream from xml file
InputStream is = context.getResources().openRawResource(xml_id);
于 2013-11-08T20:22:09.583 回答