Java 如何从sqlite获取数据,并使用stackwidget显示数据?
我想从sqlite中检索url图像,然后将其转换为位图并显示到stackwidget中。手动逐个插入url图像时,效果良好。但当我使用sqlite的url图像时,应用程序是强制关闭的,我的stackwidget不显示图像Java 如何从sqlite获取数据,并使用stackwidget显示数据?,java,android,android-sqlite,Java,Android,Android Sqlite,我想从sqlite中检索url图像,然后将其转换为位图并显示到stackwidget中。手动逐个插入url图像时,效果良好。但当我使用sqlite的url图像时,应用程序是强制关闭的,我的stackwidget不显示图像 public class StackRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory { ... StackRemoteViewsFactory(Context context)
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();
...
}
公共类StackRemoteViewsFactory实现RemoteViewsService.RemoteViewsFactory{
...
StackRemoteViewsFactory(上下文){
mContext=上下文;
}
@凌驾
public void onCreate(){
FilmHelper FilmHelper=FilmHelper.getInstance(mContext);
filmHelper.open();
}
@凌驾
公共无效onDataSetChanged(){
数据库助手数据库助手;
databaseHelper=新的databaseHelper(mContext);
SQLiteDatabase databases=databaseHelper.getReadableDatabase();
long count=DatabaseUtils.queryNumEntries(数据库,“注释”);
ArrayList ini=新的ArrayList();
游标c=FilmHelper.database.rawQuery(“SELECT*FROM note”,null);
c、 moveToFirst();
电影笔记;
int i;
如果(c.getCount()>0){
对于(i=0;i
您正在执行网络消耗任务,例如在主线程的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();
}
}}
类ConvertUrltoBitmap扩展了异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
公共位图doInBackground(字符串…URL){
位图映射=空;
试一试{
URL=新URL(URL[0]);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream输入=连接。getInputStream();
map=BitmapFactory.decodeStream(输入);
}捕获(例外e){
e、 printStackTrace();
}
返回图;
}
受保护的void onPostExecute(位图){
试一试{
添加(位图);
}捕获(异常){
异常。printStackTrace();
}
}}
您正在执行网络消耗任务,例如在主线程的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();
}
}}
类ConvertUrltoBitmap扩展了异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
公共位图doInBackground(字符串…URL){
位图映射=空;
试一试{
URL=新URL(URL[0]);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream输入=连接。getInputStream();
map=BitmapFactory.decodeStream(输入);
}捕获(例外e){
e、 printStackTrace();
}
返回图;
}
受保护的void onPostExecute(位图){
试一试{
添加(位图);
}捕获(异常){
异常。printStackTrace();
}
}}