2017-11-21 4 views
0

私はアンドロイドスタジオを初めて使い、2つのスピナーを選択できるようにしてユーザーを入力してから「終了時刻」を設定するアプリを作成しました計算される。私はフィールドが選択されていないので、アプリケーションがクラッシュする 'VerifyButton'をクリックすると、このページにいくつかの検証を追加しようとしています。私の意図は、ユーザーが「VerifyButton」を選択したときに、エラーメッセージが表示され、スピナー値が入力されたことを意味します。これは、アプリがクラッシュしないことを意味します。私はonNothingSelected内でいくつかのメソッドを試してみましたが、うまくいかないようです。そこにあるのか、VerifyButtonにする必要があるのか​​分かりませんでしたか?前もって感謝します! spinner.setAdapter(myAdapter)後選択したスピナー値を有効にするか、ボタンを選択できません

スピナーのJava

final ArrayAdapter<String> myAdapter = new ArrayAdapter<String>(CreateLine.this, 
      R.layout.spinner_layout, getResources().getStringArray(R.array.LineTypes)); 
    myAdapter.setDropDownViewResource(R.layout.spinner_layout); 
    spinner.setAdapter(myAdapter); 

    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> adapterView, View view, int position2, long l) { 


      switch (position2) { 
       case 0: 
        quantity.setText(""); 
        break; 
       case 1: 
        quantity.setVisibility(View.INVISIBLE); 
        timeadded = 10; 
        duration.setText(timeadded + " Hours"); 
        spinner2.setVisibility(View.INVISIBLE); 
        break; 
       case 2: 
        quantity.setVisibility(View.INVISIBLE); 
        timeadded = 10; 
        duration.setText(timeadded + " Hours"); 
        spinner2.setVisibility(View.INVISIBLE); 
        break; 
       case 3: 
        quantity.setVisibility(View.INVISIBLE); 
        timeadded = 10; 
        duration.setText(timeadded + " Hours"); 
        spinner2.setVisibility(View.INVISIBLE); 
        break; 
       case 4: 
        quantity.setVisibility(View.VISIBLE); 
        duration.setText(timeadded + " Hours"); 
        spinner2.setVisibility(View.VISIBLE); 
        Toast.makeText(getApplicationContext(), "Select Package Type", Toast.LENGTH_SHORT).show(); 
        break; 
       case 5: 
        quantity.setVisibility(View.VISIBLE); 
        duration.setText(timeadded + " Hours"); 
        spinner2.setVisibility(View.VISIBLE); 
        Toast.makeText(getApplicationContext(), "Select Package Type", Toast.LENGTH_SHORT).show(); 
        break; 
       case 6: 
        quantity.setVisibility(View.VISIBLE); 
        duration.setText(timeadded + " Hours"); 
        spinner2.setVisibility(View.VISIBLE); 
        Toast.makeText(getApplicationContext(), "Select Package Type", Toast.LENGTH_SHORT).show(); 
        break; 
       default: 
        break; 

      } 
     } 


     @Override 
     public void onNothingSelected(AdapterView<?> adapterView) { 

     } 

    }); 



    ArrayAdapter<String> myAdapter2 = new ArrayAdapter<String>(CreateLine.this, 
      R.layout.spinner_layout, getResources().getStringArray(R.array.PackageTypes)); 
    myAdapter2.setDropDownViewResource(R.layout.spinner_layout); 
    spinner2.setAdapter(myAdapter2); 

    spinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) { 


      switch (position) { 
       case 0: 
        quantity.setText(""); 
        break; 
       case 1: 
        quantity.setText(PackageType20); 
        timeadded = 28; 
        duration.setText(timeadded + " Hours"); 


        break; 
       case 2: 
        quantity.setText(PackageType30); 
        timeadded = 27; 
        duration.setText(timeadded + " Hours"); 

        break; 
       default: 
        break; 
      } 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> adapterView) { 

     } 


    }); 

