首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何从JSON对象的结果填充ListView?

如何从JSON对象的结果填充ListView?
EN

Stack Overflow用户
提问于 2015-08-27 18:55:57
回答 2查看 716关注 0票数 0

我正在使用google搜索实现来搜索用户单击按钮时输入的结果。

我听这个按钮,点击并获取/解析JSON结果。

我已经解析了JSON的"title“和"url”,并希望将其填充到ListView中。

但是,我认为我没有正确地使用ArrayAdapter类。

MyActivity.java:

ListView listViewGoogle;

代码语言:javascript
运行
AI代码解释
复制
private String[] resultArray;

private EditText searchBox;

private Button searchBtn;

private String search_url = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=";

private String search_query;

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

    listViewGoogle = (ListView)findViewById(R.id.listviewgoogle);

    searchBox = (EditText)findViewById(R.id.searchBox);
    searchBtn = (Button)findViewById(R.id.searchBtn);

    searchBtn.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            new JsonSearchTask().execute();

            try
            {
                search_query = search_url + searchBox.getText().toString();

                new JsonSearchTask().execute();

                ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.activity_listviewgoogle, resultArray);
                listViewGoogle.setAdapter(adapter);

            }
            catch (Exception e)
            {
                // TODO: handle exception
            }
        }
    });
}

private class JsonSearchTask extends AsyncTask<Void, Void, Void>
{
    @Override
    protected Void doInBackground(Void... arg0)
    {
        try
        {
            parseResult(sendQuery(search_query));
        }
        catch (JSONException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return null;
    }
}

private String sendQuery(String query) throws IOException
{
    String queryResult = "";

    URL searchURL = new URL(query);

    HttpURLConnection httpURLConnection = (HttpURLConnection) searchURL.openConnection();

    if (httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK)
    {
        InputStreamReader inputStreamReader = new InputStreamReader(httpURLConnection.getInputStream());
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader, 8192);

        String line = null;

        while ((line = bufferedReader.readLine()) != null)
        {
            queryResult += line;
        }

        bufferedReader.close();
    }

    return queryResult;
}

private void parseResult(String json) throws JSONException
{
    String parsedResult = "";

    JSONObject jsonObject = new JSONObject(json);

    JSONObject jsonObject_responseData = jsonObject.getJSONObject("responseData");

    JSONArray jsonArray_results = jsonObject_responseData.getJSONArray("results");

    resultArray = new String[jsonArray_results.length()];

    for(int i = 0; i < jsonArray_results.length(); i++)
    {
        JSONObject jsonObject_i = jsonArray_results.getJSONObject(i);
        parsedResult = "title: " + jsonObject_i.getString("title") + "\n";
        parsedResult += "url: " + jsonObject_i.getString("url") + "\n";
        //parsedResult += "\n";
        resultArray[i] = parsedResult;
    }
}

activity_listviewgoogle.xml:

代码语言:javascript
运行
AI代码解释
复制
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/label"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="10dip"
    android:textSize="16dip"
    android:textStyle="bold"
    android:gravity="center" >
</TextView>

activity_my.xml:

代码语言:javascript
运行
AI代码解释
复制
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal"
    android:id="@+id/parentOuter" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <EditText
            android:layout_width="fill_parent"
            android:layout_height="match_parent"
            android:hint="type to search..."
            android:layout_weight="2"
            android:id="@+id/searchBox" />

        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="Search Me!"
            android:layout_weight="2"
            android:id="@+id/searchBtn" />

        <ListView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/listviewgoogle"
            android:layout_weight="1" />

    </LinearLayout>

</LinearLayout>

我好像收到了这个错误:

错误:(71,44)错误:没有为ArrayAdapter(,int,String[])构造函数找到合适的构造函数ArrayAdapter.ArrayAdapter(上下文、int、int)不适用(参数不匹配;不能转换为上下文)构造函数ArrayAdapter.ArrayAdapter(上下文、int、String[])不适用(参数不匹配;不能转换为上下文)构造函数ArrayAdapter.ArrayAdapter(上下文、int、列表)不适用(参数不匹配;不能转换为上下文)

是否有一种使用ArrayAdapter填充数据的ListView的方法,或者有其他方法?

我很抱歉,我是机器人新手。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-27 19:23:42

