为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我使用 AsyncTask 时 ListView 没有填充?

为什么我使用 AsyncTask 时 ListView 没有填充?

子衿沉夜 2023-09-06 16:56:16
我正在编写一个使用 Google 图书搜索 API 的应用程序,该应用程序要做的就是根据我在应用程序代码中以字符串形式提供的搜索查询显示图书列表,我使用 AsyncTask 内部类来处理后台工作(发出 HTTP 请求、JSON 格式化...等),我还有书籍服装适配器和书籍类来从中获取数据,我的问题是应用程序不会在列表视图中显示任何书籍。这是我的代码:我的活动:public class MainActivity extends AppCompatActivity {    final static String bookUrl = "https://www.googleapis.com/books/v1/volumes?q=android&maxResults=6";    private BookAdapter bookAdapter;    private ArrayList<Book> books;    private ListView list;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);         list = (ListView) findViewById(R.id.list);         new BookAsynck().execute(bookUrl);    }    private class BookAsynck extends AsyncTask<String, Void, ArrayList<Book>> {        @Override        protected ArrayList<Book> doInBackground(String... strings) {            books = Utils.fetchBookData(bookUrl);            return books;        }        @Override        protected void onPostExecute(ArrayList<Book> books) {            bookAdapter = new BookAdapter(MainActivity.this, books);            list.setAdapter(bookAdapter);        }    }}
查看完整描述

3 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

将以下行更改为onCreate()

ListView list = (ListView) findViewById(R.id.list);

list = (ListView) findViewById(R.id.list);


查看完整回答
反对 回复 2023-09-06
?
森栏

TA贡献1810条经验 获得超5个赞

从 Android 9 开始,未加密的请求将不起作用,这意味着HttpsURLConnection可以起作用,但HttpURLConnection则不起作用。

然后,您尝试连接的 URL 必须具有 https:// 访问权限,否则您应该将其包含在清单中

android:usesCleartextTraffic="true"


查看完整回答
反对 回复 2023-09-06
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

看来您错过了在活动内调用异步任务


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);


 list = (ListView) findViewById(R.id.list);

new BookAsynck().execute(bookUrl);

}


查看完整回答
反对 回复 2023-09-06
  • 3 回答
  • 0 关注
  • 87 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信