0

彼ら。私はこのコードを持っています:

package com.example.httpprogress;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;

public class MyPicGetTask extends AsyncTask<URL , Void, Bitmap>{


    InputStream is = null;
    BufferedInputStream bis = null;
    Bitmap bmp = null;


    @Override
    protected Bitmap doInBackground(URL... urls) {
        // TODO Auto-generated method stub

        URL url = urls[0];


        try {
               URLConnection conn = url .openConnection();
               conn.connect();
               is = conn.getInputStream();
               bis = new BufferedInputStream( is );
               bmp = BitmapFactory.decodeStream( bis );
            } catch (MalformedURLException e) {

            } catch (IOException e) {

            } finally {
               try {
                  is.close();
                  bis.close();
               } catch (IOException e) {

               }
            }
        return bmp;


    }

}

失敗しますが、 AsyncTask を使用して、このクラスをアクティビティの内部として記述すれば、問題ありません。デバッグできないので理由は言えませんが、失敗するとデバッグタブが開くのがわかりますが、参考にはなりません。何か案は?初心者の質問で申し訳ありません

それは私の活動です:

package com.example.httpprogress;

import java.io.BufferedInputStream;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;

import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;

public class PicActivity extends Activity implements OnClickListener{

    InputStream is = null;
    BufferedInputStream bis = null;
    Bitmap bmp = null;
    private URL url;
    //"http://192.168.0.30/03.jpg";
     /*
    private class getPicTask extends AsyncTask<Void, Void, Void>{

        @Override
        protected Void doInBackground(Void... s) {
            // TODO Auto-generated method stub


            try {
                url = new URL("http://192.168.0.93/image.php");
            } catch (MalformedURLException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }

            try {
                   URLConnection conn = url .openConnection();
                   conn.connect();
                   is = conn.getInputStream();
                   bis = new BufferedInputStream( is );
                   bmp = BitmapFactory.decodeStream( bis );
                } catch (MalformedURLException e) {

                } catch (IOException e) {

                } finally {
                   try {
                      is.close();
                      bis.close();
                   } catch (IOException e) {

                   }
                }
            return null;


        }



    };

    */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pic);




        final ImageView image = (ImageView) findViewById(R.id.imageView1);


        image.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {


        ///////////

                try {
                    url =  new URL("http://192.168.0.30/03.jpg");
                } catch (MalformedURLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }


                new MyPicGetTask().execute(url);


                image.setImageBitmap(bmp);


            }
        });


            ////////////////
    }



    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.pic, menu);


        ////////////////


        return true;
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

        Log.d("httpProgress", "Onclick()");




    }

}
4

4 に答える 4

1

Log.d() コードを doInBackground(...) に追加して、発生したすべての例外を出力します。それは何が間違っているのかを教えてくれるはずです、例えば

try {
    URLConnection conn = url .openConnection();
    conn.connect();
    is = conn.getInputStream();
    bis = new BufferedInputStream( is );
    bmp = BitmapFactory.decodeStream( bis );
} catch (Exception e) {
    Log.d("Async","EXCEPTION",e);
} finally {
    try {
        is.close();
        bis.close();
    } catch (IOException e) {
        Log.d("Close","EXCEPTION",e);
    }
}
于 2013-04-11T19:35:47.377 に答える
0

呼び出しAsyncTaskているアクティビティの外部のパブリック クラスとして使用している場合は、そのアクティビティのコンテキストを受け取る必要があります。これを設定する方法を説明する多数の投稿がここここ、およびここにあります。

于 2013-04-11T20:13:13.113 に答える
0

doInBackground から返されたビットマップは、onPostExecute で UI を更新するために使用する必要があります。

protected void onPostExecute(Bitmap bitmap) {
    image.setImageBitmap(bitmap);
}

asyncTask サブクラスは、UI を更新するために画像にアクセスする必要があるため、それを内部クラスとして持つことは、これを確実に実行できるようにする 1 つの方法です。

于 2013-04-11T19:48:41.787 に答える