У меня есть действие, которое ожидает загрузки некоторых данных. Пока данные не были загружены, был показан индикатор выполнения. Когда данные загружаются, изображение исчезает.
У меня есть несколько асинхронных c задач, которые предназначены для:
DummyTask: запустите DownloadTask, затем после выполнения: заполните RecyclerView и скройте индикатор выполнения.
DownloadTask: скачать откуда-нибудь данные. затем верните его.
Однако программа зависает при выполнении второй асинхронной c задачи (DownloadTask).
Я не могу объединить Задачи, как вы предлагаете. Поскольку DummyTask зависит от RecyclerView. DownloadTask предназначен только для скачивания материалов.
Как лучше всего это сделать?
Вот мой код:
public class CardActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_card);
progressBar = (ProgressBar)findViewById(R.id.progress_first);
new DummyTask().execute("https://httpstat.us/200?sleep=10000");
}
public class DummyTask extends AsyncTask<String, Integer, String> {
protected String doInBackground(String... params) {
String param1 = params[0];
// the program is stuck here
String result = new Downloader(param1).Get();
return result;
}
protected void onPostExecute(String result) {
ArrayList<ItemViewModel> exampleList = new ArrayList<>();
for(int i = 0; i <= 5; i++) {
exampleList.add(new ItemViewModel(R.drawable.ic_launcher_background, "aaaa", "bbbb", "1.2"));
}
mRecyclerView = findViewById(R.id.recyclerView);
progressBar.setVisibility(View.GONE);
mRecyclerView.setVisibility(View.VISIBLE);
mRecyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(CardActivity.this);
mAdapter = new ItemViewAdapter(exampleList);
mRecyclerView.setLayoutManager(mLayoutManager);
mRecyclerView.setAdapter(mAdapter);
}
}
public class Downloader{
public String Url;
public Downloader(String url){
Url = url;
}
public String Get(){
try {
return new DownloadTask().execute().get();
} catch (ExecutionException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
return "";
}
public class DownloadTask extends AsyncTask<String, Integer, String> {
public String returned;
protected String doInBackground(String... params) {
String param1 = params[0];
String url = param1;
Response response = null;
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(30, TimeUnit.SECONDS)
.writeTimeout(30, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.build();
Request request = new Request.Builder()
.url(url)
.build();
try {
response = client.newCall(request).execute();
} catch (IOException e) {
e.printStackTrace();
}
String responseBody = "";
try {
responseBody = response.body().string();
} catch (IOException e) {
responseBody = "Error";
};
returned = responseBody;
return responseBody;
}
protected void onPostExecute(String result) {
}
}
}
}