J2MEでは、次のようにしています:getClass().getResourceAsStream("/raw_resources.dat");
しかし、Androidでは、これについて常にnullを取得します、なぜですか?
InputStream raw = context.getAssets().open("filename.ext");
Reader is = new BufferedReader(new InputStreamReader(raw, "UTF8"));
生ファイルの場合、resディレクトリ内に生フォルダーを作成することを検討し、アクティビティからgetResources().openRawResource(resourceName)
を呼び出す必要があります。
状況によっては、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);
事前のアプローチでは、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() }
}
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を拡張するクラスで記述されます!!
InputStream in = getResources()。openRawResource(resourceName);
これは正常に機能します。その前に、rawリソースにxmlファイル/テキストファイルを作成する必要があります。その後、アクセス可能になります。
編集
レイアウトファイルまたはイメージ名にエラーがある場合、com.andriod.Rがインポートされることがあります。したがって、パッケージを正しくインポートする必要があります。そうしないと、rawファイルのみにアクセスできます。
getClass().getResourcesAsStream()
はAndroidで正常に動作します。開こうとしているファイルがAPKに正しく埋め込まれていることを確認してください(APKをZipとして開きます)。
通常はAndroid=で、そのようなファイルをassets
ディレクトリに配置します。したがって、raw_resources.dat
はプロジェクトのassets
サブディレクトリにありますが、APKのassets
ディレクトリに配置され、以下を使用できます。
getClass().getResourcesAsStream("/assets/raw_resources.dat");
ファイルがAPKのassets
ディレクトリにないように、ビルドプロセスをカスタマイズすることもできます。