使用 AsyncTask 填充 ListView

2024-03-14

这可能不是很优雅,但我想做的是连接到 Web 服务,获取 JSON,解析它,从中创建一个对象,将该对象添加到 ArrayList,然后使用该 ArrayList 来填充我的列表显示。

我正在尝试使用 AsyncTask 来完成所有这一切。

摘要: doInBackgroud 接受一个 url 字符串,使用它连接到 Web 服务。我以字符串形式获取 JSON 数据,解析它,从数据中构造一个新对象,并将其添加到 ArrayList。然后在onPostExecute我正在尝试使用设置列表适配器ArrayAdapter它利用了我的ArrayList。

这是我所拥有的:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringWriter;
import java.io.Writer;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;

import org.json.JSONArray;
import org.json.JSONObject;

import oauth.signpost.OAuthConsumer;
import oauth.signpost.basic.DefaultOAuthConsumer;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.ArrayAdapter;

public class AllOffersListActivity extends ListActivity {

    private static final String CONSUMER_KEY = "bla";
    private static final String CONSUMER_SECRET = "bla";


    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);



        new CreateArrayListTask().execute("http://example.com/sample.json");




    }

    private class CreateArrayListTask extends AsyncTask<String, Void, ArrayList<Offer>> {
        private final ProgressDialog dialog = new ProgressDialog(AllOffersListActivity.this);

        @Override
        protected void onPreExecute() {
            this.dialog.setMessage("Fetching offers...");
            this.dialog.show();

        }
        @Override
        protected ArrayList<Offer> doInBackGround(String...urls) {
            ArrayList<Offer> offerList = new ArrayList<Offer>();

            for(String url: urls) {
                OAuthConsumer consumer = new DefaultOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
                consumer.setTokenWithSecret("", "");

                try {

                    URL url1 = new URL(url);
                    HttpURLConnection request = (HttpURLConnection) url1.openConnection();

                    // sign the request
                    consumer.sign(request);

                    // send the request
                    request.connect();


                    String JSONString = convertStreamToString(request.getInputStream());

                    JSONObject jObject = new JSONObject(JSONString);

                    JSONObject offerObject = jObject.getJSONObject("offer");

                    String titleValue = offerObject.getString("title");
                    //System.out.println(titleValue);

                    String descriptionValue = offerObject.getString("description");
                    //System.out.println(attributeValue);
                    JSONObject businessObject = offerObject.getJSONObject("business");
                    String nameValue = businessObject.getString("name");

                    Offer myOffer = new Offer(titleValue, descriptionValue, nameValue);

                    offerList.add(myOffer);

                } catch (Exception e) {
                    e.printStackTrace();

                } 
            }
            return offerList; 

        }

        @Override
        protected void onPostExecute(ArrayList<Offer> offerList) {
            if(this.dialog.isShowing())
                this.dialog.dismiss();
            setListAdapter(new ArrayAdapter<Offer>(AllOffersListActivity.this, android.R.layout.simple_list_item_1, offerList));        
        }
    }

    private String convertStreamToString(InputStream inputStream) throws IOException {
        if(inputStream != null) {
            Writer writer = new StringWriter();

            char[] buffer = new char[1024];

            try {

                Reader reader = new BufferedReader( new InputStreamReader(inputStream, "UTF-8"));

                int n;
                while((n = reader.read(buffer)) != -1) {
                    writer.write(buffer, 0, n);

                }
            } finally {
                inputStream.close();
            }
            return writer.toString();
        } else {
            return "";
        }

    }

}

我看到两个错误。一个是我的私有 Async 类:"The type AllOffersListActivity.CreateArrayListTask must implement the inherited abstract method AsyncTask<String,Void,ArrayList<Offer>>.doInBackground(String...)"

其次,就我的doInBackGround覆盖,我得到:The method doInBackGround(String...) of type AllOffersListActivity.CreateArrayListTask must override or implement a supertype method

我在这里缺少什么?


这只是一个小错字;应该doInBackground代替doInBackGround.

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

