1

サーバーから画像をダウンロードし、それをビットマップに読み込んでImageViewに表示するAndroidアプリケーションを使用しています。

これはほとんどの場合うまく機能しますが、多くの場合、プロセスを経て(「画像を取得しています...」というProgressDialogがあります)、完了すると何も表示されません。logcatには、これにリモートで関連しているように見えるものは何もありません。

コードは次のとおりです。

    Bitmap image = null;

    HttpClient client = new DefaultHttpClient();
    HttpGet get = new HttpGet(webService + "?cmd=get");

    try
    {
        HttpResponse resp = client.execute(get);

        Log.i("PhotoRouletteDebug", "Resp buffer size: " + (int)resp.getEntity().getContentLength());
        InputStream is = resp.getEntity().getContent();

        BufferedInputStream buf = new BufferedInputStream(is, (int)resp.getEntity().getContentLength());

        image = BitmapFactory.decodeStream(buf);

        // clean up
        buf.close();
        is.close();

何も表示されていない場合でも、Respコンテンツの長さは常に正しいサイズを報告しますが、それでも何も表示されません。

このコードはAsyncTaskから呼び出されますが、一度に呼び出されるタスクは1つだけです。

これは私を狂気に駆り立てています、なぜそれがこれを続けているのか分かりません。

編集:これがimageViewを設定するコードです

// AsyncTask for Getting a new image from the queue
protected class GetImageTask extends AsyncTask<String, String, Bitmap>
{
    protected void onPreExecute()
    {
        // lets show a progress dialog so the user knows something is going on
        progressDialog = ProgressDialog.show(PhotoRoulette.this, "", "Fetching image...", true);
    }

    protected void onPostExecute (Bitmap image)
    {
        // we got a new photo so lets display it where it needs to be displayed
        try
        {
            photoView = (ImageView)findViewById(R.id.photoView);
            photoView.setImageBitmap(image);
        }
        catch (Exception e)
        {
            Log.e("Debug", "Something absolutely retarded happened", e);
        }

        // hide the progress dialog - we're all done
        progressDialog.dismiss();
    }

    protected Bitmap doInBackground(String... urls)
    {
        // Get a new Bitmap Queue Image
        Bitmap image = imageHandler.getQueueImage();
        return image;
    }
}
4

1 に答える 1

1

画像を表示するためのコードが表示されていないため、そのコードが正しいかどうかはわかりません。おそらく問題はそこにありますか?

しかし、問題が画像が破損していることだと仮定すると、これをデバッグする方法は次のとおりです。 PushbackInputStreambufでラップします。buf からバイトを読み取り、ファイルに保存します。次に、それらの同じバイトを にプッシュします。次に、を に渡します。イメージが正常に表示されたら、ファイルを (手動またはプログラムで) 削除します。それ以外の場合は、ビットマップを自由に調べることができます。PushbackInputStreamPushbackInputStreamBitmapFactory.decodeStream

于 2010-12-17T01:36:43.453 に答える