2014-09-23 187 views
0

我有一个线程内运行的代码。我试图使用处理程序来接收来自线程的消息,以便我可以更新UI。不幸的是,该消息没有发送给处理程序。Android上的Handler没有收到消息

这是主题

    ChromaticLayout chromatic = new ChromaticLayout(mPartition, mDeviceWidth, mDeviceHeight, mData); 
        chromatic.execute(new ChromaticLayout.LayoutCallback() { 

         @Override 
         public synchronized void retrieveResult(Object[][] data) { 
          // TODO Auto-generated method stub 
          mPhotoData.clear(); 
          Log.w("CALLBACK", "start"); 

          for (int i=0; i<data.length; i++) 
          { 
           PhotoFrameData[] row = new PhotoFrameData[data[i].length]; 

           for (int j=0; j<data[i].length; j++) { 
            if (j==0) 
            Log.w("CALLBACK", "Width = " + ((PhotoFrameData) data[i][j]).getRectangle().width() + " height = " + ((PhotoFrameData) data[i][j]).getRectangle().height()); 

            row[j] = (PhotoFrameData) data[i][j]; 
           } 
           mPhotoData.add(row); 

          } 
          Log.w("CALLBACK", "end"); 

          PhotoFrameAdapter.this.handle.post(new Runnable(){ 

           @Override 
           public void run() { 
            // TODO Auto-generated method stub 
            PhotoFrameAdapter.this.handle.sendEmptyMessage(1); 
           } }); 
          //if (!PhotoFrameAdapter.this.handle.sendEmptyMessage(1)) 
          // Log.w("CALLBACK", "Handle not working"); 
         }}); 

       } 

的run方法在我的代码片段是处理程序的接收消息:

protected Handler handle = new Handler() { 

     public void handleMessage(Bundle message) { 
      //PhotoFrameAdapter.this.notifyDataSetChanged(); 
      mListener.dataLoaded(this); 
     } 
    }; 

什么使它不添加到消息队列和呼叫handleMessage?由于

回答

2

试试这个:

private Handler handler = new Handler() { 
     public void handleMessage(Message msg) { 
      switch (msg.what) { 
      case 1: 
       //do staff 
       break; 
      } 
     }; 
    }; 
+0

谢谢,你是对的参数.. – LittleFunny 2014-09-23 23:34:08

1

你可以使用一个处理程序的另一种方法如下(这也许在很多情况下,一个简单的实现):

定义UI线程上的投手:

private Handler mHandler = new Handler(); 
从后台线程

然后,只需用后的代码Runnable要运行:

mHandler.post(new Runnable() { 
    @Override 
    public void run() { 
     // Code to run here 
    } 
});