2

Android アプリのコードに苦労しています...

写真を(intentService経由で)ダウンロードしてから、ImageViewをLinearLayoutに追加して表示しようとしています。

これまでのところ、ダウンロードを管理するインテントサービスによって絶対パスが送信されました。パス名でトーストを取得します。

しかし、イメージビューを追加しても画像を表示できません...そして、その理由は本当にわかりません...

最初は、ハンドラーがレイアウトに到達できないと思っていましたが、setImageResource を使用してリソースのランダムな画像を表示することができました。したがって、問題は setimagebitmap または bitmapfactory デコードのいずれかに起因すると思います...

私のIntentserviceには(出力は私のファイルの名前です):

Messenger messenger = (Messenger) extras.get("MESSENGER");
Message msg = Message.obtain();
msg.arg1 = result;
msg.obj = output.getAbsolutePath();
try {
     messenger.send(msg);
} etc...

私の主な活動に戻ります。

Private Handler handler = new Handler() {
    public void handleMessage(Message message) {

        // I Get the message
        Object path = message.obj;

        //Check if download went ok
        if (message.arg1 == RESULT_OK && path != null) {
        Toast.makeText(Update3sur3.this,
            "Downloaded" + path.toString(), Toast.LENGTH_LONG)
            .show();

            //Try to display the pic
            LinearLayout res2=(LinearLayout)findViewById(R.id.reslayout2);
        ImageView imgView2 = new ImageView(Update3sur3.this);
        Bitmap bitmap= BitmapFactory.decodeFile(path.toString());
        imgView2.setImageBitmap(bitmap);
        res2.addView(imgView2);
    } else {
        Toast.makeText(Update3sur3.this, "Download failed.",
            Toast.LENGTH_LONG).show();
      }
    };
  };

どうもありがとうございました!

ローラン

4

1 に答える 1

1

最初は、ファイルに正しくアクセスできるかどうか、つまり次の手順に従うかどうかを確認しようとします。

  1. BitmapFactory.decodeFile(path.toString())の代わりにdecodeByteArray(byte [] data、int offset、int length)メソッドを使用します

  2. この新しい方法を使用するには、ファイルのバイト配列を自分で読み取る必要があります。これにより、追加の手順が追加されますが、ファイルを正しく読み取っていることを確認できます。

  3. FileInputStreamを使用してバイトを読み取る

ファイルimageFile=new File(path); バイトimageData[]=新しいバイト[(int)imageFile.length()];

BufferedInputStream in = new BufferedInputStream(new FileInputStream(imageFile);

in.read(imageData、0、(int)imageFile.length());

Log.d( ""、 "画像ファイルサイズ:" + imageFile.length()); //ここをチェックしてファイルサイズを正しく取得しますか?

//これで、imageDataは、画像を生成するために使用するバイト配列になります。decodeByteArray(imageData、0、(int)imageFile.length());

それでも画像が表示されない場合は、ログステートメントを入力して画像のサイズを印刷し、画像が正しいかどうかを確認してください。

于 2013-02-20T23:16:14.447 に答える