我怎么能在更新结束时做什么?

时间:2015-10-10 15:23:19

标签: android okhttp

sink.close();之后我的代码和操作应该更改textview的文本,但它不会发生。为什么呢?

protected void runNet() throws IOException {
        try{
        final OkHttpClient client = new OkHttpClient();
        final Request request = new Request.Builder()
                .url("http://uprojects.pl/radiowezel/questions.db")
                .build();
        Response response = client.newCall(request).execute();
            QuestionsDB db = new QuestionsDB(context);
        File downloadedFile = new File(context.getDatabasePath("questions.db"), "");

        BufferedSink sink = Okio.buffer(Okio.sink(downloadedFile));
        sink.writeAll(response.body().source());

        sink.close();
        status.setText("Baza została zaktualizowana");


    }catch(UnknownHostException e){
        status.setText ("Brak połączenia przy pobieraniu");
    }
}

1 个答案:

答案 0 :(得分:1)

您正在尝试从Android中不允许的后台线程更新UI,您应该从主线程更新它。

您可以使用runOnUiThread方法(Activity类的一部分)

private void updateUi(final String string) {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            status.setText(string);
        }
    });
}

你可以使用follow方法,从后台线程调用它:

updateUi("Baza została zaktualizowana");

或者使用具有在主线程上执行后运行的回调的AsyncTask - AsyncTask Android example

您也可以使用Handler - Running code in main thread from another thread