1

PHP と MySQL データベースから画像の URL を取得します。Log.dは有効な画像 URL で結果を表示するため、ここではすべて問題ありません。

if (success == 1) {
    JSONArray comments = json.getJSONArray("photos");
    for (int i = 0; i < comments.length(); i++) {
        JSONObject m = comments.getJSONObject(i);
        final String filename = m.getString("filename");
        final String extension = m.getString("extension");
        String upload_at = m.getString("upload_at");
        String uid = m.getString("uid");

        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Bitmap mThumbIds = fetchImage(filepath_min
                + filename + "." + extension);
        Log.d("Photo URL", filepath_min + filename + "." + extension);
                List<Bitmap> l = Arrays.asList(mThumbIds);
                photoList = new ArrayList<Bitmap>(l);
            }
        });
    }
}

// Instance of ImageAdapter Class
mHandler.postDelayed((new Runnable() {
    public void run() {
        imgGrid.setAdapter(new ImageAdapter(
        PhotoViewerActivity.this, photoList));
    }
}), 1000);


この下では、指定された URL から画像を取得し、ビットマップとして返​​します。ここでは何も問題はありません。参考までに、戻り値がビットマップであることを示したいと思います。

public Bitmap fetchImage(String urlstr) {
    try {
        URL url;
        url = new URL(urlstr);

        HttpURLConnection c = (HttpURLConnection) url.openConnection();
        c.setDoInput(true);
        c.connect();
        InputStream is = c.getInputStream();
        Bitmap img;
        img = BitmapFactory.decodeStream(is);
        return img;
        } catch (MalformedURLException e) {
        Log.d("RemoteImageHandler", "fetchImage passed invalid URL: "
        + urlstr);
        } catch (IOException e) {
        Log.d("RemoteImageHandler", "fetchImage IO exception: " + e);
    }
    return null;
}


これは、GridView で画像を表示するための私の ImageAdapter です。

public class ImageAdapter extends BaseAdapter {
    private Context mContext;
    List<Bitmap> list = new ArrayList<Bitmap> l;

    public ImageAdapter(Context c, ArrayList<Bitmap> l) {
        mContext = c;
        list = l;
    }

    public Bitmap[] mThumbIds = list.toArray(new Bitmap[list.size()]);

    @Override
    public int getCount() {
        return mThumbIds.length;
    }

    @Override
    public Object getItem(int position) {
        return mThumbIds[position];
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView = new ImageView(mContext);
        imageView.setImageBitmap(mThumbIds[position]);
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setLayoutParams(new GridView.LayoutParams(130, 130));
        return imageView;
    }

}


これが私の問題です。アクティビティに表示される画像はありません。Bitmap[] mThumbIds でフェッチ配列を使用してハードコードされた URL を試してみると、成功しました。

Bitmap[] mThumbIds = { fetchImage("http://...jpg"),
                       fetchImage("http://...jpg") }

何が悪いのかわからない。Bitmap[] mThumbIds = list.toArray(new Bitmap[list.size()]);ArrayList を Array に変換 しようとしました。

4

2 に答える 2

0

私が見ることができることから、mThumbIds は、runOnUiThread メソッドで Bitmap 配列ではなく、通常の Bitmap として宣言されています。

Bitmap mThumbIds = fetchImage(filepath_min + filename + "." + extension);

に変更してみてください

Bitmap[] mThumbIds = fetchImage(filepath_min + filename + "." + extension);

それ以外の場合は、ビットマップ配列に別の変数名を使用して、変数名が競合しないようにします。

于 2012-07-26T04:15:56.453 に答える
0

https://github.com/thest1/LazyListを試してみて 、LazyAdapter の "getView" を少し変更するだけで、

交換 imageView.setImageResource(mThumbIds[position]);

imageLoader.DisplayImage(data.get(position), imageView);

ここでのデータは、ArrayListアダプタに渡す URL です。

ImageLoader クラスには、private Bitmap decodeFile(File f)必要に応じてビットマップのサイズを設定するメソッドがあります。

于 2012-07-26T05:17:24.537 に答える