2016-03-21 33 views
0

我想製作一個Android應用程序,您可以在其中檢查複選框並保存您的選擇。保存工作,但是當我想從這個保存的數據中檢索一個隨機數時,我得到一個-1。有人可以告訴我我做錯了什麼嗎?如何從保存的文件中檢索隨機數字? (Java)

當我使用Toast顯示消息時,它給了我在[]之間選擇的數字,所以它仍然是一個數組嗎?

.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

改變了我的答案!

您應該能夠看到替換代碼的位置。 「[」和「]」字符可以被設置爲srtiped,然後分割爲「,」來獲得一串字符串(現在它們被編入索引,更接近您的原始意圖)。

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

你好Maio Liu,它的功能幾乎不是我想要的。如果我使用(int數)我得到奇怪的結果,例如D32 - D91 -D53等,而不是我給它的選擇。如果我使用(char數字)數字是正確的,只有「,」和「[]」也顯示在textview中。有沒有辦法解決這個問題 – SvenH

+0

我更新了我的答案。我運行你的代碼來弄清楚你在做什麼,因爲沒有示例圖片或任何東西,而且我也不是很擅長快速解釋我的頭腦中的xml。無論如何,這是做到這一點的一種方式。將「最少的代碼行改爲未破解的東西」的解決方案。這整個方法雖然是重新發明輪子。你可以使用List的'serializable'屬性來完成這個工作。看看[這](http://stackoverflow.com/questions/16111496/java-how-can-i-write-my-arraylist-to-a-file-and-read-load-that-file-to- ),如果你需要例子,就可以ping通我。 –

+0

感謝苗。這工作完美。 – SvenH

相關問題