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 への呼び出しは、特定のリソースを持たないアプリ R ファイルを参照するため、結果として常に null を返します。その中のリソース。

最後に、xml ファイルをアプリの res/raw フォルダーに配置し、次の方法で xml_file の raw リソースにアクセスする必要がありました。

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 に答える