我可以从主要活动中将数据保存在屏幕上的变量sbprint中。我从缓冲蓝牙数据的后台活动得到的变量sbprint。我想将屏幕上显示的数据记录到另一个类。 问题是我不能使用serializable,因为数据总是从我的蓝牙模块实时流式传输。代码基于here
我使用处理程序从缓冲的数据更新我的UI 注意:我在处理程序内获取共享首选项(这在MainActivity.java中)
h = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case RECIEVE_MESSAGE: // if receive massage
byte[] readBuf = (byte[]) msg.obj;
String strIncom = new String(readBuf, 0, msg.arg1); // create string from bytes array
sb.append(strIncom); // append string
int endOfLineIndex = sb.indexOf("\r\n"); // determine the end-of-line
if (endOfLineIndex > 0) { // if end-of-line,
String sbprint = sb.substring(0, endOfLineIndex); // extract string
sb.delete(0, sb.length()); // and clear
txtArduino.setText("Data from Arduino: " + sbprint); // update TextView
SharedPreferences logPreferences = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
SharedPreferences.Editor editor = logPreferences.edit();
String textLog = txtArduino.getText().toString();
editor.putString("log", textLog);
editor.commit();
}
//Log.d(TAG, "...String:"+ sb.toString() + "Byte:" + msg.arg1 + "...");
break;
}
};
};
h Handler根据此命令中的蓝牙文档从ConnectedThread类中获取消息对象,
h.obtainMessage(RECIEVE_MESSAGE, bytes, -1, buffer).sendToTarget(); // Send to message queue Handler
我的问题是,如何使用上述处理程序将变量sbprint传递到另一个类的新屏幕中。
这是我如何从另一个传递的数据中接收数据。我通过获取建议的共享首选项来传递变量缓冲区中的数据
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_datalog);
tvDatalog = (TextView) findViewById(R.id.tvDatalog);
SharedPreferences logPreferences = PreferenceManager.getDefaultSharedPreferences(this);
String text = logPreferences.getString("log", "null");
tvDatalog.setText(text+"\r\n");
}
注意: 我从我的MainActivity获取数据,但看起来我的asynctask在我的MainActivity中工作,当屏幕更改为另一个类时停止。如何使我的背景活动也适用于这两个类。我的意思是每当我将屏幕彼此改变时,背景活动始终有效。
答案 0 :(得分:1)
如果我理解正确,您可能想要使用界面。您可以在Activity
中定义包含Handler
的界面。然后,您可以在所需的Class
。