繁体   English   中英

在Android的列表视图中未获得正确的输出

[英]Not Getting correct output in list view of android

我正在从JSONArray解析键name的值,并且必须在android活动的list view中进行填充。

我有JSON树作为

{
    "items": [
        {
            "name": "accounts",
            "links": [
                {
                    "rel": "canonical",
                    "href": "https://lavazzaindia--tst1.custhelp.com/services/rest/connect/latest/accounts"
                }
            ]
        },
        {
            "name": "analyticsReports",
            "links": [
                {
                    "rel": "canonical",
                    "href": "https://lavazzaindia--tst1.custhelp.com/services/rest/connect/latest/analyticsReports"
                }
            ]
        },
        {
            "name": "answers",
            "links": [
                {
                    "rel": "canonical",
                    "href": "https://lavazzaindia--tst1.custhelp.com/services/rest/connect/latest/answers"
                }
            ]
        },
        {
            "name": "assets",
            "links": [
                {
                    "rel": "canonical",
                    "href": "https://lavazzaindia--tst1.custhelp.com/services/rest/connect/latest/assets"
                }
            ]
        },
        {
            "name": "assetStatuses",
            "links": [
                {
                    "rel": "canonical",
                    "href": "https://lavazzaindia--tst1.custhelp.com/services/rest/connect/latest/assetStatuses"
                }
            ]
        },
        {
            "name": "channelTypes",
            "links": [
                {
                    "rel": "canonical",
                    "href": "https://lavazzaindia--tst1.custhelp.com/services/rest/connect/latest/channelTypes"
                }
            ]
        },
        {
            "name": "configurations",
            "links": [
                {
                    "rel": "canonical",
                    "href": "https://lavazzaindia--tst1.custhelp.com/services/rest/connect/latest/configurations"
                }
            ]
        }
     ]
 }

我正在使用for loop来提取name的值:

for (int i = 0; i < parentArr.length(); i++) {
   JSONObject finalObj = parentArr.getJSONObject(i);       //Getting each single object from JSON array Items
   String nameKey = finalObj.getString("name");            //Getting value of key(name) from each JSON Object
   System.out.println("name : "+nameKey);

   HashMap<String, String> data = new HashMap<>();         // tmp hash map for single data
   data.put("name",nameKey);                               //Adding each value of name to Hashmap key => value

   dataList.add(data);         //adding data to the datalist
}

这里dataList > ArrayList

我正在使用SysoutAndroid Monitor控制台中获得所有name

要查看这些names我正在使用以下代码:

ListAdapter adapter = new SimpleAdapter(MainActivity.this, dataList, 
         R.layout.list_item, new String[]{"name"}, new int[]{R.id.name});
lv.setAdapter(adapter);

在这里lv > ListView

这是我的activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.spectrum_developer.resturldemo.MainActivity">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <ListView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/list_view"
            tools:layout_editor_absoluteX="8dp"
            app:layout_constraintBottom_toBottomOf="parent"
            android:layout_marginBottom="8dp">
        </ListView>
    </ScrollView>

</RelativeLayout>

还有list_item.xml

<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <TextView
        android:id="@+id/name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingBottom="2dip"
        android:paddingTop="6dip"
        android:textColor="@color/colorPrimaryDark"
        android:textSize="16sp"
        android:textStyle="bold" />

    </LinearLayout>

但是在模拟器中,我只获得最高的价值。 我必须显示所有值,这些都是我在android studio console中得到的。

jsonValue的输出

有人可以纠正我在这里犯的错误吗?

我已经检查了您的代码,并使用您的代码段制作了一个示例项目。 它工作正常。 而且您的代码没有任何问题。

我使用了Recycleview而不是列表视图(它是高级的)。 请参考以下代码。这将对您有所帮助。

MainActivity.java

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ArrayList<String> arrayList = new ArrayList<>();

        //Change it to read from json
        arrayList.add("accounts");
        arrayList.add("analyticsReports");

        arrayList.add("answers");
        arrayList.add("assets");
        arrayList.add("assetStatuses");
        arrayList.add("channelTypes");
        arrayList.add("configurations");

        SampleAdapter adapter = new SampleAdapter(arrayList, MainActivity.this);
        RecyclerView rv;
        rv = (RecyclerView) findViewById(R.id.list_view);
        rv.setHasFixedSize(true);
        rv.setLayoutManager(new LinearLayoutManager(MainActivity.this));
        rv.setAdapter(adapter);

    }

}

SampleAdapter.java

class SampleAdapter extends RecyclerView.Adapter<SampleAdapter.ViewHolder> {
    private Activity mContext;
    private ArrayList<String> arrayList = new ArrayList<>();

    SampleAdapter(ArrayList<String> arrayList, Activity context) {
        mContext = context;
        this.arrayList = arrayList;
    }


    @Override
    public SampleAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(mContext).inflate(R.layout.list_item, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(SampleAdapter.ViewHolder holder, final int position) {

        holder.tvAward.setText(arrayList.get(position));

    }

    @Override
    public int getItemCount() {
        return arrayList.size();
    }

    class ViewHolder extends RecyclerView.ViewHolder {
        TextView tvAward;

        ViewHolder(View itemView) {
            super(itemView);
            tvAward = (TextView) itemView.findViewById(R.id.name);


        }

    }
}

在此处输入图片说明

我得到了塞尔文建议的答案。

我刚刚从activity_main.xml删除了ScrollView标记,并且得到了以下输出。

输出

非常感谢你。

尝试修改for循环以提取名称的值,

List<String> dataList = new ArrayList();     
for (int i = 0; i < parentArr.length(); i++) {
       JSONObject finalObj = parentArr.getJSONObject(i);       
       String nameKey = finalObj.getString("name");            
       System.out.println("name : "+nameKey);                            
       dataList.add(nameKey);         
    }

我认为没有必要在每个hashMap中添加每个nameKey。 仅带有所有nameKey的字符串列表就足以输入适配器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM