0
私はCheckBoxをチェックして選択を保存できるAndroidアプリを作ろうとしています。保存は機能しますが、この保存されたデータから乱数を取得したい場合は-1を取得します。誰かが私が間違っていることを教えてもらえますか?保存したファイルから乱数を取得するにはどうすればよいですか? (Java)
メッセージを表示するためにトーストを使用すると、[]
の間で選択した番号がわかりますので、それでも配列は正しいですか?
.java
ファイル
public class MainActivity extends AppCompatActivity {
Button save, load;
TextView message;
String Message;
int data_block = 100;
static ArrayList<Integer> selection = new ArrayList<Integer>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
save = (Button) findViewById(R.id.save_button);
load = (Button) findViewById(R.id.load);
message = (TextView) findViewById(R.id.textView);
save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Message = selection.toString();
try {
FileOutputStream fou = openFileOutput("doubleArrayNumbers.txt", MODE_WORLD_READABLE);
OutputStreamWriter osw = new OutputStreamWriter(fou);
try {
osw.write(Message);
osw.flush();
osw.close();
Toast.makeText(getBaseContext(), "Data Saved", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
});
load.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
FileInputStream fis = openFileInput("doubleArrayNumbers.txt");
InputStreamReader isr = new InputStreamReader(fis);
char[] data = new char[data_block];
String final_data = "";
int size;
try {
while ((size = isr.read(data)) > 0) {
String read_data = String.copyValueOf(data, 0, size);
final_data += read_data;
data = new char[data_block];
}
if(final_data.length() == 0){
Toast.makeText(MainActivity.this, "You need to pick a selection first", Toast.LENGTH_SHORT).show();
} else{
// Toast.makeText(getBaseContext(), "Message : " + final_data, Toast.LENGTH_SHORT).show();
Random doubleNumberRandom = new Random();
int number = final_data.indexOf(doubleNumberRandom.nextInt(final_data.length()));
TextView myText = (TextView) findViewById(R.id.textView);
String myString = String.valueOf(number);
myText.setText(myString);
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
});
}
public void selectNumber(View view) {
boolean numberChecked = ((CheckBox) view).isChecked();
switch (view.getId()) {
case R.id.number_D1:
if (numberChecked) {
selection.add(new Integer(1));
}else{
selection.remove(new Integer(1));
}
break;
case R.id.number_D2:
if (numberChecked) {
selection.add(new Integer(2));
} else {
selection.remove(new Integer(2));
}
break;
case R.id.number_D3:
if (numberChecked) {
selection.add(new Integer(3));
} else {
selection.remove(new Integer(3));
}
break;
case R.id.number_D4:
if (numberChecked) {
selection.add(new Integer(4));
} else {
selection.remove(new Integer(4));
}
break;
case R.id.number_D5:
if (numberChecked) {
selection.add(new Integer(5));
} else {
selection.remove(new Integer(5));
}
break;
case R.id.number_D6:
if (numberChecked) {
selection.add(new Integer(6));
} else {
selection.remove(new Integer(6));
}
break;
case R.id.number_D7:
if (numberChecked) {
selection.add(new Integer(7));
} else {
selection.remove(new Integer(7));
}
break;
case R.id.number_D8:
if (numberChecked) {
selection.add(new Integer(8));
} else {
selection.remove(new Integer(8));
}
break;
case R.id.number_D9:
if (numberChecked) {
selection.add(new Integer(9));
} else {
selection.remove(new Integer(9));
}
break;
case R.id.number_D10:
if (numberChecked) {
selection.add(new Integer(10));
} else {
selection.remove(new Integer(10));
}
break;
}
}
}
.xml
ファイル
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.developer.sven.seceltiedartworkout.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:textAppearanceLarge"
android:text="Dart Workout"
android:id="@+id/textView"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="83dp"
android:layout_alignParentBottom="true"
android:layout_alignEnd="@+id/load" />
<Button
android:layout_width="125dp"
android:layout_height="125dp"
android:text="D"
android:textSize="50dp"
android:id="@+id/load"
android:onClick="DoubleButton"
android:background="#0a07c5"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_marginTop="37dp" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Save"
android:id="@+id/save_button"
android:layout_centerVertical="true"
android:layout_alignEnd="@+id/load" />
<CheckBox
android:layout_width="wrap_content"
android:layout_height="21dp"
android:id="@+id/number_D1"
android:text="D1"
android:onClick="selectNumber"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:checked="false" />
<CheckBox
android:layout_width="wrap_content"
android:layout_height="21dp"
android:id="@+id/number_D2"
android:text="D2"
android:layout_alignParentStart="true"
android:onClick="selectNumber"
android:layout_below="@+id/number_D1"
android:layout_alignParentLeft="true"
android:checked="false" />
<CheckBox
android:layout_width="wrap_content"
android:layout_height="21dp"
android:id="@+id/number_D3"
android:text="D3"
android:layout_alignParentStart="true"
android:onClick="selectNumber"
android:layout_below="@+id/number_D2"
android:layout_alignParentLeft="true"
android:checked="false" />
<CheckBox
android:layout_width="wrap_content"
android:layout_height="21dp"
android:id="@+id/number_D4"
android:text="D4"
android:layout_alignParentStart="true"
android:onClick="selectNumber"
android:layout_below="@+id/number_D3"
android:layout_alignParentLeft="true"
android:checked="false" />
<CheckBox
android:layout_width="wrap_content"
android:layout_height="21dp"
android:id="@+id/number_D5"
android:text="D5"
android:layout_alignParentStart="true"
android:onClick="selectNumber"
android:layout_below="@+id/number_D4"
android:layout_alignParentLeft="true"
android:checked="false" />
<CheckBox
android:layout_width="wrap_content"
android:layout_height="21dp"
android:text="D6"
android:id="@+id/number_D6"
android:layout_below="@+id/number_D5"
android:layout_alignParentStart="true"
android:checked="false"
android:onClick="selectNumber"/>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="21dp"
android:text="D7"
android:id="@+id/number_D7"
android:layout_below="@+id/number_D6"
android:layout_alignParentStart="true"
android:onClick="selectNumber"
android:checked="false" />
<CheckBox
android:layout_width="wrap_content"
android:layout_height="21dp"
android:text="D8"
android:id="@+id/number_D8"
android:layout_below="@+id/number_D7"
android:layout_alignParentStart="true"
android:onClick="selectNumber"
android:checked="false" />
<CheckBox
android:layout_width="wrap_content"
android:layout_height="21dp"
android:text="D9"
android:id="@+id/number_D9"
android:layout_below="@+id/number_D8"
android:layout_alignEnd="@+id/number_D8"
android:onClick="selectNumber"
android:checked="false" />
<CheckBox
android:layout_width="wrap_content"
android:layout_height="21dp"
android:text="D10"
android:id="@+id/number_D10"
android:layout_below="@+id/number_D9"
android:onClick="selectNumber"
android:checked="false" />
</RelativeLayout>
こんにちは、私はそれが欲しいのではなく、ほぼ唯一の方法で動作します。私は(int番号)を使用している場合私は例えばD32 - D91 - D53などの奇妙な結果を取得し、私がそれを与えた選択ではありません。数値が正しい(文字番号)を使用している場合は、 "、"と "[]"だけがテキストビューにも表示されます。これを修正する方法はありますか – SvenH
私は私の答えを更新しました。私はあなたのコードを実行して何をしていたのか分かりませんでした。サンプル写真や何もないので、私は頭の中でxmlをすばやく解釈するのが得意ではありません。とにかく、これはこれを行うための一つの方法です。一種の解決策のように、「コードの行を変えていない」ものを並べ替える。この全体の方法は、車輪を再発明するようなものです。 'List'sの' serializable'プロパティを使ってこの作業を行うことができます。チェックアウト[this](http://stackoverflow.com/questions/16111496/java-how-can-i-write-my-arraylist-to-a-file-and-read-load-that-file-to-あなたが例が必要な場合は私にpingしてください。 –
ありがとうmiao。これは完璧に機能しました。 – SvenH