web-dev-qa-db-ja.com

Android resフォルダに入れたrawリソースにアクセスする方法は?

J2MEでは、次のようにしています:getClass().getResourceAsStream("/raw_resources.dat");

しかし、Androidでは、これについて常にnullを取得します、なぜですか?

51
Arkaha
InputStream raw = context.getAssets().open("filename.ext");

Reader is = new BufferedReader(new InputStreamReader(raw, "UTF8"));
25
Adrian Vintu

生ファイルの場合、resディレクトリ内に生フォルダーを作成することを検討し、アクティビティからgetResources().openRawResource(resourceName)を呼び出す必要があります。

121
Samuh

状況によっては、idが生成された場合、代わりにイメージ名を使用して、DrawableまたはRawフォルダーからイメージを取得する必要があります

// Image View Object 
        mIv = (ImageView) findViewById(R.id.xidIma);
// create context Object for  to Fetch  image from resourse 
Context mContext=getApplicationContext();

// getResources().getIdentifier("image_name","res_folder_name", package_name);

// find out below example 
    int i = mContext.getResources().getIdentifier("ic_launcher","raw", mContext.getPackageName());

// now we will get contsant id for that image       
        mIv.setBackgroundResource(i);
13
sravan

事前のアプローチでは、Kotlin 拡張機能 を使用します

fun Context.getRawInput(@RawRes resourceId: Int): InputStream {
    return resources.openRawResource(resourceId)
}

もう1つ興味深いのは、Closeableスコープで定義されている拡張関数useです。

たとえば、例外やメモリ管理を処理することなく、エレガントな方法で入力ストリームを操作できます

fun Context.readRaw(@RawRes resourceId: Int): String {
    return resources.openRawResource(resourceId).bufferedReader(Charsets.UTF_8).use { it.readText() }
}
5
yoAlex5
TextView txtvw = (TextView)findViewById(R.id.TextView01);
        txtvw.setText(readTxt());

 private String readTxt()
    {
    InputStream raw = getResources().openRawResource(R.raw.hello);

    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

    int i;
    try
    {
        i = raw.read();
        while (i != -1)
        {
            byteArrayOutputStream.write(i);
            i = raw.read();
        }
        raw.close();
    }
    catch (IOException e)
    {
        // TODO Auto-generated catch block

        e.printStackTrace();
    }


    return byteArrayOutputStream.toString();

}

TextView01 :: linearlayoutのtxtview hello :: res/rawフォルダーの.txtファイル(uはny othrフォルダーにwelとしてアクセスできます)

最初の2行はonCreate()メソッドで2つ記述されています

残りはActivityを拡張するクラスで記述されます!!

5
poojan9118

InputStream in = getResources()。openRawResource(resourceName);

これは正常に機能します。その前に、rawリソースにxmlファイル/テキストファイルを作成する必要があります。その後、アクセス可能になります。

編集
レイアウトファイルまたはイメージ名にエラーがある場合、com.andriod.Rがインポートされることがあります。したがって、パッケージを正しくインポートする必要があります。そうしないと、rawファイルのみにアクセスできます。

3
java dev

getClass().getResourcesAsStream()はAndroidで正常に動作します。開こうとしているファイルがAPKに正しく埋め込まれていることを確認してください(APKをZipとして開きます)。

通常はAndroid=で、そのようなファイルをassetsディレクトリに配置します。したがって、raw_resources.datはプロジェクトのassetsサブディレクトリにありますが、APKのassetsディレクトリに配置され、以下を使用できます。

getClass().getResourcesAsStream("/assets/raw_resources.dat");

ファイルがAPKのassetsディレクトリにないように、ビルドプロセスをカスタマイズすることもできます。

3
0xF