我需要从Web服务请求数据。我已经实现了以下异步箱来做到这一点:
class LoadTagsTask extends AsyncTask<Void, Void, String> {
private String url = "http://webservice.com/rest/tagsManager/search";
ProgressBar loader;
@Override
protected void onPreExecute() {
loader = (ProgressBar) TextsListActivity.this.findViewById(R.id.textLoadingProgressBar);
loader.setVisibility(TextView.VISIBLE);
}
@Override
protected String doInBackground(Void... params) {
HttpURLConnection c = null;
try {
c = (HttpURLConnection) new URL(url).openConnection();
InputStream in = c.getInputStream();
StringBuilder stringBuffer = new StringBuilder();
final char[] charBuffer = new char[8 * 1024];
BufferedReader reader = new BufferedReader(new InputStreamReader(in), charBuffer.length);
int read;
while ((read = reader.read(charBuffer)) != -1) {
stringBuffer.append(charBuffer, 0, read);
}
reader.close();
return stringBuffer.toString();
} catch (Exception e) {
return "";
} finally {
if (c != null) {
c.disconnect();
}
}
}
@Override
protected void onPostExecute(String tags) {
loader.setVisibility(TextView.GONE);
TextsListActivity.this.showTagsSelectorActivity(tags);
}
}
用AsyncTaskLoader
替换它是有意义的吗?我读到它们可以互换使用,但是AsyncTaskLoader
做得更好。在我的情况下适用吗?
我认为您应该用改造替换AsyncTask
。
它封装了低级逻辑,例如管理线程和http Concection。
使用Raterrofit可以使您的代码清洁器,并允许您仅专注于后端使用的数据。
改造支持:
- 同步,异步和可观察的执行
- 默认与gson集成
- 请求拦截器
- 嘲笑的好测试