Android ArrayAdapter 和 JSONArray

2023-12-25

我是 Android 开发新手。

考虑到 JSON Carrier 相对于 XML 的轻便性,我纯粹喜欢在我的简单应用程序中使用 JSON 对象和数组。

我在使用 ArrayAdapter 填充 ListView 时遇到了挑战。

这就是我克服的方法,需要你的建议。

Extend the Adaptor class.

然后将 JSONArray 传递给构造函数。
这里构造函数用 调用 superdummy 设置 JSONArray 长度的字符串数组。
将构造函数参数存储在类中以供进一步使用。

public myAdaptor(Context context, int resource, JSONArray array)
{
    super(context, resource, new String[array.length()]);
    // Store in the local varialbles to the adapter class.
    this.context = context;
    this.resource = resource;
    this.profiles = objects;
}

The 获取视图()将完成以下工作fetching来自 JSONArray 的 JSONObjects 来构建视图。

public View getView(int position, View convertView, ViewGroup parent)
{
    View view;
    if (convertView == null)
    {
        LayoutInflater inflater = (LayoutInflater) 
            context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(resource, parent, false);
    }
    else
    {
        view = convertView;
    }

    // Here 
    JSONObject item = (JSONObject) profiles.getJSONObject(position);

    // READY WITH JSONObject from the JSONArray
    // YOUR CODE TO BUILD VIEW OR ACCESS THE 
}

现在有任何改进/建议/深思熟虑的问题吗?


我建议你使用 google GSON 而不是 JSON。它是一个库,可以让您从 JSON 请求创建对象,并且您不需要每次都解析 JSON。只需创建一个包含 JSON 请求中的所有字段且名称相同的对象,然后用它执行任何您想要的操作 - 例如:

Your JSON request
{
    [
        {
            "id": "2663",
            "title":"qwe"

        },
        {
            "id": "1234",
            "title":"asd"
        },
        {
            "id": "5678",
            "title":"zxc"
        }

    ]
}

您的班级 - JSON 数组的项目

 public class MyArrayAdapterItem{
     int id;
     String title;
 }

在代码中下载数据的某个位置。我不知道你是怎么做的,所以我会发布我的代码,例如:

mGparser = new JsonParser();
Gson mGson = new Gson();

Url url = "http://your_api.com"
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("Connection", "close");
conn.connect();
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));

JsonArray request = (JsonArray) mGparser.parse(in.readLine());
in.close();
ArrayList<MyArrayAdapterItem> items = mGson.fromJson(request, new TypeToken<ArrayList<MyArrayAdapterItem>>() {}.getType());

这就是全部,现在只需将“items”而不是 JSON 数组放入适配器的构造函数中

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android ArrayAdapter 和 JSONArray 的相关文章

