2016-03-21 23 views
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> 

答えて

0

は私の全体の答えを変更しました!

コードを置き換える場所を確認する必要があります。 "["と "]"の文字はsrtipして、 "、"に分割して文字列の配列を取得できます。

String csv = final_data.replaceAll("\\[|\\]|s", ""); 
String[] numbers = csv.split(","); 
// Toast.makeText(getBaseContext(), "Message : " + final_data, Toast.LENGTH_SHORT).show(); 
Random doubleNumberRandom = new Random(); 
String number = numbers[doubleNumberRandom.nextInt(numbers.length)]; 
TextView myText = (TextView) findViewById(R.id.textView); 
myText.setText(number); 

あなたは今numbersにランダムインデックスを生成し、あなたのTextViewに直接その結果の数の文字列を設定することができます。

+0

こんにちは、私はそれが欲しいのではなく、ほぼ唯一の方法で動作します。私は(int番号)を使用している場合私は例えばD32 - D91 - D53などの奇妙な結果を取得し、私がそれを与えた選択ではありません。数値が正しい(文字番号)を使用している場合は、 "、"と "[]"だけがテキストビューにも表示されます。これを修正する方法はありますか – SvenH

+0

私は私の答えを更新しました。私はあなたのコードを実行して何をしていたのか分かりませんでした。サンプル写真や何もないので、私は頭の中で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してください。 –

+0

ありがとうmiao。これは完璧に機能しました。 – SvenH

関連する問題