gpt4 book ai didi

java - 如何从 sqlite 获取数据,并使用 stackwidget 显示它?

转载 作者:行者123 更新时间:2023-11-30 05:02:43 25 4
gpt4 key购买 nike

我想从 sqlite 中检索 url 图像,然后将其转换为位图并将其显示到 stackwidget 中。手动插入 url 图片时,一张一张,效果很好。但是当我使用来自 sqlite 的 url 图片时,应用程序被强制关闭并且我的 stackwidget 不显示图片。

public class StackRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory {

...

StackRemoteViewsFactory(Context context) {
mContext = context;
}

@Override
public void onCreate() {
FilmHelper filmHelper = FilmHelper.getInstance(mContext);
filmHelper.open();
}
@Override
public void onDataSetChanged() {

DatabaseHelper databaseHelper;
databaseHelper = new DatabaseHelper(mContext);
SQLiteDatabase databases = databaseHelper.getReadableDatabase();
long count = DatabaseUtils.queryNumEntries(databases, "note");

ArrayList<Film> ini = new ArrayList<>();

Cursor c =FilmHelper.database.rawQuery("SELECT * FROM note" , null );

c.moveToFirst();

Film note;
int i;
if (c.getCount() > 0) {
for (i=0; i < count; i++ ) {
do {
note = new Film();
note.setId(c.getInt(c.getColumnIndexOrThrow(_ID)));
note.setPosterPath(c.getString(c.getColumnIndexOrThrow(IMAGE)));
ini.add(note);
try {
URL url = new URL("https://image.tmdb.org/t/p/w600_and_h900_bestv2/" +
ini.get(i).getPosterPath());
Bitmap image = BitmapFactory.decodeStream(url.openStream());
mWidgetItems.add(image);
} catch (IOException e) {
System.out.println(e);
}
c.moveToNext();
} while (!c.isAfterLast());
}
}
c.close();
databases.close();
...

}

最佳答案

您正在执行网络消耗任务,例如在主线程中的 forloop 内将 url 转换为位图。
您可以使用 Asynctask,它将在 onPostExecute 中从 url 下载位图给您,然后您可以将位图添加到 mWidgetItems。

class ConvertUrltoBitmap extends AsyncTask<String, Void, Bitmap> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
public Bitmap doInBackground(String... urls) {
Bitmap map = null;
try {
URL url = new URL(urls[0]);
HttpURLConnection connection =(HttpURLConnection)url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
map= BitmapFactory.decodeStream(input);
} catch (Exception e) {
e.printStackTrace();
}
return map;
}

protected void onPostExecute(Bitmap bitmap){
try {
mWidgetItems.add(bitmap);
}catch (Exception exception){
exception.printStackTrace();
}
}}

关于java - 如何从 sqlite 获取数据,并使用 stackwidget 显示它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57951188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com