0

我做了一个应用程序,我需要从给定的链接下载图像。它在 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 as null (commented as 1) 。我什至在 manifest 中写了以下权限。

   <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。

4

2 回答 2

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

}
于 2012-10-21T21:17:05.333 回答
0

您是否在模拟器中运行您的应用程序?确保它具有正确的互联网连接。有时模拟器可能会失去互联网连接,尤其是当您更改网络而不重新启动模拟器时。

于 2012-10-21T19:34:57.247 回答