Android通用图像加载程序不工作

Android通用图像加载程序不工作,android,Android,我想从url加载照片并保存在Android应用程序的外部存储中,但在运行应用程序时遇到了NetworkOnMainThreadException问题。我正在尝试使用通用图像加载程序加载图像并存储到外部存储目录。谢谢 这是我的密码 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.all_po

我想从url加载照片并保存在Android应用程序的外部存储中,但在运行应用程序时遇到了NetworkOnMainThreadException问题。我正在尝试使用通用图像加载程序加载图像并存储到外部存储目录。谢谢

这是我的密码

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.all_post);
        dbhelper = new MyDbHelper(this);
        dbhelper.onOpen(db);

 imageLoader = ImageLoader.getInstance();
        ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(CustomActionActivity.this));
        options = new DisplayImageOptions.Builder()
                .cacheInMemory(true)
                .cacheOnDisk(true)
                .considerExifParams(true)
                .bitmapConfig(Bitmap.Config.RGB_565)
                .build();
        Loaddata();
        new LosdImages().execute();

    }

 private class LosdImages extends AsyncTask<Void, Void, Void> {

        @Override
        protected Void doInBackground(Void... arg0) {
            Loaddata();
            return null;
        }
    }
    public void Loaddata() {

        db = dbhelper.getWritableDatabase();
        Cursor cursor = db.rawQuery("select * from ActivityObjectList", null);

        if (cursor.moveToFirst())
        {
            do {
                imageName = cursor.getString(cursor.getColumnIndex("imageaudioPath"));
                Log.e("imageName "," = "+imageName);
                String fileUrl = namespace + "/DownloadFile/FilePathMobile/ATTACHMENT/FileName/"+imageName;
                download_PngFileImgLoader(fileUrl, imageName);
                Log.e("imageName ", " DownLoaded Succecively !!! = " + imageName);
                pics.add(imageName);
            }
            while (cursor.moveToNext());
        }
        cursor.close();
    }

    void download_PngFileImgLoader(String fileUrl, String ImageName) {
        newFolder = new File(Environment.getExternalStorageDirectory().getPath() + File.separator + "classnkk_images");
        File fileForImage = new File(newFolder, ImageName);

        try {
            InputStream sourceStream;
            File cachedImage = imageLoader.getInstance().getDiscCache().get(fileUrl);
            if (cachedImage != null && cachedImage.exists()) { // if image was cached by UIL
                sourceStream = new FileInputStream(cachedImage);
            } else { // otherwise - download image
                ImageDownloader downloader = new BaseImageDownloader(getApplicationContext());
                sourceStream = downloader.getStream(fileUrl, null);
            }
            if (sourceStream != null) {
                try {
                    OutputStream targetStream = new FileOutputStream(fileForImage);
                    try {
                        IoUtils.copyStream(sourceStream, targetStream, null);
                    } finally {
                        targetStream.close();
                    }
                } finally {
                    sourceStream.close();
                }
            }
        } catch (IOException ie) {
            ie.printStackTrace();
        }
    }


}

我的建议是使用
Glide
它们有缓存、错误处理等功能

简单易用

File b = new File(Environment.getExternalStorageDirectory(), 
            "DCIM/Camera/IMG_20151028_192555.jpg");

Glide.with(MainActivity.this).load(c).
             error(R.drawable.empty_pic).
             placeholder(R.drawable.empty_pic).into(image2);

看到这个

我给你的建议是使用
Glide
它们有缓存、错误处理等功能

简单易用

File b = new File(Environment.getExternalStorageDirectory(), 
            "DCIM/Camera/IMG_20151028_192555.jpg");

Glide.with(MainActivity.this).load(c).
             error(R.drawable.empty_pic).
             placeholder(R.drawable.empty_pic).into(image2);

参见此

您必须在
异步任务
中编写网络操作,而不是在主
线程

删除此行表单
onCreate()
方法,您已经在
异步任务中调用了该方法

    Loaddata();

您必须在
AsyncTask
中编写网络操作,而不是在Main
Thread

