0

onCreateContextMenuと を使用してカスタム ダイアログを作成しようとしていますonContextItemSelected。そのため、ユーザーがコンテキスト メニューを選択すると、ダイアログが作成されます。

ユーザーが最初の要素を選択するときに、このコードを使用しています。

if(item.getItemId() == 0) {

        try {

            imageUrl = new URL(UrlSprite);
            HttpURLConnection conn = (HttpURLConnection) imageUrl.openConnection();
            conn.connect();
            loadedImage = BitmapFactory.decodeStream(conn.getInputStream());

            final Dialog d = new Dialog(ctx);
            d.requestWindowFeature(Window.FEATURE_NO_TITLE);
            d.setCancelable(true);

            d.setContentView(R.layout.popupsprite);

            TextView titulo = (TextView)d.findViewById(R.id.pkmnNombre);
            titulo.setText(Constantes.Pokemon[numero-1]);

            ImageView image = (ImageView)d.findViewById(R.id.spritePopup);
            image.setImageBitmap(loadedImage);

            d.show();

        } catch (IOException e) {
            e.printStackTrace();
        }

    }

しかし、クリックするとアプリケーションが閉じます。Android 3.0+ でのみ発生し、2.1、2.2、2.3 などの以前のバージョンでは、ポップアップが正しく表示されます。

何か案は?

ありがとう。

解決

final Dialog d = new Dialog(ctx);
d.requestWindowFeature(Window.FEATURE_NO_TITLE);
d.setCancelable(true);

d.setContentView(R.layout.popupsprite);

TextView titulo = (TextView)d.findViewById(R.id.pkmnNombre);
titulo.setText(Constantes.Pokemon[numero-1]);

ImagenSprite = (ImageView)d.findViewById(R.id.spritePopup);

attachImage(UrlSprite, ImagenSprite);

d.show();

public void attachImage(final String fileUrl, final ImageView view) {
    EXECUTOR.execute(new Runnable() {

        @Override
        public void run() {
            final Bitmap image = downloadImg(fileUrl);

            if (image != null) {
                view.post(new Runnable() {

                    @Override
                    public void run() {
                        view.setImageBitmap(image);
                    }
                });
            }
        }

        Bitmap downloadImg(String imgUrl) {

            try {
                URL imageUrl = new URL(imgUrl);
                HttpURLConnection conn = (HttpURLConnection) imageUrl.openConnection();
                conn.connect();
                loadedImage = BitmapFactory.decodeStream(conn.getInputStream());
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

            return loadedImage;

        }

    });
}
4

2 に答える 2

2

UIスレッドでネットワーク関連の操作を実行しています

HttpURLConnection conn = (HttpURLConnection) imageUrl.openConnection();
conn.connect();

Threadまたはを使用する必要がありますAsyncTask。あなたはNetworkOnMainThreadExceptionポストハニカムを取得します

http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html

したがって、独自のスレッドを作成し、そこでネットワーク関連の操作を行うか、Asynctask を使用します。

http://developer.android.com/reference/android/os/AsyncTask.html

于 2013-09-23T20:10:43.957 に答える
0

代わりにRaghunandanを使用することに加えてDialogFragment、Android 4.0 以降では非推奨になっていると思います (補足として)。

Android DialogFragment とダイアログ

于 2013-09-23T20:09:09.933 に答える