无法从网址下载图片

时间:2014-04-19 09:09:26

标签: android image bitmap bitmapimage

嗨,请帮助

在设备上运行时,位图为空,但在Genymotion(模拟器)上运行时运行正常

我正在尝试从网址下载图片 当我在Genymotion(模拟器)中运行它运行正常并显示图像时,但当我在设备上运行它时Bitmap为空。

以下是代码

public void DisplayImage(String url, ImageView imageView)
{
    imageViews.put(imageView, url);
    Bitmap bitmap = memoryCache.get(url);
    if (bitmap != null)
        imageView.setImageBitmap(bitmap);
    else {
        queuePhoto(url, imageView);
        imageView.setImageResource(stub_id);
    }
}

这是网址

url=http://www.hugosys.in/www.nett-torg.no/wp-content/uploads/2014/04/Lighthouse3-300x225.jpg

请帮帮我。

4 个答案:

答案 0 :(得分:2)

您应该使用jsoup.jar文件从服务器下载图像。

对于前。

    String baseUrl = "URL Here";
    try 
    {
        Document doc = Jsoup.connect(baseUrl).get();
        Elements content = doc.select("a");
        Element last = content.last();
        lastEle=last.text();
        String temp="";
        int totalSize;
        //
        while (!a)
        {
            temp = content.get(i).text();
            a=lastEle.equals(temp);
            File f1 = new File(path);

            File f = new File(f1, temp);
            //Log.d("Image path", f+"");    
            tmpUrl = baseUrl + temp;
        //  Log.d("Full URL", tmpUrl);
            if(!f.exists())
            {
                url = new URL(tmpUrl);
                HttpURLConnection urlConnection=(HttpURLConnection)url.openConnection();

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

                FileOutputStream fileOutput=new FileOutputStream(f);

                InputStream inputStream = urlConnection.getInputStream();
                totalSize = urlConnection.getContentLength();

                int downloadedSize = 0;
                byte[] buffer = new byte[1024];
                int bufferLength = 0;
                str= "";
                while ( (bufferLength = inputStream.read(buffer)) > 0 ) 
                {
                    fileOutput.write(buffer, 0, bufferLength);
                    downloadedSize += bufferLength;
                }
            }
            else
            {
                Log.d("Image Available", "Available");
            }
            i++;
        }    
    } 
    catch (IOException e) 
    {
        Log.e(TAG, "Failed to load HTML code", e);
    }

答案 1 :(得分:1)

您可以尝试加载这样的位图:

              public  Bitmap getBitmapFromUrl(String url) {
                    Bitmap bitmap = null;
                    HttpGet httpRequest = null;
                    httpRequest = new HttpGet(url);
                    HttpClient httpclient = new DefaultHttpClient();

                    HttpResponse response = null;
                    try {
                        response = (HttpResponse) httpclient.execute(httpRequest);
                    } catch (ClientProtocolException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                    if (response != null) {
                        HttpEntity entity = response.getEntity();
                        BufferedHttpEntity bufHttpEntity = null;
                        try {
                            bufHttpEntity = new BufferedHttpEntity(entity);
                        } catch (IOException e) {
                            e.printStackTrace();
                        }

                        InputStream instream = null;
                        try {
                            instream = bufHttpEntity.getContent();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }

                        bitmap = BitmapFactory.decodeStream(instream);

                    }
                    return bitmap;
              }

答案 2 :(得分:1)

这是真正帮助你的代码段......

文件包含使用ImageLoader.Java在图像视图上下载和设置图像 他们的ImageCache是​​为了节省时间而维护的。

FileCache.java

ImageLoader.java

MemoryCache.java

Utils.java

在Manifest.xml中添加权限

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

在图像视图上设置图像的代码是......

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity {


    private Button button;
    private ImageView image;
    ImageLoader imageLoader;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        final String url="http://www.hugosys.in/www.nett-torg.no/wp-content/uploads/2014/04/Lighthouse3-300x225.jpg";
        imageLoader=new ImageLoader(MainActivity.this);
        button=(Button)findViewById(R.id.button1);
        image=(ImageView)findViewById(R.id.imageView1);
        button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                imageLoader.DisplayImage(url, image);
            }
        });
    }

 }

答案 3 :(得分:0)

检查你的代码后,我发现清单中缺少权限,这就是为什么它会产生问题

案例1 - &gt; 当您在genymotion中使用ur代码时,它可以正常工作,因为您的模拟器中不需要读写访问权。

案例2 - &gt; 当你在设备中运行时,它需要适当的权限才能将图像存储在设备缓存中,因为它无法在设备中运行。

所以你必须在清单中添加两个权限..

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

希望这有效,请随时回复我...... !!!!