如何在 Android JAVA 的列表视图中显示部分但不是全部 JSON 数据

Posted

技术标签:

【中文标题】如何在 Android JAVA 的列表视图中显示部分但不是全部 JSON 数据【英文标题】:How do I display some but not all JSON data in a list view in Android JAVA 【发布时间】:2021-08-03 01:05:29 【问题描述】:

我正在尝试将我使用 URL 检索到的 JSON 文件中的一些但不是全部信息显示到 android JAVA 中的列表视图中。 JSON 有很多字段,但我只想要其中两个。我已经设法在 ios 中完成了相同的应用程序,并且不得不将这些字段设为可选,但我不确定如何在 Android 中执行此操作。

主活动

public class MainActivity extends AppCompatActivity 

private ListView lv;

String username, online;

private static String JSON_URL = "http://**.***.**.***:*****/userconfig";

ArrayList<HashMap<String, String>> usersList;

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

    usersList = new ArrayList<>();
    lv = findViewById(R.id.listView);

    GetData getData = new GetData();
    getData.execute();




public class GetData extends AsyncTask<String, String, String> 

    @Override
    protected String doInBackground(String... strings) 
        String current = "";

        try 
            URL url;
            HttpURLConnection urlConnection = null;

            try 
                url = new URL(JSON_URL);
                urlConnection = (HttpURLConnection) url.openConnection();

                InputStream in = urlConnection.getInputStream();
                InputStreamReader isr = new InputStreamReader(in);

                int data = isr.read();
                while (data != -1) 

                    current += (char) data;
                    data = isr.read();

                

                return current;

             catch (MalformedURLException e) 
                e.printStackTrace();
             catch (IOException e) 
                e.printStackTrace();
             finally 
                if (urlConnection != null) 
                    urlConnection.disconnect();
                
            

         catch (Exception e) 
            e.printStackTrace();
        

            return current;
        

    @Override
    protected void onPostExecute(String s) 
        try 
            JSONObject jsonObject = new JSONObject(s);
            JSONArray jsonArray = jsonObject.getJSONArray("users");

            for (int i = 0; i < jsonArray.length(); i++) 
                JSONObject jsonObject1 = jsonArray.getJSONObject(i);

                username = jsonObject1.getString("username");
                online = jsonObject1.getString("online");

                //Hashmap
                HashMap<String, String> friends = new HashMap<>();

                friends.put("username", username);
                friends.put("online", online);

                usersList.add(friends);


            
         catch (JSONException e) 
            e.printStackTrace();
        

        //Display the results

        ListAdapter adapter = new SimpleAdapter(
                MainActivity.this,
                usersList,
                R.layout.row_layout,
                new String[] "username", "online",
                new int[]R.id.textView, R.id.textView2);

        lv.setAdapter(adapter);
    

【问题讨论】:

【参考方案1】:

看起来没有办法使用 SimpleAdapter(我已经找到)来做到这一点。您可以使用 ListView 的自定义适配器来执行此操作。您可以通过创建一个从 ArrayAdapter 或 BaseAdapter 扩展的适配器类来做到这一点(看起来像一个示例实现以供参考:ListView ArrayAdapter, hiding children inside Row?)。然后在您的 getView 实现中,您可以检查您想要隐藏的条目并相应地设置它们的可见性。

【讨论】:

以上是关于如何在 Android JAVA 的列表视图中显示部分但不是全部 JSON 数据的主要内容,如果未能解决你的问题,请参考以下文章

Android:如何在列表视图中自动显示带有复选框的 Sqlite 数据库

知道如何防止 Android Widget 中显示的列表视图在每次刷新数据时闪烁吗?

用于显示 JSON 列表视图的 Android 代码

如何在 Android for Android api 11+ 的列表视图中显示联系人

Android:如何在没有滚动功能的列表中显示所有项目

Android如何从同一个数组中仅显示列表视图中的某些项目?