Java 如何将数据从线程获取到另一个类
帮助从Java 如何将数据从线程获取到另一个类,java,android,Java,Android,帮助从main activity中的线程t获取数据(tdate) btn_in = (Button) findViewById(R.id.btn_insert); btn_in.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { registerUser(); } });
main activity
中的线程t
获取数据(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();
}
到类注册服务器…(tdate)
我不熟悉android和java
有人帮我学习吗
private void registerUser() {
String datetime = tdate.getText().toString().trim().toLowerCase();
register(datetime);
}
如果线程位于其他Java类中,则可以创建一个新接口,如:
public interface OnTimeReceived {
void onTimeReceived(String time);
}
在MainActivity上,将实现添加到此侦听器,实现该方法,然后在回调中将文本设置为textView
然后在线程上调用“mListener.ontimereved(dateString)”来更新视图
例:
创建thread类时,从构造函数中的活动中为侦听器赋值。如果我理解正确,只需使用适当的参数调用函数本身即可:
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?
}
另一种选择是创建一个类,该类接收数据并具有对主活动的引用。当您完成线程时,调用其中的函数,它的工作就是简单地调用主活动上的函数。可以说,这是一个“接受者”类
此外,你应该避免使用睡眠(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
它干净多了。
让我知道结果如何。要完成其他答案,您可以尝试:
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);
}
请提供更多关于您到底想做什么的信息。我个人更喜欢编写我自己类型的
EventListener
,或者您可以看看,另外我无法从类注册表的线程中获取值tdateTextView tdate=(TextView)findViewById(R.id.date)代码>线程外部。tdate仅在threadok中有作用域谢谢。。。但在这里,我从线程中获取日期和时间。。。我希望在tdate中输出…正如aditya所说,在活动顶部声明textView,如公共类活动。。。文本视图tdate代码>在onCreate方法中执行findView:tdate=(TextView)findViewById(R.id.date)现在,您可以在线程上调用tdate.setText(dateString)代码>
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
// Do something after 1000 ms
}
}, 1000); // specify the waiting time here
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);
}