アクティビティとファイル名で getFilesDir() を使用して、ファイルを保存/読み取ることができることを知っています。ただし、ウィジェット内から getFilesDir() を呼び出そうとすると、エラーが発生します。ウィジェットとアクティビティの両方から同じテキスト ファイルにアクセスできるようにしたいと考えています。
それを達成する最も簡単な方法は何ですか?
getFilesDir()
どこからでも使用できるので、アプリケーションContext
からファイルを保存/読み取りできます。
編集:
アプリケーションからクラスを拡張し、そのコンテキストを使用する必要があります。
public class App extends Application{
private static Context mContext;
@Override
public void onCreate() {
super.onCreate();
mContext = this;
}
public static Context getContext(){
return mContext;
}
}
次に、manifest
アプリで、タグname
のプロパティをそのクラスの名前で設定します。次に例を示します。Application
android:name="App"
注:Appは、Applicationを拡張するクラスの名前です。
これで、そのコンテキストを使用してsave\readを実行できます。
App.getContext().getFilesDir();
この目的でAssetManagerを使用できます。簡単な例を次に示します。
AssetManager assetManager = getAssets();
String[] files = assetManager.list("Files");
InputStream input = assetManager.open("helloworld.txt");
int size = input.available();
byte[] buffer = new byte[size];
input.read(buffer);
input.close();
String text = new String(buffer);
更新:申し訳ありませんが、ウィジェットで使用するためにこれが必要だったことを忘れました。あなたはこの答えからこのコードを試すことができます:
InputStream is = mContext.getAssets().open(someFile);
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8"));
警告:このコードをそのまま使用しないでください。エラーやエッジケースをキャッチする適切なコードを使用する必要があります。