2016-03-21 10 views
0

CheckBox'u kontrol edip seçiminizi kaydedebileceğiniz bir Android uygulaması yapmaya çalışıyorum. Kaydet, ancak bu kaydedilen verilerden rastgele bir sayı almak istediğimde -1 elde ediyorum. Birisi bana yanlış yaptığımı söyleyebilir mi?Kayıtlı dosyamdan rasgele bir numarayı nasıl alabilirim? (Java)

İletiyi görüntülemek için Tost'u kullandığımda bana [] arasında seçtiğim numaraları verir, böylece hala bir dizi doğru mu?

.java dosya

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 dosya

<?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> 

cevap

0

benim bütün cevabı değiştirdi!

Kodun yerini nasıl değiştirebileceğinizi görebilmeniz gerekir. "[" Ve "]" karakterleri, bir dizi dizge (şimdi dizine eklendiğinde, sanırım orijinal niyetinize daha yakın) almak için srtiped, sonra da "," üzerine bölünebilir.

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); 

Artık numbers için rastgele bir indeks oluşturmak ve textview doğrudan o çıkan sayı dizesini ayarlayabilirsiniz.

+0

Merhaba Maio Liu, neredeyse istediğim gibi çalışmıyor. (int numarası) kullanıyorum, örneğin D32 - D91-D53 vb. gibi garip sonuçlar elde ederim ve verdiğim seçimden değil. (char number) kullanıyorum, rakamlar sadece "," doğrudur ve "[]" metin görünümünde de gösterilir. Bu – SvenH

+0

düzeltmek için bir yolu var Cevabımı güncelledi. Ne yaptığınızı bulmak için kodunuzu koştum, çünkü hiçbir örnek resim ya da başka bir şey yok, ve xml'i hızlı bir şekilde yorumlamakta o kadar iyi değilim. Her neyse, bunu yapmanın bir yolu budur. "En az kod satırlarının kırılması gibi şeyler değişti" türünde bir çözüm. Bütün bu yöntem, tekerleği yeniden icat ediyor. Bu işi yapmak için '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' [Bu] göz atın (http://stackoverflow.com/questions/16111496/java-how-can-i-write-my-arraylist-to-a-file-and-read-load-that-file-to- Örneklere ihtiyacınız varsa,) ve ping yapın. –

+0

teşekkürler miao. Bu mükemmel çalıştı. – SvenH

İlgili konular