如何在Android中的JSONArray中从动态添加的edittext获取价值?

时间:2015-09-23 06:58:51

标签: android json dynamic

我创建了一个包含多个EditTextTextView的布局。点击按钮,我将在LinearLayout中动态添加此布局。该文件的文件名是" education_fields.xml"。

<TableRow
    android:id="@+id/tableRow4"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:paddingTop="5dp"
    >

    <TextView
        android:id="@+id/degreeNameAdd"
        android:layout_width="100dp"
        android:layout_height="25dp"
        android:text="@string/degree_name"
        android:layout_marginLeft="35dp"
        android:gravity="center|start"
        android:textAppearance="?android:attr/textAppearanceSmall"

        tools:ignore="RtlHardcoded" />

    <TextView
        android:id="@+id/ratio4Add"
        android:text="@string/ratio_sign"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:gravity="center"
        android:layout_width="20dp" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="25dp"
        android:id="@+id/degreeBoxAdd"
        android:layout_weight="1"
        android:ems="10"
        android:background="@drawable/edittext_default_bg"
        android:textSize="14sp"
        android:inputType="textPersonName"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:textCursorDrawable="@drawable/color_cursor"/>

</TableRow>
<TableRow
    android:id="@+id/tableRow1"
    android:layout_below="@id/tableRow4"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:paddingTop="5dp">

    <TextView
        android:id="@+id/highestBranchAdd"
        android:layout_width="100dp"
        android:layout_height="25dp"
        android:text="@string/branch"
        android:layout_marginLeft="35dp"
        android:gravity="center|start"
        android:textAppearance="?android:attr/textAppearanceSmall"

        tools:ignore="RtlHardcoded" />

    <TextView
        android:id="@+id/ratio1Add"
        android:text="@string/ratio_sign"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:gravity="center"
        android:layout_width="20dp" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="25dp"
        android:id="@+id/branchBoxAdd"
        android:layout_weight="1"
        android:ems="10"
        android:background="@drawable/edittext_default_bg"
        android:textSize="14sp"
        android:inputType="textPersonName"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:textCursorDrawable="@drawable/color_cursor"/>

</TableRow>


<Button
    android:layout_width="wrap_content"
    android:layout_height="25dp"
    android:id="@+id/removeButton"
    android:background="@drawable/dotted_button"
    android:textSize="12sp"
    android:inputType="text"
    android:layout_below="@+id/tableRow1"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:textColor="#50000000"
    android:drawableLeft="@drawable/remove"
    android:text="REMOVE"
    />

在我的java代码中,我在点击按钮后添加了这个布局。

我的java代码在这里:

addField.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
    LayoutInflater layoutInflater =
    (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View addView = layoutInflater.inflate(R.layout.edutcation_fields, null);
EditText degreeNameBox = (EditText) addView.findViewById(R.id.degreeBoxAdd);
EditText branchBox = (EditText) addView.findViewById(R.id.branchBoxAdd);
allEds.add(degreeNameBox);
allEds.add(branchBox);
Button removeField = (Button) addView.findViewById(R.id.removeButton);
removeField.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        ((LinearLayout) addView.getParent()).removeView(addView);
    }
});
container.addView(addView);
}

如果我点击按钮3次,它会在我的LinearLayout内容中添加3个布局,则表示每个布局2 EditText都在那里,动态EditText的总数是6.如果我填写所有EditText并尝试使用以下代码获取每个EditText的值:

String[] strings = new String[allEds.size()];
for(int i=0; i < allEds.size(); i++) {
    strings[i] = allEds.get(i).getText().toString();
}

然后我在这样的数组中获得价值:

["jhon","23","robert","25","smith","36"]

但我希望得到这样的价值:

[{"Name":jhon","Age":"23"},{"Name":"robert","Age":"25"},{"Name":"smith","Age":"36"}]

如果这不是正确的方法,那么请任何人为我提供此问题的代码。

1 个答案:

答案 0 :(得分:0)

使用您的代码,您将结果加载到一个字符串数组(String[])而不是Json数组。

假设偶数索引名称奇数索引的年龄 ,可以做那样的事情:

JSONArray jsonArray = new JSONArray();

for(int i=0; i < allEds.size()-1; i+=2) { // increment by 2, to move to the next pair
    JSONObject personObj = new JSONObject();

    try {
       String name = allEds.get(i).getText().toString();
       String age = allEds.get(i+1).getText().toString();
       personObj.put("Name", name);
       personObj.put("Age", age);

    } catch (JSONException e) {
       e.printStackTrace();
    }

    jsonArray.put(personObj);
}