我正在创建一个Android应用程序,用户通过动态创建的editText输入数据。这些editText存储在List<EditText>
中,并转换为List<String>
以获取值。 List<String>
中的这些值也会转换为String array
并传递给数据库中的方法,以便在按钮单击时获得结果。现在我面临的问题是,当我点击按钮两次时,我得到了我的结果。
以下是活动的代码
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");
}
}
}
以下是必须在数据库帮助程序中传递数组的方法:
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();
}
我尝试在动态编辑文本中显示已在textView中转换为List<String>
的值,并在单击按钮一次时显示,但在单击按钮两次时获得最终结果。我认为List<String>
在第一次点击时没有转换为String array
。
答案 0 :(得分: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");
}
}