我不知道如何在另一个方法中使用来自另一个处理程序的变量。我试图将这些变量(readBuf,readMessage和msg)设置为公共,但这不起作用。如何在单独的方法中访问这些变量?我希望列出的变量包括.arg1和.obj在另一个处理程序中。
注释掉的代码是最初处理数据的地方。
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 :(得分:0)
我在其他方法中使用对象变量的方法是将新的公共静态变量设置为等于对象变量。这样我就可以在其他方法中使用它们。
答案 1 :(得分:0)
您必须创建一个消息并按处理程序发送,而不是“共享”变量。
Message msg = new Message();
msg.what = ...;
msg.obj = ...;
....
handler.sendMessage(msg);