1

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

4 に答える 4

1

UIスレッド例外のネットワークについて確認し、AsyncTaskを使用していることを確認してください。AsyncTaskで同じコードを試してください。これは役に立ちます。

于 2012-08-23T06:25:32.370 に答える
1

2.2 と 4.0.0 の間に、UI スレッドでできることに関していくつかの変更がありました。

あなたのコード スニピットからは、これを実行しているスレッドはわかりませんが、これは同じ問題であると予想されます。

UI スレッドではこの http アクションを実行できないため、AsyncTask を使用してイメージをロードしてみてください。

于 2012-08-23T06:22:14.970 に答える
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 に答える