删除此行表单
onCreate()
方法,您已经在
异步任务中调用了该方法

    Loaddata();
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(右布局,所有帖子);
dbhelper=新的MyDbHelper(此);
dbhelper.onOpen(db);
imageLoader=imageLoader.getInstance();
ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(CustomActionActivity.this));
选项=新建DisplayImageOptions.Builder()
.cacheInMemory(真)
.cacheOnDisk(真)
.considerExifParams(真)
.bitmapConfig(Bitmap.Config.RGB_565)
.build();
新的LosdImages().execute();
}
私有类LosdImages扩展异步任务{
@凌驾
受保护的Void doInBackground(Void…arg0){
Loaddata();
返回null;
}
公共void Loaddata(){
db=dbhelper.getWritableDatabase();
Cursor Cursor=db.rawQuery(“从ActivityObjectList中选择*”,null);
if(cursor.moveToFirst())
{
做{
imageName=cursor.getString(cursor.getColumnIndex(“imageaudioPath”);
Log.e(“imageName”,即“=”+imageName);
字符串fileUrl=namespace+“/DownloadFile/FilePathMobile/ATTACHMENT/FileName/”+imageName;
下载\u PngFileImgLoader(文件URL、图像名称);
Log.e(“imageName”,“已成功下载!!!=”+imageName);
添加图片(图片名称);
}
while(cursor.moveToNext());
}
cursor.close();
}
无效下载\u PngFileImgLoader(字符串文件URL、字符串图像名称){
newFolder=新文件(Environment.getExternalStorageDirectory().getPath()+File.separator+“classnkk_images”);
File fileForImage=新文件(newFolder,ImageName);
试一试{
输入流源流;
文件cachedImage=imageLoader.getInstance().getDiscCache().get(fileUrl);
if(cachedImage!=null&&cachedImage.exists()){//if图像由UIL缓存
sourceStream=新文件输入流(cachedImage);
}else{//else-下载图像
ImageDownloader downloader=新的BaseMageDownloader(getApplicationContext());
sourceStream=downloader.getStream(fileUrl,null);
}
if(sourceStream!=null){
试一试{
OutputStream targetStream=新文件OutputStream(fileForImage);
试一试{
copyStream(sourceStream,targetStream,null);
}最后{
targetStream.close();
}
}最后{
sourceStream.close();
}
}
}捕获(IOIE){
即printStackTrace();
}
}
}
}
我在您的代码中做了一些更改,这导致了NetworkMainThreadException。希望它能在创建时起作用

protectedvoid(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(右布局,所有帖子);
dbhelper=新的MyDbHelper(此);
dbhelper.onOpen(db);
imageLoader=imageLoader.getInstance();
ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(CustomActionActivity.this));
选项=新建DisplayImageOptions.Builder()
.cacheInMemory(真)
.cacheOnDisk(真)
.considerExifParams(真)
.bitmapConfig(Bitmap.Config.RGB_565)
.build();
新的LosdImages().execute();
}
私有类LosdImages扩展异步任务{
@凌驾
受保护的Void doInBackground(Void…arg0){
Loaddata();
返回null;
}
公共void Loaddata(){
db=dbhelper.getWritableDatabase();
Cursor Cursor=db.rawQuery(“从ActivityObjectList中选择*”,null);
if(cursor.moveToFirst())
{
做{
imageName=cursor.getString(cursor.getColumnIndex(“imageaudioPath”);
Log.e(“imageName”,即“=”+imageName);
字符串fileUrl=namespace+“/DownloadFile/FilePathMobile/ATTACHMENT/FileName/”+imageName;
下载\u PngFileImgLoader(文件URL、图像名称);
Log.e(“imageName”,“已成功下载!!!=”+imageName);
添加图片(图片名称);
}
while(cursor.moveToNext());
}
cursor.close();
}
无效下载\u PngFileImgLoader(字符串文件URL、字符串图像名称){
newFolder=新文件(Environment.getExternalStorageDirectory().getPath()+File.separator+“classnkk_images”);
File fileForImage=新文件(newFolder,ImageName);
试一试{
输入流源流;
文件cachedImage=imageLoader.getInstance().getDiscCache().get(fileUrl);
if(cachedImage!=null&&cachedImage.exists()){//if图像由UIL缓存
sourceStream=新文件输入流(cachedImage);
}else{//else-下载图像
ImageDownloader downloader=新的BaseMageDownloader(getApplicationContext());
sourceStream=downloader.getStream(
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.all_post);     
   StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
   StrictMode.setThreadPolicy(policy);
.....
 }