2016-09-06 13 views
1

私が間違っていることは本当にわかりません。ピカソがファイルから画像を読み込んでいない

onPostExecute、私はちょうどビットマップから作成されたファイルとImageViewのロード:私は携帯電話の画像ビューアからtmp.pngを見ることができています

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

。私はピカソの終わりから何か例外、エラー、何も受け取っていませんか?

Picassoがファイルから画像を読み込んでいないのはなぜですか?

+1

Picasso.with(context).load( "file://" + file).into(canvas);これを試してください。 –

+0

質問の編集にログを追加できますか? –

答えて

2

まず、あなたは正しいファイルパスPicassoを与えていることを確認して、 はその後、あなたはアプリのManifest.xmlにREAD_EXTERNAL_STORAGEの許可を追加する必要があります。

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

はマニフェストレベル

にこのラインを置きます
+0

私はすでにその許可を受けていました。ご覧のように、私はディレクトリに書き込むことができます。ファイルへのREADとWRITEの許可は私のための送料の馬のようなIMOです。 –

+0

あなたは正しいです、私は間違ったファイルパスを供給しています。 "root.getAbsolutePath()+"/DCIM/tmpimg/cached/tmp/tmp.png' –

+0

ok、canで、 'root.getAbsolutePath()+"/DCIM/tmpimg/cached /この答えをあなたの質問の解決策としてマークしてください。 –

関連する問題