Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在线性布局中添加jsonarray响应?_Java_Android - Fatal编程技术网

Java 如何在线性布局中添加jsonarray响应?

Java 如何在线性布局中添加jsonarray响应?,java,android,Java,Android,我得到了一个json响应,其中我得到了jsonObject和jsonArray。我成功地为jsonObject设置了值,但对于JsonArray,我为每个对象都设置了两个值作为que ans ans。例如: "question": [ { "ans": "test", "que": "What is your name" }, {

我得到了一个json响应,其中我得到了jsonObject和jsonArray。我成功地为jsonObject设置了值,但对于JsonArray,我为每个对象都设置了两个值作为que ans ans。例如:

 "question": [
            {
                "ans": "test",
                "que": "What is your name"
            },
            {
                "ans": "25-30",
                "que": "Age"
            }
        ]
这是jsonObject中的jsonarray。现在我想在文本框中设置que和ans。请注意,问题的数量不是固定的,它们可以是12个或更多或更少,具体取决于API

我的问题是如何设置布局充气机或类似的问题?
提前感谢:)

试试这种方法,希望这能帮助您解决问题。

活动\u main.xml

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:id="@+id/lnrQuestionContainer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

    </LinearLayout>
</ScrollView>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/txtQuestion"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <TextView
        android:id="@+id/txtAnswer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"/>

</LinearLayout>

question.xml

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:id="@+id/lnrQuestionContainer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

    </LinearLayout>
</ScrollView>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/txtQuestion"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <TextView
        android:id="@+id/txtAnswer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"/>

</LinearLayout>

MainActivity.java

public class MainActivity extends ActionBarActivity {

    private LinearLayout lnrQuestionContainer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lnrQuestionContainer =(LinearLayout) findViewById(R.id.lnrQuestionContainer);

        try{
            JSONObject jsonObject = new JSONObject("{\"question\":[{\"ans\":\"test\",\"que\":\"What is your name\"},{\"ans\":\"25-30\",\"que\":\"Age\"}]}");
            JSONArray questionJsonArray =  jsonObject.getJSONArray("question");

            for(int i=0;i<questionJsonArray.length();i++){
                View view = LayoutInflater.from(this).inflate(R.layout.question,null);
                TextView txtQuestion = (TextView) view.findViewById(R.id.txtQuestion);
                TextView txtAnswer = (TextView) view.findViewById(R.id.txtAnswer);

                txtQuestion.setText("Question "+(i+1)+" : "+questionJsonArray.getJSONObject(i).getString("que"));
                txtAnswer.setText("Answer "+(i+1)+" : "+questionJsonArray.getJSONObject(i).getString("ans"));
                lnrQuestionContainer.addView(view);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}
公共类MainActivity扩展了ActionBarActivity{
专用线路布局LNR集装箱;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lnrQuestionContainer=(LinearLayout)findViewById(R.id.lnrQuestionContainer);
试一试{
JSONObject JSONObject=新的JSONObject(“{”问题\“:[{“ans\”:“test\”,“que\”:“你叫什么名字\“},{“ans\”:“25-30\”,“que\”:“年龄\“}”);
JSONArray questionJsonArray=jsonObject.getJSONArray(“问题”);

对于(int i=0;i您需要像这样使用膨胀:保留一个item.xml,它将容纳2个文本视图(或根据您的需要编辑文本)

item.xml:

<RelativeLayout
    android:id="@+id/item_row"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/que"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true" />

    <TextView
        android:id="@+id/ans"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true" />
</RelativeLayout>    

现在在您的代码中:

您需要在一个循环中为JSONArray中的任意多个项膨胀该item.xml。因此,首先解析JSONArray并获得问题、答案对的数组列表:

ArrayList<String[]> myArr = new ArrayList<String[]>();
for (int i=0; i < myJSONArray.length(); i++) {
    JSONObject j = myJSONArray.getJSONObject(i);
    String[] t = {j.getString("que"),j.getString("ans")};
    myArr.add[t];
}
ArrayList myArr=new ArrayList();
for(int i=0;i
将此信息传递给您的活动

现在,您需要遍历ArrayList并展开布局,在map中使用值填充TextView,并在父布局中添加展开的视图:

RelativeLayout container = (RelativeLayout)findViewById(R.id.mylayout);  //this will be your container layout
for (int i = 0; i < secQAArr.size(); i++){

    View item = getLayoutInflater().inflate(R.layout.item, null);
    TextView tQue = (TextView) findViewById(R.id.que);
    que.seText(secQAArr.get(i)[0]);
    TextView tAns = (TextView) findViewById(R.id.ans);
    que.seText(secQAArr.get(i)[1]);
    container.addView(item);
}
RelativeLayout container=(RelativeLayout)findViewById(R.id.mylayout);//这将是您的容器布局
对于(int i=0;i

希望有帮助。

那么,你想在列表中显示该信息吗?我正在努力动态添加线性布局,在ListView中有它的行。你能帮我吗??