Мне нужно вставить большие данные на нашем SQLiteDatabase
из ответа нашего сервера. Но до сих пор я все еще путаюсь с AsyncTask()
и хочу получить разъяснения по этому поводу. Вот мой полный код использования AsyncTask()
. Я использую библиотеку AndroidNetworking
для HTTP-запроса
class ProgressAsync extends AsyncTask<String, String, Boolean> {
boolean result = false;
ProgressDialog progressDialog;
@Override
protected void onPreExecute() {
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
loadingDialog = new LoadingDialog();
//dialogLoading.setTargetFragment(this, 1);
FragmentManager fragmentManager = getSupportFragmentManager();
loadingDialog.show(fragmentManager, "Dialog_Loading");
}
});
super.onPreExecute();
}
@Override
protected Boolean doInBackground(String... params) {
try
JSONObject JSONparams = new JSONObject();
try {
JSONparams.put("a", "1");
JSONparams.put("b", "1");
JSONparams.put("c", "1");
JSONparams.put("d", "1");
} catch (Throwable e) {
e.printStackTrace();
}
OkHttpClient okHttpClient = new OkHttpClient().newBuilder().connectTimeout(15, TimeUnit.SECONDS).readTimeout(15, TimeUnit.SECONDS).writeTimeout(15, TimeUnit.SECONDS).build();
AndroidNetworking.initialize(getApplicationContext(), okHttpClient);
AndroidNetworking.get(url)
.setPriority(Priority.HIGH).build()
.getAsJSONArray(new JSONArrayRequestListener() {
@Override
public void onResponse(JSONArray response) {
Log.e("Response", String.valueOf(response));
try {
for (int i = 0; i < response.length(); i++) {
JSONObject objUsers = response.getJSONObject(i);
final String user_id = objUsers.getString("id");
final String issued_company_id = objUsers.getString("subcompany_id");
final String position = objUsers.getString("route_id");
final String card_id = objUsers.getString("route_name");
KMpost kmpost = new KMpost();
kmpost.setId(user_id);
kmpost.setSubcompany_id(issued_company_id);
kmpost.setRoute_id(position);
kmpost.setRoute_name(card_id);
MainActivity.appDatabase.dao2().insertAllkm(kmpost);
}
if (MainActivity.appDatabase.isOpen()){
MainActivity.appDatabase.close();
}
result = true;
Log.e("Status", String.valueOf(a));
} catch (Throwable e) {
e.printStackTrace();
}
}
@Override
public void onError(ANError anError) {
Log.e("anError", String.valueOf(anError.getErrorCode()));
a = false;
}
});
} catch (Throwable throwable) {
throwable.printStackTrace();
}
return false;
}
@Override
protected void onPostExecute(Boolean aBoolean) {
super.onPostExecute(aBoolean);
Log.e("Logsssssssssss", "LOgssssssssss");
Thread thread = new Thread() {
@Override
public void run() {
try {
while (!result) {
//Thread.sleep(1000);
}
loadingDialog.dismiss();
}catch (Throwable e){
e.printStackTrace();
}
}
};
thread.start();
}
}
Вопрос 1: Почему в журнале onPostExecute()
сначала показывается, а doInBackground()
еще не закончено? И как я могу это исправить?
Вопрос 2: действительно ли помогает цикл while()
? Или это просто решение для помощи при помощи бинтов? *
Вопрос 3. Как избежать задержки / зависания при загрузке анимации ProgressDialog
?