0

urlこんにちは、 からへの画像を取得しようとしていbitmapます。Android 4.1 デバイスを使用しています。アプリのフリーズ時にこのコードを実行するとnew URL(). open connection().getInputStream()); 、強制的に閉じます。何か案が?

   runOnUiThread(new Runnable() {
            public void run() {
                String url = "http://netmera.com/cdn/app/file/netmera.com/series/img-48/1372262272227_89/medium";
                try {
                    Bitmap bmp = BitmapFactory.decodeStream(new URL(url)
                            .openConnection().getInputStream());
                } catch (MalformedURLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } 
              }
4

4 に答える 4

0

You are running network related operation on the ui thread using runOnUiThread.

You should use a Thread or use Asynctask.

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

You are probably getting NetworkOnMainThreadException

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

Load asynctask on ui thread.

   new TheTask().execute().

AsyncTask

  class TheTask extends AsyncTask<Void,Void,Void>
  {

@Override
protected Void doInBackground(Void... params) {
    // TODO Auto-generated method stub
             String url = "http://netmera.com/cdn/app/file/netmera.com/series/img-48/1372262272227_89/medium"; 
    try {
                Bitmap bmp = BitmapFactory.decodeStream(new URL(url)
                        .openConnection().getInputStream());

            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 
    return null;
}

@Override
protected void onPostExecute(Void result) {
    // TODO Auto-generated method stub
    super.onPostExecute(result);
}

@Override
protected void onPreExecute() {
    // TODO Auto-generated method stub
    super.onPreExecute();
}
}

Use runOnUiThread to update ui and do your netowrk related operation in doInbackground().

  runOnUiThread(new Runnable() //run on ui thread
                 {
                  public void run() 
                  { 
                     // update ui
                  }
                 });
于 2013-06-27T09:41:03.563 に答える
0

bitmap = BitmapFactory.decodeStream((InputStream) new URL("your url").getContent());

于 2013-06-27T09:37:56.963 に答える
0

クラッシュの原因は 2 つあります

  • UI スレッドでネットワーク操作を実行しないでください。これにぜひご利用くださいAsyncTask。///NetworkOnMainThreadException
  • ビットマップに強い参照を使用しないでください。オブジェクトを使用WeakReference<Bitmap>//OutOfMemoryException
于 2013-06-27T09:38:01.707 に答える