2017-01-20 5 views
-1

私はユーザーが動的に作成したeditTextを通してデータを入力するアンドロイドアプリを作成しています。これらのeditTextはList<EditText>に格納され、List<String>に変換されて値が取得されます。 List<String>のこれらの値もString arrayに変換され、データベース内のメソッドに渡され、ボタンクリックの結果が得られます。今私が直面している問題は、ボタンを2回クリックすると結果が得られるということです。配列リストから変換された配列がSQliteデータベースメソッドに渡されない最初のボタンをクリック

ここアクティビティここ

InfoBase base; 
Button add; 
int count = 1; 
LinearLayout platform; 
TextView showT, arr, multiview; 
EditText addEdits; 
List<EditText> values = new ArrayList<>(); 
List<String> results; 
List<String> frmEdit; 
String[] transVal; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_get_symptoms); 
    showT = (TextView) findViewById(R.id.textView2); 
    base = new InfoBase(this, null, null, 1); 
    arr = (TextView) findViewById(R.id.editArr1); 
    multiview=(TextView) findViewById(R.id.multiText); 
    add = (Button) findViewById(R.id.butAdd); 
    platform = (LinearLayout) findViewById(R.id.base); 
    add.setOnClickListener(generate); 
    results=new ArrayList<>(); 
    frmEdit=new ArrayList<>(); 
} 

View.OnClickListener generate = new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     for (int i = 0; i < count; i++) { 
      addEdits = new EditText(getSymptomsActivity.this); 
      addEdits.setLayoutParams(new ActionBar.LayoutParams(400, 79)); 
      addEdits.setText(""); 
      platform.addView(addEdits); 
      values.add(addEdits); 
     } 
    } 
}; 

public void getIt(View v) { 
    transVal = frmEdit.toArray(new String[frmEdit.size()]); 

    for (EditText et : values) { 
     String getVal = et.getText().toString(); 
     frmEdit.add(getVal); 
    } 
    results = base.getDiagnosis(transVal); 
    StringBuilder builder = new StringBuilder(); 
    for (String details : results) { 
     builder.append(details + "\n"); 
    } 
    arr.setText(builder.toString()); 

    StringBuilder builder1 = new StringBuilder(); 
    for (String multi : frmEdit) { 
     builder1.append(multi + "\n"); 
    } 
    } 
} 

のコードが配列DBヘルパー内に渡さなければならない方法である。

public Cursor backwardSearch(String[] testVal){ 
    SQLiteDatabase db = getReadableDatabase(); 
    String query="SELECT S."+COLUMN_SYMP+", S."+COLUMN_SYM_ID+" AS _id FROM "+TABLE_LINKDS+ 
      " DS JOIN "+TABLE_SYMPTOMS+" S ON DS."+COLUMN_SYMPTOMS_ID+"= S."+COLUMN_SYM_ID+ 
      " JOIN "+TABLE_DISEASE+" D ON DS."+COLUMN_DISEASE_ID+"= D."+COLUMN_DS_ID+ 
      " WHERE D."+COLUMN_NAME+" IN ("+toArrayRep(testVal) +") ORDER BY S."+COLUMN_SYMP+" ASC"; 
    Cursor c= db.rawQuery(query,null); 
    return c; 
} 

public static String toArrayRep(String[] in) { 
    StringBuilder result = new StringBuilder(); 
    for (int i = 0; i < in.length; i++) { 
     if (i != 0) { 
      result.append(","); 
     } 
     result.append("'" + in[i] + "'"); 
    } 
    return result.toString(); 
} 

Iダイナミックから値を表示しようとしましたテキストビューでList<String>に変換されたedit-textをクリックしてボタンをクリックすると表示されますが、ボタンを2回クリックすると最終結果が得られます。私はList<String>が最初のクリックでString arrayに変換されないと思っています。

答えて

1

リストが入力される前に、frmEditリストを配列に変換しています。そのため、最初のクリックで結果が得られないのです。 forループの後に配列を移入した後、リストを配列に変換する必要があります。

public void getIt(View v) { 
    for (EditText et : values) { 
     String getVal = et.getText().toString(); 
     frmEdit.add(getVal); 
    } 

    transVal = frmEdit.toArray(new String[frmEdit.size()]); 
    results = base.getDiagnosis(transVal); 
    StringBuilder builder = new StringBuilder(); 
    for (String details : results) { 
     builder.append(details + "\n"); 
    } 
    arr.setText(builder.toString()); 

    StringBuilder builder1 = new StringBuilder(); 
    for (String multi : frmEdit) { 
     builder1.append(multi + "\n"); 
    } 
} 
+0

あなたは正しいGeorgeです。ありがとうございました – mcprilla79

+0

よろしくお願いいたします。 –

関連する問題