android studio 如何每秒自动刷新数据?

How to auto refresh data in android studio every second?

我是 android studio 的新手,我正在制作一个应用程序来获取 thingspeak 中字段的 json,但我不知道如何自动刷新我每秒得到的数据。你能帮帮我吗?




public class MainActivity extends AppCompatActivity {
    private TextView mTextViewResult;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTextViewResult = findViewById(R.id.text_view_result);


        OkHttpClient client = new OkHttpClient();

        // Read field url from thingspeak
        String url = "https://api.thingspeak.com/channels/XXXXXXX/fields/1.json?api_key=XXXXXXXXXXXXX&results=2";

        Request request = new Request.Builder()
                .url(url)
                .build();

        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onResponse(@NonNull okhttp3.Call call, @NonNull Response response) throws IOException {
                if (response.isSuccessful()) {
                       
                       // this is what I want to refresh every second

                        final String myResponse = response.body().string();

                        MainActivity.this.runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                mTextViewResult.setText(myResponse);
                            }
                        });
                    }
                }


          



        });
    }
}

使用倒数计时器。设置定时器1秒,在onFinish方法中调用请求数据。

       new CountDownTimer(1000, 1000) {
            public void onTick(long millisUntilFinished) {
               
            }
            public void onFinish() {
               //Request Data
            }
        }.start();

我终于找到了一个解决方案,我将数据请求放在下面的代码中并且它完美地工作:

final Handler handler = new Handler();
Runnable refresh = new Runnable() {
        @Override
        public void run() {
            // data request
            handler.postDelayed(this, 5000);
        }
    };
handler.postDelayed(refresh, 5000);