有, 这是我的代码结构:
MainActivity:
public class PureDataActivity extends Activity {
private TextView statusView, logView;
.....
Connection myconnection = new Connection();
myconnection.download()//I implement this in an AsyncTask, which I didn't type here
}
类连接:(这是另一个文件)
Public class Connection{
private void download();
//This method download some data from server for few minutes.
}
问题是如何使用一些数据速率信息每隔几秒更新UI中的textview?因为从Connection类我无法访问UI。
我知道在AsyncTask中我可以使用updateProgress来访问UI,但它在download()方法之外。如何在download()运行时访问UI?
感谢。
答案 0 :(得分:1)
看看这个Handler。这将帮助你。此外,他们提供的bluetooth chat示例应该可以让您了解应该做些什么。
您基本上将创建一个处理程序,您将使用该处理程序将您的信息传递回ui活动。这将有助于处理所有消息。
答案 1 :(得分:0)
在AsyncTask中重写的runInBackgroundThread方法中,调用publishProgress。然后,您的主要线程将调用被覆盖的onProgressUpdate(稍后),这意味着您可以更新UI。
这是基础,但是通过网络连接,您可能有几种方法来设置连接,然后1个方法调用阻塞直到所有数据都被下载,这意味着您无法定期发布进度更新数据正在下载。
答案 2 :(得分:0)
您可以使用简单的回调。下面是Activity类实现回调的示例,但如果您愿意,可以拥有自己的对象。
public interface ConnectionCallback {
void doYourStuff();
}
public class PureDataActivity extends Activity implements ConnectionCallback {
private TextView statusView, logView;
.....
Connection myconnection = new Connection(this); // <-- this is where you pass the callback
myconnection.download()//I implement this in an AsyncTask, which I didn't type here
}
@Override
public void doYourStuff() {
// do what you need to do on your TextView
}
}
Public class Connection{
private final ConnectionCallback connectionCallback;
public Connection(final ConnectionCallback connectionCallback) {
this.connectionCallback = connectionCallback ;
}
private void download() {
//This method download some data from server for few minutes.
// when you want to update your UI:
connectionCallback.doYourStuff();
//...
}
}