Array-list中的转换数组未在第一个按钮上传递给SQlite数据库方法单击

时间:2017-01-20 15:05:10

标签: android arrays sqlite

我正在创建一个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

1 个答案:

答案 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");
    }
}