1

我在我的 android 应用程序中从服务器下载图像时遇到问题。如果我尝试从https://www.morroccommethod.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 上成功下载 我认为操作系统版本可能有问题。

现在我希望任何人都可以帮助和指导我。

4

4 回答 4

1

在 2.2 和 4.0.0 之间,您可以在 UI 线程上执行的操作发生了一些变化。

从您的代码片段中,我无法判断您在哪个线程上执行此操作,但我希望这是同一个问题。

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

于 2012-08-23T06:22:14.970 回答
1

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

于 2012-08-23T06:25:32.370 回答
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;
    }
}
于 2012-08-23T06:41:50.333 回答
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);
}
于 2012-08-23T07:01:37.437 回答