私はアンドロイドアプリケーションを作っています。これは設定アクティビティのファイルにデータを保存します。
ファイルを簡単に書くためにいくつかのカスタム関数を作成しました。設定アクティビティを含め、自分のすべてのアクティビティが継承するクラスにあります。突然ファイルへの読み書きができません
カスタム関数:
public void WriteToFile(String filename, String tag, String value) {
try {
FileOutputStream fileOut = openFileOutput(filename + ".txt", MODE_PRIVATE);
OutputStreamWriter writer = new OutputStreamWriter(fileOut);
writer.write(ReadFile(filename + ".txt") + tag + ":" + value + ";");
writer.close();
} catch (Exception e) {
Toast.makeText(this, "ERROR: " + e.toString(), Toast.LENGTH_LONG).show();
Log.e("Error writing: ", e.toString());
}
}
public void WipeFile(String filename) {
try {
FileOutputStream fileOut = openFileOutput(filename + ".txt", MODE_PRIVATE);
OutputStreamWriter writer = new OutputStreamWriter(fileOut);
writer.write("");
writer.close();
} catch (Exception e) {
Toast.makeText(this, "ERROR: " + e.toString(), Toast.LENGTH_LONG).show();
Log.e("Error writing: ", e.toString());
}
}
public String ReadFile(String filename) {
try {
FileInputStream fileIn = openFileInput(filename + ".txt");
InputStreamReader InputRead = new InputStreamReader(fileIn);
char[] inputBuffer = new char[10000];
String content = "", readString;
int charRead;
while ((charRead = InputRead.read(inputBuffer)) > 0) {
readString = String.copyValueOf(inputBuffer, 0, charRead);
content += readString;
}
InputRead.close();
return content;
} catch (Exception e) { WipeFile(filename); return ""; }
}
public String FileValue(String filename, String tag, String defaultValue) {
String[] content = ReadFile(filename + ".txt").split(";");
for (String pair : content) {
if (pair.split(":")[0].equals(tag)) return pair.split(":")[1];
} WriteToFile(filename, tag, defaultValue); return defaultValue;
}
セッティングアクティビティ:奇妙な何
@Override
@SuppressWarnings("ConstantConditions")
protected void onCreate(Bundle savedInstanceState) {
ToolbarTitle = "Settings";
ActivityID = R.layout.activity_settings;
ToolbarID = R.id.settings_toolbar;
ToolbarIcon = R.mipmap.settings_icon;
ActivityLayout = R.id.settings_layout;
super.onCreate(savedInstanceState);
if (prefs.getInt("LoggedinID", 0) == 0) findViewById(R.id.settings_user).setVisibility(View.GONE);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.settings_lowBattery, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
int spinnerPosition = adapter.getPosition(FileValue("settings", "Alert", "20%"));
Spinner battery = ((Spinner) findViewById(R.id.settings_battery));
battery.setAdapter(adapter);
battery.setSelection(spinnerPosition);
((Switch) findViewById(R.id.settings_notifications)).setChecked(FileValue("settings", "Notifications", "1").equals("1"));
findViewById(R.id.settings_ads).setVisibility((FileValue("settings", "Ads", "1").equals("1") ? View.VISIBLE : View.INVISIBLE));
}
@SuppressWarnings("ConstantConditions")
public void Apply(View view) {
WipeFile("settings");
WriteToFile("settings", "Notifications", (((Switch) findViewById(R.id.settings_notifications)).isChecked() ? "1" : "0"));
WriteToFile("settings", "Alert", ((Spinner) findViewById(R.id.settings_battery)).getSelectedItem().toString());
}
public void Ads(View view) {
Toast.makeText(this, "Just a prank, bro", Toast.LENGTH_SHORT).show();
WriteToFile("settings", "Ads", "0");
}
は、カスタム関数で、それは厄介だったときに、すべてが働いたということではなく、なぜ任意のアイデア?
この問題は、InputRead.read(inputBuffer)が-1(ファイル内のデータなし)を返すReadFile関数で発生しているようです。
ファイルへの書き込みまたはそれからの読み取り時ときに私が先に
おかげ
問題が
1だったのReadFile関数を解決し......、どこに問題があるにもチェックするか見当がつかないwriter.write関数の内部では、ファイルを開いて読み込むことができませんでした。
2.同じReadFile関数が(filename + ".txt")で提供され、 ".txt"も追加されました。
ファイルが存在するとしますか?あなたが探しているファイルがないなどのテーマがあります。 –
@VladMatvienkoまあ、ファイルがないときにうまくいきました。単にファイルを作成しただけです。 場合によっては、ファイルが存在することを確認する方法や作成する方法はありますか? –
動作していた古いコードを見るとよいでしょう。あなたが考えることができるw peoblemsがあります... 1)あなたがそれを実行したときにファイルが閉じられていないので、あなたは情報を追加できません。 2)ファイルはそこにあります。更新されていないため、ファイルエクスプローラで表示されません。 –