2016-09-06 13 views
1

Ich weiß wirklich nicht, was ich falsch mache.Picasso lädt Bild nicht aus Datei

OnPostExecute, geladen das ich die Image mit der Datei, die ich nur aus Bitmap erstellt:

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()); 
     } 
    } 
} 

Ich kann die tmp.png aus dem Telefonbildbetrachter sehen. Ich bekomme keine Ausnahmen, Fehler, was auch immer von Picassos Ende?

Kann mir jemand helfen, warum lädt Picasso mein Bild nicht aus der Datei?

+1

versuchen Sie es mit Picasso.with (context) .load ("file: //" + file) .into (Leinwand); –

+0

können Sie das Protokoll bei einer Bearbeitung der Frage hinzufügen? –

Antwort

2

zuerst, stellen Sie sicher, dass Sie Picasso die richtige Dateipfad geben, dann haben Sie die Erlaubnis von READ_EXTERNAL_STORAGE in der App Manifest.xml hinzuzufügen:

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

diese Zeile in der manifesten Ebene setzen

+0

Ich hatte diese Erlaubnis bereits. Wie Sie sehen können, kann ich in ein Verzeichnis schreiben. READ und WRITE-Berechtigungen für eine Datei ist wie Pferd in Wagen für mich IMO. –

+0

Nein, Sie haben Recht, ich liefere den falschen Dateipfad. Bevor es sein sollte auf "root.getAbsolutePath() +"/DCIM/tmpimg/cached/tmp.png' nicht 'root.getAbsolutePath() +"/DCIM/tmpimg/cached/tmp/tmp.png' –

+0

ok, kann Bitte markieren Sie diese Antwort als Lösung Ihrer Frage? –

Verwandte Themen