我不知道如何以不同的方法使用來自另一個處理程序的變量。我試圖將這些變量(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());
}
}
}
});
}
}
}
如果您正在執行的任務不需要在給定時刻對用戶可見,那麼我建議您查看內置的Android類AsyncTask。 – Samich
我寫的工作也一樣嗎? – SeniorDesignStudy
如何將它們聲明爲'public static'? – Kedarnath