Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android小部件位图错误_Java_Android_Bitmap_Widget_Android Widget - Fatal编程技术网

Java Android小部件位图错误

Java Android小部件位图错误,java,android,bitmap,widget,android-widget,Java,Android,Bitmap,Widget,Android Widget,当我用模拟器测试我的小部件时,一切正常,但当我尝试在真实设备(HTC Desire 816g)上测试它时,当我从url加载图像时,我得到以下错误。 这就是错误: 05-03 12:15:21.679 24313-24393/com.example.macos.ladderapp D/dalvikvm: Alloc : 11653456 05-03 12:15:21.680 24313-24393/com.example.macos.ladderapp I/dalvikvm: "AsyncTask

当我用模拟器测试我的小部件时,一切正常,但当我尝试在真实设备(HTC Desire 816g)上测试它时,当我从url加载图像时,我得到以下错误。 这就是错误:

05-03 12:15:21.679 24313-24393/com.example.macos.ladderapp D/dalvikvm: Alloc : 11653456
05-03 12:15:21.680 24313-24393/com.example.macos.ladderapp I/dalvikvm: "AsyncTask #2" prio=5 tid=31 RUNNABLE
      | group="main" sCount=0 dsCount=0 obj=0x424d34d0 self=0x637abb60
      | sysTid=24393 nice=10 sched=0/0 cgrp=apps/bg_non_interactive handle=1668947712
      | state=R schedstat=( 93174539 4489846 39 ) utm=9 stm=0 core=1
        at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
        at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
05-03 12:15:21.682 24313-24393/com.example.macos.ladderapp I/dalvikvm:     at android.graphics.BitmapFactory.decodeStreamInternal(BitmapFactory.java:635)
        at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:611)
        at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:649)
        at com.example.macos.ladderapp.RetrieveFeedTask.doInBackground(RetrieveFeedTask.java:57)
        at com.example.macos.ladderapp.RetrieveFeedTask.doInBackground(RetrieveFeedTask.java:25)
        at android.os.AsyncTask$2.call(AsyncTask.java:288)
        at java.util.concurrent.FutureTask.run(FutureTask.java:237)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
这是Java代码:

protected void onPostExecute(Bitmap bm) {
    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(mcontext);
    RemoteViews remoteViews = new RemoteViews(mcontext.getPackageName(), R.layout.simple_widget);
    remoteViews.setImageViewBitmap(R.id.REKLAM, bm);
    appWidgetManager.updateAppWidget(new ComponentName(mcontext, SimpleWidgetProvider.class), remoteViews);

}

@Override
protected Bitmap doInBackground(Context... contexts) {
     Bitmap bm = null;
    try {
        URL aURL = new URL(mLink);
        URLConnection conn = aURL.openConnection();
        conn.connect();
        InputStream is = conn.getInputStream();
        BufferedInputStream bis = new BufferedInputStream(is);
        bm = BitmapFactory.decodeStream(bis);
        bis.close();
        is.close();
} catch (IOException e) {
    Log.e(TAG, "Error getting bitmap", e);
}
return bm;
}
这是小部件布局文件,我认为它会导致

加载小部件时出现问题 错误。我试图加载一个Imageview(REKLAM),在它的左上角有一个可点击的箭头向量(clickview)


手动处理位图时存在很多陷阱。我真的建议不要把你自己的滚动用于一般用途

谷歌推荐的图像处理库是Glide。它附带了一个方便的类,专门用于在应用程序小部件中显示图像视图:AppWidgetTarget

AppWidgetTarget awt = new AppWidgetTarget(context, R.id.img_dog, remoteViews, appWidgetIds) {
    @Override
    public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {
        super.onResourceReady(resource, transition);
    }
};

RequestOptions options = new RequestOptions().
        override(300, 300).placeholder(R.drawable.placeholder_img).error(R.drawable.error_img)


Glide.with(context.getApplicationContext())
        .asBitmap()
        .load(imageUrl)
        .apply(options)
        .into(awt);

但是关于例外情况,这篇文章解释了使用位图时的一些问题:

使用Glide,可以使用上面显示的override()调整图像的大小

此外,还有两个关键点:

bis.close();
is.close();
需要放在最后一块。无论何时在try语句中调用close(),无论它是流、游标还是其他资源,它都应该是一个潜在的红旗。几乎总是最好把那些人放在最后


我用另一个问题更新了我的问题。你能帮我弄清楚吗?当然。我很乐意看一看。但最好还是把它作为另一个问题提出来?在stackoverflow上搜索答案是以1比1的方式进行的。实际上,它仍然是同一个问题和同一个问题。我仍然无法加载小部件错误。您的XML文件很好。我将它添加到我的小部件中。是否可以将整个项目放在github或google drive上?我很乐意在早上下载它,看看发生了什么。我希望有一个错误消息。Logcat上没有警告或错误。Just widget在主屏幕上显示问题加载错误,它只在真实设备上发生,在模拟器上是完美的
implementation 'com.github.bumptech.glide:glide:4.7.1'
kapt 'com.github.bumptech.glide:compiler:4.7.1'
bis.close();
is.close();