随机推荐

  • 如何从 Heroku 错误获取 Rails Heroku 日志回溯

    我在 Heroku Bamboo 堆栈上使用 Rails 3 2 3 我昨晚从日志中收到此错误 但无法准确诊断其发生的位置和原因 如何从 Heroku 日志中获取错误的完整回溯 app web 2 Unexpected error whil
  • 如何在 C# 中将固定字节/char[100] 转换为托管 char[]?

    在 C 中将固定字节或 char 100 转换为托管 char 的最佳方法是什么 我最终不得不使用指针算术 我想知道是否有更简单的方法 比如 memcpy 或其他方法 using System using System Collection
  • 使用故事板将数据从注释传递到详细视图 iOS

    我正在尝试将当前通过 Google Places API 加载到注释中的数据传递到我通过带有 segue 的故事板创建的详细视图控制器 单击每个注释上的详细信息披露后 我可以正确加载详细视图控制器 但我现在正在尝试传递数据 void map
  • IdentityServer4中的签名凭证是什么?

    我们正在使用 NET Core Web 应用程序实现 Identity Server 4 我浏览了身份服务器文档 配置身份服务器 使用 DI 时有以下行 AddTemporarySigningCredential 我试图理解这个签名凭证是什
  • 循环内的堆栈分配

    在 C 语言中 当你编写这样的代码时 void some function void while something char buf 4096 是否分配buf调用函数时会发生什么 或者循环的每次迭代都会发生单独的分配 如果我声明以下内容
  • 如何在 Android 中暂停录音?

    我的目标是暂停录制文件 我在 Android 开发者网站上看到它 但 Media Recorder 没有暂停选项 Java 支持以编程方式合并两个音频文件 但在 android 中它不起作用 从 Java 加入两个 WAV 文件 https
  • MapQuest API 密钥不再有效

    我们已经使用 MapQuest API 密钥几年了 但在过去 24 小时左右的某个时刻 地图已停止工作 我们收到错误 此密钥未获得此服务的授权 我登录后发现我们的旧密钥已被删除 并自动为新的 Open Maps API 生成了一个新密钥 我
  • Spark sql中如何使用outer apply

    我是 Spark sql 的新手 我正在将现有的 sql 查询转换为 Spark sql 我现有的 sql 查询包含需要在 Spark sql 中工作的外部应用函数 Spark sql 中的外部应用的替代方案是什么 非常感谢任何帮助 提前致
  • 为什么 0.1 + 0.2 在 JavaScript 中返回不可预测的浮点结果,而 0.2 + 0.3 则不会?

    0 1 0 2 gt 0 30000000000000004 0 2 0 2 gt 0 4 0 3 0 2 gt 0 5 我知道这与浮点有关 但这里到底发生了什么 根据 Eric Postpischil 的评论 这不是重复的 那只涉及为什么
  • 无法通过本地 IIS 进行 Windows 身份验证

    因此 我使用 Intranet 模板创建了一个新的 ASP NET MVC 项目 web config 包含适当的值 例如
  • Service Fabric 资源平衡器使用陈旧的报告负载

    在研究 Service Fabric 上的资源平衡器和动态负载指标时 我们遇到了一些问题 运行 devbox SDK GA 2 0 135 在 Service Fabric Explorer 门户和独立应用程序 中 我们可以看到平衡运行非常
  • 从 Android JNI 程序调用的 Log API 是什么?

    我想通过将日志消息插入到 logcat 来调试 JNI C 应用程序 执行此操作的 C API 是什么 像这样 include
  • 无法在 Android 中配置 Fiddler 代理来解密 HTTPS

    我正在尝试设置 Fiddler 代理来捕获来自 Xamarin 应用程序的流量 我已完成以下步骤 在Windows机器上安装了Fiddler v5 0 20173 50948 Set 允许远程计算机连接和港口8888 Set 捕获 HTTP
  • javascript - Express.js 中的 app.set('port', 8080) 与 app.listen(8080)

    我一直在尝试使用 Express js 来启动一个网站 起初 我使用的是app set port 8080 但浏览器无法连接到该页面 后来我把代码改成了app listen 8080 并且网页正常显示 这让我想知道 这两个函数有什么区别 a
  • R Shiny - 使用 updateSelectizeInput 优化页面加载时间

    我们的闪亮页面有多个selectizeInput控件 其中一些在下拉框中有很长的列表 因此 初始加载时间很长 因为需要预先填充所有下拉框selectizeInput控制 编辑 请参阅下面的示例 显示加载长列表如何影响页面加载时间 请复制以下
  • 图中的颜色点根据值向量的不同而不同

    我正在使用 R 绘制下图plot 功能 这是一个向量图shiftTime的时间转变 我有另一个向量intensity强度值范围从 3到 9 我想根据具有颜色渐变的这些值对图中的点进行着色 在示例中 我可以在实际绘制点的值上找到颜色 因此在本
  • 如何让 Knockout.js 设置属性的命名空间 URI?

    在 svg 中 如果我使用淘汰赛来设置xlink href属性为a节点 属性的命名空间设置不正确 因此a单击时不能用作链接 例如 请考虑以下包含两个链接的椭圆的 svg 有其一xlink href属性是硬编码的 另一个是通过淘汰赛设置的da
  • 在discord.py中我该如何制作才能使机器人仅在一台服务器上工作

    在discord py 中 我该如何让机器人只在一个上运行 有没有办法做到这一点 x channel id if x 12454431344645423 this is the channel id print hi 最简单的方法是不将其添
  • 如何确定 cv::Mat 是否为零矩阵?

    我有一个根据以下代码动态更改的矩阵 for It all frames begin It all frames end It ItTemp It subtract ItTemp Base NewData cout lt lt The siz
  • Android ArrayAdapter 和 JSONArray

    我是 Android 开发新手 考虑到 JSON Carrier 相对于 XML 的轻便性 我纯粹喜欢在我的简单应用程序中使用 JSON 对象和数组 我在使用 ArrayAdapter 填充 ListView 时遇到了挑战 这就是我克服的方