1

ビューの背景画像 URL を含む JSON 文字列をダウンロードします。ダウンロードコードは の中にありdoInBackground(Object... params)ます。画像の読み込みには、Universal Image Loader を使用しています。

ImageLoader.getInstance().loadImage(shop.background, new ImageLoadingListener() {

    public void onLoadingStarted(String imageUri, View view) {
        // TODO Auto-generated method stub
    }

    public void onLoadingFailed(String imageUri, View view, 
            FailReason failReason) {
        // TODO Auto-generated method stub
    }

    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
        // TODO Auto-generated method stub
        Drawable d = new BitmapDrawable(getResources(),loadedImage);
        mainLayout.setBackgroundDrawable(d);
    }

    public void onLoadingCancelled(String imageUri, View view) {
        // TODO Auto-generated method stub
    }
});

私は得ています

java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

どこが間違っていますか?

4

3 に答える 3

1

ImageLoader のコードを asyncTask の onPostExecute に移動します。どのスレッドでもハンドラーを作成することはできません (ImageLoader にはハンドラーが必要だと思います)。looper と Looper.prepare() が呼び出されるスレッドが必要です。AsyncTask のスレッドにはルーパーがありません。したがって、コードを onPostExecute に移動して、メイン スレッドで実行します。

于 2013-09-30T19:30:07.780 に答える
0

Looper.prepare() を呼び出していないワーカー スレッドからハンドラーを作成しようとしている点で間違っています。意図的にそれを行っていない可能性もありますが、変更するためにハンドラーを作成するメソッドはたくさんあります。ビュー、通常、このハンドラーはメイン UI スレッドにアタッチされますが、ワーカー スレッドからハンドラーを作成しようとするメソッドを呼び出している可能性が非常に高くなります。その場合は、メイン UI からそのメソッドを呼び出す必要がありますが、 UI がフリーズしないことを確認してください。その場合は、独自のハンドラーを作成し、完了したら実行するか、必要に応じてアクティビティにいる場合は runOnUIThread メソッドを呼び出します...

お役に立てれば。

よろしく!

于 2013-09-30T19:28:34.020 に答える
0

これで試してみてください。

            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    mainLayout.setBackgroundDrawable(d);
                }
            });
于 2013-09-30T19:30:33.093 に答える