- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 Marsmallow 操作系统中遇到了小问题。我可以使用安卓6.0。但我看不到ImageView。例如:首先,我尝试 5.0 操作系统,一切正常。然后我可以使用6.0但我看不到Imageview?这是怎么回事?我使用 Imageloader.java (因为创建拇指图像。)
6.0 的屏幕截图
5.0 的屏幕截图
Imageloader.java
package com.ufuk.campus;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.widget.ImageView;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Collections;
import java.util.Map;
import java.util.WeakHashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ImageLoader {
MemoryCache memoryCache=new MemoryCache();
FileCache fileCache;
private Map<ImageView, String> imageViews=Collections.synchronizedMap(new WeakHashMap<ImageView, String>());
ExecutorService executorService;
public ImageLoader(Context context){
fileCache=new FileCache(context);
executorService=Executors.newFixedThreadPool(5);
}
final int stub_id= R.drawable.image_view;
public void DisplayImage(String url, ImageView imageView)
{
imageViews.put(imageView, url);
Bitmap bitmap=memoryCache.get(url);
if(bitmap!=null)
imageView.setImageBitmap(bitmap);
else
{
queuePhoto(url, imageView);
imageView.setImageResource(stub_id);
}
}
private void queuePhoto(String url, ImageView imageView)
{
PhotoToLoad p=new PhotoToLoad(url, imageView);
executorService.submit(new PhotosLoader(p));
}
private Bitmap getBitmap(String url)
{
File f=fileCache.getFile(url);
//from SD cache
Bitmap b = decodeFile(f);
if(b!=null)
return b;
//from web
try {
Bitmap bitmap=null;
URL imageUrl = new URL(url);
HttpURLConnection conn = (HttpURLConnection)imageUrl.openConnection();
conn.setConnectTimeout(30000);
conn.setReadTimeout(30000);
conn.setInstanceFollowRedirects(true);
InputStream is=conn.getInputStream();
OutputStream os = new FileOutputStream(f);
Utils.CopyStream(is, os);
os.close();
bitmap = decodeFile(f);
return bitmap;
} catch (Exception ex){
ex.printStackTrace();
return null;
}
}
//decodes image and scales it to reduce memory consumption
private Bitmap decodeFile(File f){
try {
//decode image size
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(new FileInputStream(f),null,o);
//Find the correct scale value. It should be the power of 2.
final int REQUIRED_SIZE=500;
int width_tmp=o.outWidth, height_tmp=o.outHeight;
int scale=1;
while(true){
if(width_tmp/2<REQUIRED_SIZE || height_tmp/2<REQUIRED_SIZE)
break;
width_tmp/=2;
height_tmp/=2;
scale*=2;
}
//decode with inSampleSize
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize=scale;
return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
} catch (FileNotFoundException e) {}
return null;
}
//Task for the queue
private class PhotoToLoad
{
public String url;
public ImageView imageView;
public PhotoToLoad(String u, ImageView i){
url=u;
imageView=i;
}
}
class PhotosLoader implements Runnable {
PhotoToLoad photoToLoad;
PhotosLoader(PhotoToLoad photoToLoad){
this.photoToLoad=photoToLoad;
}
public void run() {
if(imageViewReused(photoToLoad))
return;
Bitmap bmp=getBitmap(photoToLoad.url);
memoryCache.put(photoToLoad.url, bmp);
if(imageViewReused(photoToLoad))
return;
BitmapDisplayer bd=new BitmapDisplayer(bmp, photoToLoad);
Activity a=(Activity)photoToLoad.imageView.getContext();
a.runOnUiThread(bd);
}
}
boolean imageViewReused(PhotoToLoad photoToLoad){
String tag=imageViews.get(photoToLoad.imageView);
if(tag==null || !tag.equals(photoToLoad.url))
return true;
return false;
}
//Used to display bitmap in the UI thread
class BitmapDisplayer implements Runnable
{
Bitmap bitmap;
PhotoToLoad photoToLoad;
public BitmapDisplayer(Bitmap b, PhotoToLoad p){bitmap=b;photoToLoad=p;}
public void run()
{
if(imageViewReused(photoToLoad))
return;
if(bitmap!=null)
{
photoToLoad.imageView.setImageBitmap(bitmap);
}//else
// photoToLoad.imageView.setImageResource(stub_id);
}
}
public void clearCache() {
memoryCache.clear();
fileCache.clear();
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ufuk.campus" >
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.VIBRATE" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_logo_app"
android:label="@string/app_name"
android:theme="@style/MyMaterialTheme" >
<activity
android:name="com.ufuk.campus.Splash"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.ufuk.campus.MainActivityTab"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name="com.ufuk.campus.News_List_By_Category"
android:configChanges="orientation|keyboardHidden|screenSize" >
</activity>
<activity
android:name="com.ufuk.campus.News_Detail"
android:configChanges="orientation|keyboardHidden|screenSize" >
</activity>
<activity
android:name="com.ufuk.campus.News_Favorite"
android:configChanges="orientation|keyboardHidden|screenSize" >
</activity>
<activity
android:name="com.ufuk.campus.About_Us"
android:configChanges="orientation|keyboardHidden|screenSize" >
</activity>
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<service android:name="com.parse.PushService" />
<receiver android:name="com.parse.ParseBroadcastReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.USER_PRESENT" />
</intent-filter>
</receiver>
</application>
</manifest>
list
Logcat
-03 06:58:33.123 1863-10307/com.ufuk.campus W/System.err: java.io.FileNotFoundException: /storage/emulated/0/LazyList/1041555135: open failed: ENOENT (No such file or directory)
01-03 06:58:33.123 1863-10307/com.ufuk.campus W/System.err: at libcore.io.IoBridge.open(IoBridge.java:452)
01-03 06:58:33.123 1863-10307/com.ufuk.campus W/System.err: at java.io.FileOutputStream.<init>(FileOutputStream.java:87)
01-03 06:58:33.124 1863-10307/com.ufuk.campus W/System.err: at java.io.FileOutputStream.<init>(FileOutputStream.java:72)
01-03 06:58:33.124 1863-10307/com.ufuk.campus W/System.err: at com.ufuk.campus.ImageLoader.getBitmap(ImageLoader.java:74)
01-03 06:58:33.124 1863-10307/com.ufuk.campus W/System.err: at com.ufuk.campus.ImageLoader.access$000(ImageLoader.java:24)
01-03 06:58:33.124 1863-10307/com.ufuk.campus W/System.err: at com.ufuk.campus.ImageLoader$PhotosLoader.run(ImageLoader.java:133)
01-03 06:58:33.124 1863-10307/com.ufuk.campus W/System.err: at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
01-03 06:58:33.124 1863-10307/com.ufuk.campus W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
01-03 06:58:33.124 1863-10307/com.ufuk.campus W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
01-03 06:58:33.124 1863-10307/com.ufuk.campus W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
01-03 06:58:33.124 1863-10307/com.ufuk.campus W/System.err: at java.lang.Thread.run(Thread.java:818)
01-03 06:58:33.124 1863-10307/com.ufuk.campus W/System.err: Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory)
01-03 06:58:33.124 1863-10307/com.ufuk.campus W/System.err: at libcore.io.Posix.open(Native Method)
01-03 06:58:33.124 1863-10307/com.ufuk.campus W/System.err: at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
01-03 06:58:33.124 1863-10307/com.ufuk.campus W/System.err: at libcore.io.IoBridge.open(IoBridge.java:438)
01-03 06:58:33.124 1863-10307/com.ufuk.campus W/System.err: ... 10 more
01-03 06:58:33.124 1863-10308/com.ufuk.campus W/System.err: Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory)
01-03 06:58:33.124 1863-10308/com.ufuk.campus W/System.err: at libcore.io.Posix.open(Native Method)
01-03 06:58:33.124 1863-10308/com.ufuk.campus W/System.err: at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
01-03 06:58:33.124 1863-10308/com.ufuk.campus W/System.err: at libcore.io.IoBridge.open(IoBridge.java:438)
01-03 06:58:33.124 1863-10308/com.ufuk.campus W/System.err: ... 10 more
01-03 06:58:33.124 1863-10309/com.ufuk.campus W/System.err: java.io.FileNotFoundException: /storage/emulated/0/LazyList/1041555135: open failed: ENOENT (No such file or directory)
最佳答案
如果缺少此权限,请在 list 中添加此权限,然后尝试:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
关于java - 无法看到图像(Imageloader.java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34576313/
在我的应用程序中,我有一个包含一些项目的 ListView 。每个项目都有一个从远程 url 下载的 img。 我使用 ImageLoader 库将每个图像加载到我的应用中。 我的 ListView
This question already has answers here: What is a NullPointerException, and how do I fix it? (12个答案)
我正在使用 ImageLoader 从互联网加载图像。但我收到错误消息“E ImageLoader:连接超时”,跟踪是: 05-29 16:39:02.994 9988 10417 E ImageLo
在尝试加载以下 Activity 时,我遇到了 NullPoint 异常,我尝试解决这些问题,但我的尝试没有成功。 简而言之,有两个 Activity - 一个 Activity 填充数组列表,单击数
我正在使用 ImageLoader 在我的 ImageView 中显示图像。但它显示缓存的图像并显示旧图像。如何清除缓存?任何帮助将不胜感激... import java.io.File; impor
在我的 getView 中(对于我的适配器)我做 ImageView malImage = (ImageView)vi.findViewById(R.id.animelist_malimg);
我从 facebook api 发布了图片,我试图在我的应用程序中显示它们。但是在使用 imageloader 类时,尽管我将 wrap_content 保留在我的 ImageView 中,但图像的尺
我对 Universal Image Loader 库中的 DisplayImage 函数有疑问。如果我有一个像“www.myexample.com/image.jpg”这样的 url,然后说: Di
当我 try catch 图像或将图像从图库上传到 firebase 时出现此错误。我知道之前有人问过这个问题,但是我尝试了所有可能的解决方案。 这是 list 文件: logcat
我有一个带有适配器的 listView,它通过 ImageLoader 类从 URL 加载图像。问题是,直到列表项滚出屏幕后,屏幕上的图像才会显示/加载。 基本上,显示了 listView,但在您向下
我正在使用 ImageLoader 类从 url 加载图像并将其显示在列表显示。但是这个 ImageLoader 正在模拟器上加载图像,当我在没有加载任何图像的真实设备上运行我的应用程序。(只是显示默
以下是使用 volley 将图像从数据库检索到 View 页面的代码的一部分。我怎样才能将七张图片加载到 ImageView (加载所有图像位置)。如果我在“加载所有图像”位置独立输入任何图片,例如图
我正在使用 Novoda ImageLoader (https://github.com/novoda/ImageLoader),当我在 CursorAdapter 中使用这个加载器时,一切都很好。但
我在使用库时遇到了这个问题 我的应用类 ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplic
我正在尝试使用 ImageLoader 显示带有外部图像链接的通知,但没有任何运气。 Logcat 不显示任何错误,也根本不显示通知。 这是我的代码: void shownot() { mNo
我正在使用 UniversalImageLoader 加载图像。但我面临的问题是同一图像被多次加载。下面是日志输出。 日志: 11-11 11:10:21.342 26932-26932/com.ex
我正在尝试使用 ImageAdapter 和 ImageLoader 将图片库显示为 GridView。不过,所有肖像图像都旋转了 +-90 度。我知道 getExifOrientation 代码来检
你好帮助者:)我已经实现了在一个 wordpress 页面上显示砖石流体网格中的图像,但是我在调用 HTML5 中的视频时遇到了问题(仅带有标签:)。问题是图像与 width: 50%; 完美配合
我在 Marsmallow 操作系统中遇到了小问题。我可以使用安卓6.0。但我看不到ImageView。例如:首先,我尝试 5.0 操作系统,一切正常。然后我可以使用6.0但我看不到Imageview
如果图像已经缓存,我不想下载它们。我正在使用 NOSTRA 的 ImageLoader 库。请告诉我是否有办法做到这一点。以下是代码:- DisplayImageOptions options
我是一名优秀的程序员,十分优秀!