gpt4 book ai didi

java - Android 蓝牙套接字连接使用 AsyncTask 在后台接收数据

转载 作者:太空宇宙 更新时间:2023-11-04 13:50:17 26 4
gpt4 key购买 nike

我是Android新手,我正在制作一个通过蓝牙将手机与Arduino连接的应用程序,当用户按下某些按钮时手机会发送数据,但问题是手机必须期望在不停止应用程序的情况下连续接收数据,并且当手机接收数据时必须更新 ListView 和两个 TextView 并继续等待另一次接收数据。我读过,我必须使用一个扩展 AsyncTask 的类,但在阅读了很多内容之后,我仍然不明白它是如何工作的。在主类中,onCreate 方法执行线程,并且会有这样的一些内容:

ListView listView = (ListView)findViewById(R.id.ListaAlertas);
TextView textTemp = (TextView)findViewById(R.id.NumeroTemperatura);
TextView textHum = (TextView)findViewById(R.id.NumeroHumedad);
Receptor task = new Receptor(listView, textTemp,textHum);
task.execute();

我读过的受体类是这样的:

public class Receptor extends AsyncTask<Void, Integer, Void> {

private WeakReference<ListView> list;
private WeakReference<TextView> temp;
private WeakReference<TextView> hum;
BluetoothSocket socketReceptor;
InputStream inpReceptor;
OutputStream outReceptor;

public Receptor(ListView view, TextView view2, TextView view3) {
this.list = new WeakReference<ListView>(view);
this.temp = new WeakReference<TextView>(view2);
this.hum = new WeakReference<TextView>(view3);
}

@Override
protected Void doInBackground(Void... params) {

try {
socketReceptor = SocketSingleton.getSocket();
inpReceptor = socketReceptor.getInputStream();
outReceptor = socketReceptor.getOutputStream();

byte[] buffer = new byte[25];
int read = inpReceptor.read(buffer);
while(read != -1){
publishProgress(read);
read = inpReceptor.read(buffer);
}

inpReceptor.close();
outReceptor.close();
socketReceptor.close();

} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}

我在 SocketSingleton 类中有套接字,现在我只想等待读取,直到有东西要接收,然后更新 listView 和属于主类的两个 textView,然后再次返回等待读取,直到有新的东西要接收。我不明白 AsyncTask 是如何工作的,所以我需要帮助,对不起我的英语,谢谢。

最佳答案

如果您想使用 asynctask 并希望在收到任何数据时更新 ListView ,那么您可以在 asynchtask 中使用publishProgress 方法,我发现您已经在使用它了。

您可能只需要添加此函数即可接收进度,并在该函数中您可以更新 ListView 。

 protected void onProgressUpdate(Integer... progress) {
//Update the progress on listview
}

关于java - Android 蓝牙套接字连接使用 AsyncTask 在后台接收数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30378864/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com