你做错了。您已经调用了AsyncTsk并设置了适配器,如:

代码语言:javascript
运行
AI代码解释
复制
new JsonSearchTask().execute();
ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.activity_listviewgoogle, resultArray);
listViewGoogle.setAdapter(adapter);

JsonSearchTask在独立线程中运行,而listViewGoogle.setAdapter(adapter);在获得JsonSearchTask结果之前在主线程中调用。因此,您必须在onPostExecute()方法JsonSearchTask中调用此方法。

错误:

错误:(71,44)错误:没有为ArrayAdapter(,int,String[])构造函数找到合适的构造函数ArrayAdapter.ArrayAdapter(上下文、int、int)不适用(参数不匹配;不能转换为上下文)构造函数ArrayAdapter.ArrayAdapter(上下文、int、String[])不适用(参数不匹配;不能转换为上下文)构造函数ArrayAdapter.ArrayAdapter(上下文、int、列表)不适用(参数不匹配;不能转换为上下文)

你这样打电话:

代码语言:javascript
运行
AI代码解释
复制
ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.activity_listviewgoogle, resultArray);

在你的setOnClickListener里。因此,当时this引用的是OnClickListener的上下文引用,而不是您的活动引用。

所以试试

代码语言:javascript
运行
AI代码解释
复制
ArrayAdapter adapter = new ArrayAdapter<String>(MainActivity.this, R.layout.activity_listviewgoogle, resultArray);

而不是

代码语言:javascript
运行
AI代码解释
复制
ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.activity_listviewgoogle, resultArray);

希望能帮上忙!

票数 1
EN

Stack Overflow用户

发布于 2015-08-27 19:00:07

ArrayAdapter的第一个参数应该是使用ActivityName.this的上下文...try,其中ActivityName是您的活动名.

对于您的键盘,我认为问题在于xml。

代码语言:javascript
运行
AI代码解释
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/parentOuter"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">


    <EditText
        android:id="@+id/searchBox"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="type to search..." />

    <Button
        android:id="@+id/searchBtn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Search Me!" />

    <ListView
        android:id="@+id/listviewgoogle"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

</LinearLayout>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32262645