VerifyButtonジャワ

 VerifyButton.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View view) { 



      spinnerSelection = String.valueOf(spinner.getSelectedItem()); 
      spinnerSelection2 = String.valueOf(spinner2.getSelectedItem()); 
      String q = quantity.getText().toString(); 
      String d = duration.getText().toString(); 

      DateTime datetime = new DateTime(yearNow, monthNow, dayNow, hourNow, minuteNow); 
      DateTimeFormatter fmt = DateTimeFormat.forPattern("EE dd MM yyyy" + "\n" + " h:mm a "); 
      String formattedtime = fmt.print(datetime); 
      CalculateButton.setText(formattedtime); 

      // Plus some hours, minutes, and seconds to the original DateTime. 
      DateTimeFormatter fmt2 = DateTimeFormat.forPattern("EE dd MM yyyy" + "\n" + " h:mm a "); 

      DateTime dateTime1 = datetime.plusHours(timeadded); 
      String endtimecalc = fmt2.print(dateTime1); 
      TextView endtime = findViewById(endtimetextView); 
      endtime.setVisibility(View.VISIBLE); 
      endtime.setText(endtimecalc); 

      if (spinnerSelection !=null) { 
       Toast.makeText(getApplicationContext(),"enter value", 
         Toast.LENGTH_LONG).show(); 
      } 


      //INSERT DATA TO DATABASE 
      boolean isInserted = myDb.insertData(
        spinnerSelection, 
        spinnerSelection2, 
        q, 
        d, 
        formattedtime, 
        endtimecalc); 


      if (isInserted == true) 
       Toast.makeText(CreateLine.this, "Data Inserted Successfully", Toast.LENGTH_LONG).show(); 
      else 
       Toast.makeText(CreateLine.this, "This line is already Active!", Toast.LENGTH_LONG).show(); 

      Intent intent = new Intent(getApplicationContext(), Dashboard.class); 
      startActivity(intent); 



     } 
    }); 
+0

ときにアプリがクラッシュ

ArrayList<String> list = getResources().getStringArray(R.array.LineTypes); yourSpinner.setSelection(list[0]); 

また、これに代えてチェックを適用どのようなログが言ったか教えていただけますか? –

+0

値が入力されていないのでクラッシュするだけで、ボタンがスピナー値を選択しなければならない場合に有効です。 – Almac3

+0

watは "quantity"& "duration"と表示されますか?これを確認すると、nullまたはdb挿入コードがエラーを起こします。スピナーのデフォルトの選択位置はゼロです。スピナーにデフォルトの選択があるため、onNothingselected()は起動できません。 –

答えて

0

加えます。

spinner.setAdapter(myAdapter) 
spinner.setSelection(-1); 

その後、上のボタンのクリックを確認します。

if (spinner.getSelectedItemPosition() == -1 || spinner2.getSelectedItemPosition() == -1){ 
     // showErrorMessage 
    } 
    else{ 
     //do your work 
    } 

はspinner2

+0

ありがとうございますが、作業していません – Almac3

+0

適切な場所に行を追加しようとしましたか?私の答えをリファクタリングさせてください –

+0

@ Almac3私は私の答えを更新しました –

0

ために同じことを行い、あなたのすべてを置き換えます

getApplicationContext() 

getContext() 

、代わりにgetApplicationContextの行は次の():

Intent intent = new Intent(getApplicationContext(), Dashboard.class); 

次のようにクラス名を使用してください:あなたはあなたの定義されている

Intent intent = new Intent(YourClassName.this, Dashboard.class); 

クラス確認ボタン。

としてスピナのデフォルト値を設定しonNothingSelected方法の両方で:通り

if (spinnerSelection !=null) { 
      Toast.makeText(getApplicationContext(),"enter value", 
        Toast.LENGTH_LONG).show(); 
     } 

if (spinnerSelection.getSelectedItem().toString().isEmpty() || spinnerSelection.getSelectedItem().toString() == "") 
{ 
    Toast.makeText(getApplicationContext(),"enter value", 
    Toast.LENGTH_LONG).show(); 
} 
+0

ありがとうございましたが、これを試してもうまくいかなかった – Almac3

+0

編集した回答を見てください –

+0

上記の方法であなたのスピナーの最後の部分を見てください。これは仲間の仕事です。ハッピーコーディング:)。それが私に教えてくれるなら、さらに助けを求めるなら自由にテキストを教えてください。 –

関連する問題