如何从线程获取数据到另一个类

时间:2018-04-05 08:32:08

标签: java android

帮助从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);
}

3 个答案:

答案 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);
}