帮助从t
中的帖子main activity
获取数据(tdate)...
btn_in = (Button) findViewById(R.id.btn_insert);
btn_in.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
registerUser();
}
});
Thread t = new Thread() {
@Override
public void run() {
try {
while (!isInterrupted()) {
Thread.sleep(1000);
runOnUiThread(new Runnable() {
@Override
public void run() {
TextView tdate = (TextView) findViewById(R.id.date);
long date = System.currentTimeMillis();
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd yyyy\nhh-mm-ss a");
String dateString = sdf.format(date);
tdate.setText(dateString);
}
});
}
} catch (InterruptedException e) {
}
}
};
t.start();
}
到类registerUser ...(tdate)
我是android和java的新手......
任何人都可以帮助我学习。private void registerUser() {
String datetime = tdate.getText().toString().trim().toLowerCase();
register(datetime);
}
答案 0 :(得分:1)
如果您的线程在其他Java类中,您可以创建一个新的接口,如:
public interface OnTimeReceived {
void onTimeReceived(String time);
}
在MainActivity上,将实现添加到此侦听器,实现该方法,然后将文本设置为回调中的textView。
然后在线程上调用“mListener.onTimeReceived(dateString)”来更新你的视图。
前:
public class MainActivity implements OnTimeReceived {
...
@Override
public void onTimeReceived(String date) {
mTextView.setText(date);
}
...
}
创建线程类时,请在构造函数中为您的活动提供监听器。
答案 1 :(得分:0)
如果我正确理解你,只需用适当的参数调用函数本身:
public void run() {
tdate = (TextView) findViewById(R.id.date);
date = System.currentTimeMillis();
sdf = new SimpleDateFormat("MMM dd yyyy\nhh-mm-ss a");
dateString = sdf.format(date);
tdate.setText(dateString);
registerUser(datetime); // <- Why can't you just do this?
}
registerUser()应该是这样的:
private void registerUser(String datetime) {
register(datetime);
}
另一种选择是创建一个接收数据的类并具有对主活动的引用。完成线程后,调用其中的函数,其作用是简单地调用Main Activity上的函数。可以这么说,它是一个“接收器”类。
另外,你应该避免使用睡眠(1000)。 请改用:
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
// Do something after 1000 ms
}
}, 1000); // specify the waiting time here
它更干净。 让我知道它是如何运作的。
答案 2 :(得分:0)
要完成其他答案,您可以尝试:
TextView tdate;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tdate = (TextView)findViewById(R.id.date);
btn_in = (Button) findViewById(R.id.btn_insert);
btn_in.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
registerUser();
}
});
createThread();
}
private void createThread(){
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
run();
}
},1000);
}
private void run(){
long date = System.currentTimeMillis();
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd yyyy\nhh-mm-ss a");
String dateString = sdf.format(date);
tdate.setText(dateString);
}