【发布时间】:2020-03-15 09:31:40
【问题描述】:
我刚开始构建一个简单的 Android 应用程序,我想在后台线程中发出网络请求,然后使用服务器响应更新主线程(UI 线程)。到目前为止,我使用了AsyncTasks,但未来的实现我想使用reactive Java (RxJava)。我以前从未做过响应式调用,所以我想要一个简单但完整的示例(可观察和观察者创建和订阅),可以在此基础上进一步构建。
我设法将 RxJava 依赖项包含到基本的 Android 项目中,并使用 AsyncTasks 为网络请求编写了一个非常简单的主要活动。现在我尝试用响应式实现来替换 AsyncTask 实现,但陷入了有关 Observable 和 Observer 的所有信息中。我只是不确定最小但完全有效的示例到底需要什么。
在将主要部分转换为反应式实现方面,我真的很感激一些帮助,因为我不知道如何处理从响应字符串生成 Observable 并订阅 Observer。
谢谢。
package com.example.reactiveTest;
import androidx.appcompat.app.AppCompatActivity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private Button btnSend = null;
private TextView result = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.btnSend = findViewById(R.id.button_send);
this.result = findViewById(R.id.result);
}
public void onClickBtnSend(View view) {
new SomeTask().execute("Just some String");
}
class SomeTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... strings) {
// server request returning response String
return response;
}
@Override
protected void onPostExecute(String string) {
// update UI with response String
result.setText(string);
}
}
}
【问题讨论】:
-
这个简短的 article 应该可以帮助您从 asynctask 迁移到 rx。
-
@HusaynHakeem 谢谢,但是
onError、onNext和onComplete方法的区别在哪里?他们到底需要什么?