我有一个需要从给定链接下载图像的应用程序。它在logcat中显示无错误和无错误消息。以下是我的代码

 public Drawable getImage(String ImagePath,String fileName) {

    Log.v("download", "image downloading from net");

    boolean bin = getBinaryWebFile(ImagePath,fileName);
    Drawable draw = Drawable.createFromPath(SavePath+fileName); //..........(1)
    return draw;

}//getImage ends here*/

private boolean getBinaryWebFile(String inURL, String filename) {

    File file = new File(SavePath,filename);

    try {

        URL url = new URL(inURL);
        HttpURLConnection con = (HttpURLConnection)url.openConnection();

        con.setRequestMethod("GET");
        con.setDoOutput(true);
        con.connect();

        InputStream is = con.getInputStream();
        FileOutputStream fos = new FileOutputStream(file);
        BufferedOutputStream bout = new BufferedOutputStream(fos,1024);
        byte[] data =new byte[1024];
        int x = 0;

        while((x=is.read(data,0,1024))>=0){
            bout.write(data,0,x);
        }
        fos.flush();
        bout.flush();
        fos.close();
        bout.close();
        is.close();

        return true;

    } catch (MalformedURLException e) {
         Log.d("PowerSaver","getBinaryWebFile->MalformedURLException: "+e.getMessage());
        //e.printStackTrace();
    } catch (IOException e) {
         Log.d("PowerSaver","getBinaryWebFile->I/O exception: "+e.getMessage());
    }
    return false;

}//getbinarywebfile ends here


在调试时,一切运行良好,最后我得到draw为null(注释为1)。我什至在清单中写了以下权限。

   <uses-permission
    android:name = "android.permission.INTERNET"/>
<uses-permission
    android:name = "android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission
    android:name = "android.permission.ACCESS_WIFI_STATE" />
<uses-permission
    android:name = "android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission
    android:name = "android.permission.READ_PHONE_STATE"/>


在draw中仍为null,这称为注释1。

最佳答案

该代码对我有用:

private static long DownloadFromUrl(Context context, URL fileUrl,
        String fileName) throws Exception { // this is the downloader method

    try {

        URL myFileUrl = null;
        myFileUrl = fileUrl;

        // *** Internet connection
        HttpURLConnection conn = (HttpURLConnection) myFileUrl
                .openConnection();
        conn.setDoInput(true);
        conn.connect();
        // int length = conn.getContentLength();
        // int[] bitmapData =new int[length];
        // byte[] bitmapData2 =new byte[length];

        InputStream is = conn.getInputStream();

        // decodificar la imagen de internet en bmImg
        Bitmap bmImg = BitmapFactory.decodeStream(is);

        // ***Save in the the SD

        FileOutputStream out = new FileOutputStream(
                <path + filename>);

        byte[] buffer = new byte[1024];
        int len;
        while ((len = is.read(buffer)) > 0) {
            out.write(buffer, 0, len);
            tam += len;
        }
        is.close();

        // Save using the selected format and quality
        bmImg.compress(Bitmap.CompressFormat.PNG,
                <quality>, out);
        out.flush();
        out.close();

        // tam=bmImg.getByteCount();
        bmImg.recycle();

        return tam;

    } catch (IOException e) {
        // showErrorMessage(context, "Error downloading");
        e.printStackTrace();
        return 0;
    }

}

08-29 00:57