复制
相关文章
python 列表有没有顺序_python的list顺序详解
Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。
IT工作者
2022/08/04
1.3K0
LeetCode-1367-二叉树中的列表
如果在二叉树中,存在一条一直向下的路径,且每个点的数值恰好一一对应以 head 为首的链表中每个节点的值,那么请你返回 True ,否则返回 False 。
benym
2022/07/14
1940
[数据结构]二叉树的顺序存储结构
普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结 构存储。现实中我们通常把堆 ( 一种二叉树 ) 使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统 虚拟进程地址空间中的堆是两回事,一个是数据结构,一个是操作系统中管理内存的一块区域分段。
IT编程爱好者
2023/04/12
4180
[数据结构]二叉树的顺序存储结构
Solidity 优化 - 如何维护排序列表
本文我们探索和讨论在以太坊独特的 EVM 成本模型下编写高效的 Solidity 代码的数据结构和实现技术。读者应该已经对 Solidity 中的编码以及 EVM 的总体工作方式所有了解。
Tiny熊
2020/11/03
1.4K0
Solidity 优化 - 如何维护排序列表
数组实现顺序存储二叉树
顺序存储二叉树 顺序存储二叉树只考虑完全二叉树 第 n 个元素的左子节点为 2 * n +1 第 n 个元素的右子节点为 2 * n +2 第 n 个元素的父子节点为 (n-1)/2 n 表示二叉树中第几个元素 代码实现 package xmht.datastructuresandalgorithms.datastructure.tree; /** * @author shengjk1 * @date 2020/5/30 */ public class ArrBinaryTreeDemo { p
shengjk1
2020/05/31
8490
python中的列表
列表是由一系列特定顺序排列的元素组成。你可以创建包含字母表中所有字母,数字0~9或所有家庭成员姓名的列表;也可以将任何东西加入列表中,其中的元素之间可以没有任何关系。鉴于列表通常包含多个元素,给列表指定一个表示复数的名称(如letters、digits或names)是个不错的主意。
狼啸风云
2019/01/28
5.7K0
Python中的列表
列表 是一种用于保存一系列有序项目的集合,也就是说,你可以利用列表保存一串项目的序 列。想象起来也不难,你可以想象你有一张购物清单,上面列出了需要购买的商品,除开在 购物清单上你可能为每件物品都单独列一行,在 Python 中你需要在它们之间多加上一个逗 号。
benym
2022/07/14
5.1K0
Python中的列表
序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。 1.列表 数组:存储同一种数据类型的集合 scores = [12,23,45] 列表(打了激素的数组):可以存储任意数据类型
py3study
2020/01/10
5.3K0
css中padding中样式的顺序含义
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/116576.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/07
1.2K0
翻转句子中单词的顺序
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。 例如输入“I am a student.”,则输出“student. a am I”。 由于本题需要翻转句子,我们先颠倒句子中的所有字符。这时,不但翻转了句子中单词的顺序,而且单词内字符也被翻转了。我们再颠倒每个单词内的字符。由于单词内的字符被翻转两次,因此顺序仍然和输入时的顺序保持一致。 还是以上面的输入为例子。翻转“I am a student.”中所有字符得到“.tn
猿人谷
2018/01/17
1.7K0
Python中的顺序表介绍
在 Python 中,列表是一种基本的数据类型,列表的数据组成了一个序列,序列里的数据是有序的(索引),可以快速地找到指定的数据。
Python碎片公众号
2021/02/26
1.4K0
Python中的顺序表介绍
Windows 窗体中的事件顺序
对于依次处理其中每个事件的开发人员,Windows 窗体应用程序中引发事件的顺序非常具有吸引力。 当出现需要谨慎处理事件的情况时(例如,在重绘窗体的某些部件时),有必要了解运行时引发事件的确切顺序。 本主题提供了应用程序和控件的生存期中几个重要阶段中的事件顺序的详细信息。 有关鼠标输入事件的顺序的特定详细信息,请参阅Windows 窗体中的鼠标事件。Windows 窗体中的事件的概述,请参阅事件概述。 有关事件处理程序的构成的详细信息,请参阅事件处理程序概述。
CNXY
2019/05/24
1.3K0
[剑指offer] 按之字形顺序打印二叉树
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
尾尾部落
2018/09/04
3930
按之字形顺序打印二叉树
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
MickyInvQ
2021/12/07
4570
按之字形顺序打印二叉树
两个栈来实现; 定义一个放奇数层得栈,一个方偶数层得栈,和一个层奇偶标志, 遍历两个栈,每次消灭一个栈中得数据,添加在list中添加一层得数据 需要注意得是结合栈得先进后出性质,当我们遍历到奇数层时候,我们要从左到右得添加数据到栈二.同理偶数相反.
名字是乱打的
2022/12/13
2820
python中列表排序,字典排序,列表中的字典排序
key= lambda dict1:dict1[0] #dict1[0]表示按键,dict1[1]表示按值。
用户8346838
2021/03/10
9.3K0
一日一学:返回排序好的列表的索引顺序
今天介绍的是对列表排序后,返回排序好的索引顺序。 问题描述:给定一个列表 [2, 3, 1, 4, 5] ,怎么返回排序后的索引顺序,即 [2,0,1,3,4] ? 解决方法: 方案1: 利用 so
kbsc13
2020/02/26
1.1K0
Python中列表的操作
注意事项:列表中所有的增删改操作都是直接改原内存地址,并不需要通过重新赋值;元组属于特殊的列表(只读列表),除了增删改操作,其他列表支持的操作元组都支持。
py3study
2020/01/17
3.5K0
访问列表中的值
#!/usr/bin/python list1 = ['physics', 'chemistry', 1997, 2000] list2 = [1, 2, 3, 4, 5, 6, 7 ] print "list1[0]: ", list1[0] print "list2[1:5]: ", list2[1:5]
用户8442333
2021/05/27
5.8K0
Python中的列表(1)
  所以说访问列表的元素,可以在列表名后加方括号,方括号内输入索引,即可访问对应索引的元素。(ps:索引从0开始)
py3study
2020/01/16
3.4K0

相似问题

这类代码容易出现SQL注入吗?

035

逻辑应用程序SQL注入可能吗?

213

使用contains时可能的SQL注入吗?

13

这里有可能阻止叉子故障吗?

10

可能的sql注入

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文