对Rx来说是新手,所以我正在寻找一些帮助将以下AsyncTask转换为Rx,希望所以我可以使用我已经知道的代码更多地将Rx可视化。我发现了一些其他有些相关的SO答案,但很多都没有网络请求,很多人使用不同的运算符来解决不同的问题,所以有点困惑。
继承AsyncTask:
这是我的WhatsTheWeather应用程序的Java代码(包括MainActivity的所有代码):
function makeFunc() {
var name = "Mozilla";
function displayName() {
alert(name);
}
return displayName;
}
var myFunc = makeFunc();
myFunc();
答案 0 :(得分:1)
试试这个。
public void networkCall(final String urls) {
Observable.fromCallable(new Func0<String>() {
@Override
public String call() {
String result = "";
URL url = null;
HttpURLConnection urlConnection = null;
try {
url = new URL(urls);
urlConnection = (HttpURLConnection) url.openConnection();
InputStream inputStream = urlConnection.getInputStream();
InputStreamReader reader = new InputStreamReader(inputStream);
int data = reader.read();
while (data != -1) {
char current = (char) data;
result += current;
data = reader.read();
}
try {
String message = "";
JSONObject jsonObject = new JSONObject(result);
String weatherInfo = jsonObject.getString("weather");
Log.i("Weather content", weatherInfo);
JSONArray arr = new JSONArray(weatherInfo);
for (int i = 0; i < arr.length(); i++) {
JSONObject jsonPart = arr.getJSONObject(i);
String main = "";
String description = "";
main = jsonPart.getString("main");
description = jsonPart.getString("description");
if (main != "" && description != "") {
message += main + ": " + description + "\r\n"; //for a line break
}
}
return message;
} catch (JSONException e) {
Toast.makeText(getApplicationContext(), "Could not find weather", Toast.LENGTH_LONG).show();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<String>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(String message) {
if (message != ""){
resultTextview.setText(message);
} else {
Toast.makeText(getApplicationContext(),"Could not find weather",Toast.LENGTH_LONG).show();
}
}
});
}
但是,我建议一起使用Retrofit和RxJava。
答案 1 :(得分:0)
在整合Retrofit
之前,您应该了解一些事项。
Retrofit
Retrofit2
是您当前应该使用的Retrofit
与RxJava
或RxAndroid
的代码集成
目前(初学者太复杂)GSON
或Jackson
。HttpClient
已弃用,而OkHttp
比[{1}} 1>通常使用的HttpUrlConnection
要快。{/ 1}