2016-09-06 2 views
1

Я действительно не знаю, что я делаю неправильно.Picasso не загружает изображение из файла

onPostExecute, то я загрузил 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()); 
     } 
    } 
} 

я в состоянии видеть tmp.png от просмотра изображений телефона. Я не получаю никаких исключений, ошибок, от конца Пикассо?

Может кто-нибудь помочь мне, почему Picasso не загружает мое изображение из файла?

+1

попробуйте этот Picasso.with (context) .load ("file: //" + file) .into (canvas); –

+0

Вы можете добавить журнал, в который хотите внести изменения? –

ответ

2

первый, убедитесь, что вы даете Picasso правильный путь к файлу, то вы должны добавить разрешение READ_EXTERNAL_STORAGE в приложение Manifest.xml:

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

поставить эту строку в проявленном уровне

+0

У меня уже было такое разрешение. Как вы можете видеть, я могу писать в каталог. READ и WRITE разрешения для файла похожи на лошадь в коляске для меня IMO. –

+0

Нет, вы правы, я поставляю неправильный путь к файлу. До этого он должен быть на 'root.getAbsolutePath() +"/DCIM/tmpimg/cached/tmp.png' не 'root.getAbsolutePath() +"/DCIM/tmpimg/cached/tmp/tmp.png' –

+0

ok, can пожалуйста, отметьте этот ответ как решение вашего вопроса? –

Смежные вопросы