Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.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 毕加索没有从文件中加载图像_Java_Android_Picasso - Fatal编程技术网

Java 毕加索没有从文件中加载图像

Java 毕加索没有从文件中加载图像,java,android,picasso,Java,Android,Picasso,我真的不知道我做错了什么 在PostExecute上,我加载了ImageView,其中包含刚从位图创建的文件: public class ComicFragment extends Fragment { private final static String URL1 = "http://192.168.1.143/jerson/sample_comic.jpg"; @Override public View onCreateView(LayoutInflater in

我真的不知道我做错了什么

在PostExecute上,我加载了ImageView,其中包含刚从位图创建的文件:

public class ComicFragment extends Fragment
{
    private final static String URL1 = "http://192.168.1.143/jerson/sample_comic.jpg";

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState)
    {
        View view = inflater.inflate(R.layout.fragment_comic, parent, false);
        ImageView imageView = (ImageView) view.findViewById(R.id.imageview_comic);

        Point point = getScreenSize();
        new DownloadImageTask(getActivity(), imageView, point.x, point.y).execute(URL1);

        //Uri uri = Uri.parse("http://192.168.1.143/jerson/sample_comic.jpg");
        //simpleDraweeView.setImageURI(uri);

        return view;
    }

    private Point getScreenSize()
    {
        Point point = new Point();
        WindowManager manager = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
        Display display = manager.getDefaultDisplay();
        display.getSize(point);

        return point;
    }

    private byte [] getBitmapByteArray(Bitmap bitmap)
    {
        int bytes = bitmap.getByteCount();
        ByteBuffer buffer = ByteBuffer.allocate(bytes);
        bitmap.copyPixelsToBuffer(buffer);

        return buffer.array();
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState)
    {
        super.onViewCreated(view, savedInstanceState);
    }

    private int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight)
    {
        // From https://developer.android.com/training/displaying-bitmaps/load-bitmap.html#read-bitmap

        final int height = options.outHeight;
        final int width = options.outWidth;
        int inSampleSize = 1;

        if (height > reqHeight || width > reqWidth)
        {

            final int halfHeight = height / 2;
            final int halfWidth = width / 2;

            while ((halfHeight / inSampleSize) >= reqHeight && (halfWidth / inSampleSize) >= reqWidth)
            {
                inSampleSize *= 2;
            }
        }

        return inSampleSize;
    }

    private class DownloadImageTask extends AsyncTask<String, Void, Bitmap>
    {
        private Context context;
        private int viewWidth;
        private int viewHeight;
        private ImageView canvas;

        public DownloadImageTask(Context context, ImageView view, int viewWidth, int viewHeight)
        {
            this.context = context;
            this.viewWidth = viewWidth;
            this.viewHeight = viewHeight;
            canvas = view;
        }

        @Override
        protected Bitmap doInBackground(String ... urls)
        {
            String url = urls[0];
            Bitmap comicBitmap = null;

            FileOutputStream out = null;

            File root = Environment.getExternalStorageDirectory();
            File directory = new File(root.getAbsolutePath() + "/DCIM/tmpimg/cached/");

            directory.mkdirs();
            File file = new File(directory, "tmp.png");

            try
            {
                InputStream forGettingSizeOnly = new BufferedInputStream(new URL(url).openStream());

                BitmapFactory.Options options = new BitmapFactory.Options();
                options.inJustDecodeBounds = true;

                BitmapFactory.decodeStream(forGettingSizeOnly, null, options);
                int outWidth  = options.outWidth;
                int outHeight = options.outHeight;
                options.inSampleSize = calculateInSampleSize(options, viewWidth, viewHeight);
                options.inJustDecodeBounds = false;

                // Make this not load another image from network the second time...
                InputStream actualImage = new BufferedInputStream(new URL(url).openStream());
                Bitmap decodedImage = BitmapFactory.decodeStream(actualImage);

                out = new FileOutputStream(file);
                comicBitmap = Bitmap.createBitmap(decodedImage, 0, 0, outWidth, 400);
                comicBitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
                out.close();

                Log.i(ComicApplication.TAG, "****File saved at : " + file.getAbsolutePath() + "WxH" + outWidth + " x " + comicBitmap.getHeight());
            }
            catch(Exception e)
            {
                e.printStackTrace();
                Log.i(ComicApplication.TAG, "ERROR : " + e.getMessage());
            }

            return comicBitmap;
        }

        @Override
        protected void onPostExecute(Bitmap result)
        {
            File root = Environment.getExternalStorageDirectory();
            File file = new File(root.getAbsolutePath() + "/DCIM/tmpimg/cached/tmp/tmp.png");
            Picasso.with(context).load(file).into(canvas);
            Log.i(ComicApplication.TAG, "FILE LOADED FROM : " + file.getAbsolutePath());
        }
    }
}
公共类ComicFragment扩展了片段
{
私有最终静态字符串URL1=”http://192.168.1.143/jerson/sample_comic.jpg";
@凌驾
创建视图上的公共视图(LayoutFlater充气器、视图组父级、捆绑保存状态)
{
视图=充气机。充气(R.layout.fragment\u漫画,父,false);
ImageView ImageView=(ImageView)view.findViewById(R.id.ImageView_);
Point=getScreenSize();
新下载的ImageTask(getActivity(),imageView,point.x,point.y).execute(URL1);
//Uri=Uri.parse(“http://192.168.1.143/jerson/sample_comic.jpg");
//SimpleDraweView.setImageURI(uri);
返回视图;
}
私有点getScreenSize()
{
点=新点();
WindowManager=(WindowManager)getContext().getSystemService(Context.WINDOW\u服务);
Display Display=manager.getDefaultDisplay();
显示。getSize(点);
返回点;
}
专用字节[]getBitmapByteArray(位图)
{
int bytes=bitmap.getByteCount();
ByteBuffer缓冲区=ByteBuffer.allocate(字节);
copyPixelsToBuffer(缓冲区);
返回buffer.array();
}
@凌驾
已创建视图上的公共void(视图,捆绑保存状态)
{
super.onViewCreated(视图,savedInstanceState);
}
私有int-calculateInSampleSize(BitmapFactory.Options选项、int-reqWidth、int-reqHeight)
{
//从https://developer.android.com/training/displaying-bitmaps/load-bitmap.html#read-位图
最终内部高度=options.outHeight;
最终整数宽度=options.outWidth;
int inSampleSize=1;
如果(高度>要求高度| |宽度>要求宽度)
{
最终int半高=高度/2;
最终整数半宽度=宽度/2;
而((半高/采样尺寸)>=reqHeight&&(半宽/采样尺寸)>=reqWidth)
{
inSampleSize*=2;
}
}
返回样本大小;
}
私有类DownloadImageTask扩展了AsyncTask
{
私人语境;
私有int视图宽度;
私家车内景高度;
私有图像视图画布;
公共下载ImageTask(上下文上下文、ImageView视图、int-viewWidth、int-viewHeight)
{
this.context=上下文;
this.viewWidth=viewWidth;
this.viewHeight=viewHeight;
画布=视图;
}
@凌驾
受保护位图doInBackground(字符串…URL)
{
字符串url=url[0];
位图comicBitmap=null;
FileOutputStream out=null;
文件root=Environment.getExternalStorageDirectory();
文件目录=新文件(root.getAbsolutePath()+“/DCIM/tmpimg/cached/”;
mkdirs()目录;
File File=新文件(目录“tmp.png”);
尝试
{
InputStream ForningSizeOnly=new BufferedInputStream(新URL(URL).openStream());
BitmapFactory.Options=new-BitmapFactory.Options();
options.inJustDecodeBounds=true;
decodeStream(忘记SizeOnly、null、选项);
int-outWidth=选项。outWidth;
int outHeight=options.outHeight;
options.inSampleSize=计算样本大小(选项、视图宽度、视图高度);
options.inJustDecodeBounds=false;
//使其不会在第二次从网络加载另一个映像。。。
InputStream实现图像=新的BufferedInputStream(新URL(URL).openStream());
位图decodedImage=BitmapFactory.decodeStream(现实图像);
out=新文件输出流(文件);
comicBitmap=Bitmap.createBitmap(解码图像,0,0,外径,400);
compress(Bitmap.CompressFormat.PNG,100,out);
out.close();
Log.i(ComicApplication.TAG,****文件保存在:“+File.getAbsolutePath()+“WxH”+outWidth+“x”+comicBitmap.getHeight());
}
捕获(例外e)
{
e、 printStackTrace();
Log.i(comicaplication.TAG,“错误:+e.getMessage());
}
返回comicBitmap;
}
@凌驾
受保护的void onPostExecute(位图结果)
{
文件root=Environment.getExternalStorageDirectory();
File File=新文件(root.getAbsolutePath()+“/DCIM/tmpimg/cached/tmp/tmp.png”);
毕加索.with(context).load(file).into(canvas);
Log.i(comicaplication.TAG,“文件加载自:”+FILE.getAbsolutePath());
}
}
}
我可以从手机的图像查看器中看到
tmp.png
。我没有收到任何例外,错误,从毕加索的结束


有人能帮我解释一下为什么毕加索没有从文件中加载我的图像吗?

首先,请确保您为毕加索提供了正确的文件路径, 然后,您必须在app Manifest.xml中添加读取外部存储的权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>


把这一行放在清单级别

试试这个毕加索.with(context).load(“file://“+file.into”(画布);你能在编辑问题时添加日志吗?我已经有了这些权限。正如您所看到的,我能够写入目录。对我来说,文件的读写权限就像马车上的马。不,你是对的,我提供了错误的文件路径。在它应该在
root.getAbsolutePath()+“/DCIM/tmpimg/cached/tmp.png
上之前,请不要
root.getAbsolutePath()+”/DCIM/tmpimg/cached/tmp/tmp.png
好的,你能标记这个吗