图像不能在Android 2.3.3及以上的Android版本上下载

时间:2012-08-23 06:17:17

标签: android imagedownload

我在Android应用中从服务器下载图片时遇到问题。如果我尝试从https://www.morroccomethod.com/components/com_virtuemart/shop_image/category/resized/Trial_Sizes_4e4ac3b0d3491_175x175.jpg 下载图片

我的代码 -

bitmap = BitmapFactory.decodeStream((InputStream) new URL(url)
                .getContent());

返回null表示图像不在4.0.3上下载,但图像下载在2.2上成功下载 我认为os版本可能存在问题。

现在我希望任何人都能帮助并指导我。

4 个答案:

答案 0 :(得分:1)

在2.2和4.0.0之间,你可以在UI线程上做些什么改变。

从你的代码片断中我无法分辨出你在做什么线程,但我希望这是同样的问题。

尝试使用AsyncTask加载图像,因为您无法在UI线程上执行此http操作。

答案 1 :(得分:1)

请确认有关UI线程异常的网络,并确保您使用的是AsyncTask。尝试使用AsyncTask的相同代码,这将对您有所帮助。

答案 2 :(得分:1)

试试这段代码。

try
        {
            imageView.setImageDrawable(grabImageFromUrl(imageUrl));
        }
        catch (Exception e)
        {
            Log.i("CATCH", "ImageDrawable");
            e.printStackTrace();
        }

和方法代码是::

private Drawable grabImageFromUrl(String imageUrlInput) throws MalformedURLException, IOException, Exception
    {
        return Drawable.createFromStream((InputStream)new URL(imageUrlInput).getContent(), "src");
    }

我已经为你创建了这个代码,试着在我的最后工作......

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.ImageView;

public class image extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Bitmap bitmap = DownloadImage("https://www.morroccomethod.com/components/com_virtuemart/shop_image/category/resized/Trial_Sizes_4e4ac3b0d3491_175x175.jpg");
        ImageView img = (ImageView) findViewById(R.id.img);
        img.setImageBitmap(bitmap);
    }

    private InputStream OpenHttpConnection(String urlString) throws IOException {
        InputStream in = null;
        int response = -1;

        URL url = new URL(urlString);
        URLConnection conn = url.openConnection();

        if (!(conn instanceof HttpURLConnection))
            throw new IOException("Not an HTTP connection");

        try {
            HttpURLConnection httpConn = (HttpURLConnection) conn;
            httpConn.setAllowUserInteraction(false);
            httpConn.setInstanceFollowRedirects(true);
            httpConn.setRequestMethod("GET");
            httpConn.connect();
            response = httpConn.getResponseCode();
            if (response == HttpURLConnection.HTTP_OK) {
                in = httpConn.getInputStream();
            }
        } catch (Exception ex) {
            throw new IOException("Error connecting");
        }
        return in;
    }

    private Bitmap DownloadImage(String URL) {
        Bitmap bitmap = null;
        InputStream in = null;
        try {
            in = OpenHttpConnection(URL);
            bitmap = BitmapFactory.decodeStream(in);
            in.close();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        return bitmap;
    }
}

答案 3 :(得分:1)

在setcontentview()之后将下面的代码写入activity.java文件的onCreate方法。

if (android.os.Build.VERSION.SDK_INT > 9) {
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
}