2014-04-07 74 views
0

我不知道如何以不同的方法使用來自另一個處理程序的變量。我試圖將這些變量(readBuf,readMessage和msg)設置爲公共,但這並不起作用。如何在單獨的方法中訪問這些變量?我希望列出的變量包括.arg1和.obj在另一個處理程序中。如何在Handler中訪問變量?公開設置它們不起作用

被註釋掉的代碼是最初處理數據的地方。

public Handler handler; 
    public byte[] readBuf; 
    public String readMessage; 
    public Object msg; 

    handler = new Handler(); 

    private final Handler mHandler = new Handler() { 
     @Override 
     public void handleMessage(Message msg) { 
      switch (msg.what) { 
      case MESSAGE_STATE_CHANGE: 
       if(D) Log.i(TAG, "MESSAGE_STATE_CHANGE: " + msg.arg1); 
       switch (msg.arg1) { 
      case MESSAGE_READ: 
         //for(int a = 0; a< 8000; a++) 
         //{ 
         try 
         { 
         byte[] readBuf = (byte[]) msg.obj; 
         String readMessage = new String(readBuf,0,msg.arg1); 
         mConversationArrayAdapter.add("Voltage: "+ readMessage); 
         //double[] convert = new double[1]; 
         //for(int z=0; z <1;z++) 
         //{ 
         //convert[z]= Double.parseDouble(readMessage); 
         //} 
         //for(int j=0; j<1;j++) 
         //{ 
         //stored[a][j]= convert[j]; 
         //} 
         //} 
         catch(NumberFormatException e) 
         { 
         System.err.println("NumberFormatException: "+e.getMessage()); 
         } 
         //} 
       break; 
      } 
     } 
    }; 

    public void process() 
    { 
     new Thread(new Task()).start(); 
    } 

    class Task implements Runnable 
    { 
     @Override 
     public void run() 
     { 
       try{ 
        Thread.sleep(1000); 
       } 
       catch(InterruptedException e) 
       { 
        e.printStackTrace(); 
       } 
       handler.post(new Runnable() 
       { 
        @Override 
        public void run(){ 
         for(int a = 0; a< 8000; a++) 
         { 
         byte[] readBuf = (byte[]) msg.obj;//ERROR with .obj 
         try 
         { 
         String readMessage = new String(readBuf,0,msg.arg1);// Error with .arg1 
         mConversationArrayAdapter.add("Voltage: "+ readMessage); 
         double[] convert = new double[1]; 
         for(int z=0; z <1;z++) 
         { 
         convert[z]= Double.parseDouble(readMessage); 
         } 
         for(int j=0; j<1;j++) 
         { 
         stored[a][j]= convert[j]; 
         } 
         } 
         catch(NumberFormatException e) 
         { 
         System.err.println("NumberFormatException: "+e.getMessage()); 
         } 
         } 


        } 
       }); 
     } 

    } 
} 
+0

如果您正在執行的任務不需要在給定時刻對用戶可見,那麼我建議您查看內置的Android類AsyncTask。 – Samich

+0

我寫的工作也一樣嗎? – SeniorDesignStudy

+0

如何將它們聲明爲'public static'? – Kedarnath

回答

0

我在其他方法中使用對象變量的方式是將新的公共靜態變量設置爲等於對象變量。這樣我可以用其他方法使用它們。

0

您必須創建一條消息並通過處理程序發送,而不是「共享」變量。

Message msg = new Message(); 
msg.what = ...; 
msg.obj = ...; 
.... 
handler.sendMessage(msg); 
相關問題