使用 AsyncTask 填充 ListView 的相关文章

  • 生产中偶尔会发生 android.webkit.WebView 类膨胀错误

    我的应用程序在 Google Play 上 它在大多数设备 数千个用户 上运行良好 但在极少数情况下 占每日活跃用户百分比的一小部分 我得到Error inflating class android webkit WebView当我为我的片
  • “此版本中使用了已弃用的 Gradle 功能,使其与 Gradle 7.0 不兼容。” -反应-原生

    当我尝试运行反应本机应用程序时 我遇到此错误react native run android 我无法安装该应用程序 我正在尝试构建一个相机应用程序 我当前的react native版本 0 62 0 React cli版本 2 0 1 De
  • 居中复选框视图

    如果除了 或代替 复选框之外 您还对单选按钮感兴趣 请参阅this https stackoverflow com questions 16701806 centering views 2而是提问 尽管存在
  • 删除 json 对象字符串中的“\”

    如何删除下面字符串中的特殊字符 String x message content toom recipients id 1000001865 room subject room 我使用了 x replaceAll 但它不起作用 您必须转义正
  • 在Android内存中存储gif图像

    我对安卓还很陌生 我想将图像保存到内存中 然后从内存中检索图像并将其加载到图像视图中 我已使用以下代码成功将图像存储在内存中 void saveImage String fileName img cnt jpg File file new
  • Android浏览器上的Web应用程序宽度问题

    所以到目前为止我只在 Android 浏览器上遇到过这个问题 基本上我的网站几乎一直运行良好 而且我还没有在 Dolphin Opera 或 Skyfire 上看到这个问题 但偶尔当我从手机主屏幕之一上的书签重新打开 Android 浏览器
  • Mesibo 通话 UI 未更新

    我正在尝试更改 Mesibo Call UI 的配置 但它并没有改变 我尝试如下 MesiboCallConfig mesiboCallConfig new MesiboCallConfig mesiboCallConfig backgro
  • 通过我的应用程序以编程方式插入新联系人,而不使用 Intent

    我正在使用一个应用程序 与手机联系人进行交互 我想将新联系人添加到我的手机联系人列表中 我已经尝试过以下代码 但它不起作用 void addContact Context ctx PreviewContactModel model Arra
  • 如何更改对话框的默认黑色暗淡背景“颜色”(而不是暗淡量)?

    这是随机显示的图像Dialog在网上找到的 我一直在实施一个自定义Dialog 我可以处理对话框上的几乎所有内容 除了对话框本身下方的默认黑色昏暗背景之外 但在其后面的整个屏幕上 基本上我想改变它color和阿尔法值 我一直在 StackO
  • 如何在我的 Android 应用程序中实现应用内购买?

    如何在我的 Android 应用程序中实现应用内购买 我提到 http developer android com guide market billing billing integrate html billing service ht
  • Android 26 (O) 通知不显示操作图标 [重复]

    这个问题在这里已经有答案了 随着 Android 26 O 引入通知渠道 我一直在调查 Google 提供的com example android notificationchannels 这个示例按预期工作 直到我尝试添加Action到示
  • 如何在 Android 应用程序中使用多个 Graph API 获取 Facebook Notes 项目的评论?

    我想使用 Graph API 显示 Facebook 页面的注释项目以及这些评论和点赞 为此 我使用 Facebook SDK 中的 asyncFacebookRunner 步骤是这样的 调用 asyncFacebookRunner req
  • cordova插件条码扫描仪打不开扫描

    我的条形码扫描仪插件有问题 我不是天才 我不太了解如何编写网络应用程序 我使用phonegap和cordova 并且尝试制作一个网络应用程序 在单击链接后扫描条形码 我之前已经使用此命令行安装了该插件 cordova plugin add
  • 以编程方式应用样式资源

    我没有找到一种以编程方式做到这一点的方法 所以我在这里发布这个问题 我也没有找到与此相关的任何问题 我有一个资源样式 在 res values styles xml 中定义 我想做的是使用 java 将这种样式应用到我正在操作的 View
  • Android 发布到 facebook 墙,stream.publish 几天来就中断了

    我有很多使用 FB android sdk 发布的应用程序 github com facebook facebook android sdk 我所有使用 FB 的应用程序几天后就停止工作了 这必然是 FB 方面的更改或错误 因为我的应用程序
  • 在尝试使用 GPS 之前如何检查 GPS 是否已启用

    我有以下代码 但效果不好 因为有时 GPS 需要很长时间 我该如何执行以下操作 检查GPS是否启用 如果启用了 GPS 请使用 GPS 否则请使用网络提供商 如果 GPS 时间超过 30 秒 请使用网络 我可以使用时间或 Thread sl
  • 使用 Glide 库设置图像加载完成后进度条的可见性

    您好 我想要一个图像进度条 该进度条将在图像加载时显示 但当图像加载完成时 我想将其设置为消失 早些时候我为此使用了毕加索库 但我不知道如何将它与 Glide 库一起使用 我知道有一些资源就绪功能 但我不知道如何使用它 谁能帮我 毕加索图书
  • 在 Android ADT Eclipse 插件中滚动布局编辑器

    有谁知道当布局编辑器的内容溢出一个 屏幕 时如何滚动这些内容 我说的是在设计时使用 ADT 布局编辑器 而不是在物理设备上运行时滚动 效果很好 关闭 Android 布局编辑器中的剪辑 切换剪辑 按钮位于 Android 布局编辑器的右上角
  • Android:如何在布局中放置纯色矩形?

    我有一个可以很好地膨胀的relativelayout 我想在顶部添加一个跨越布局宽度的纯色矩形 我尝试将以下内容放入我的 xml 中
  • Android BLE 扫描永远找不到设备

    几天以来 我尝试在我的应用程序中实现 BLE 连接 我知道我尝试连接的设备功能齐全 因此问题一定是我的代码 我用BluetoothLeScanner startScan 方法 但回调方法永远不会被调用 public void startSc

随机推荐