Я пытаюсь добавить ProgressDialog
в свою активность, чтобы показать, когда загружается запрос на выставление счетов - поскольку это сетевой запрос, иногда это занимает некоторое время. Я показываю диалоговое окно прогресса, а затем закрываю его, когда сетевой запрос завершен. Однако иногда это занимает ОЧЕНЬ много времени и, кажется, зависает. Если я хочу, чтобы пользователь мог отменить запрос и закрыть диалоговое окно выполнения, как мне добавить эту возможность? Или есть лучший способ справиться с задержкой сетевого запроса?
Вот мой код покупки:
private void MakePurchase(final String s)
{
if (makingPayment) return;
makingPayment = true;
mProgressDialog = new ProgressDialog(DonateActivity.this);
mProgressDialog.setTitle("Google Play Store");
mProgressDialog.setMessage("Loading...");
mProgressDialog.setIndeterminate(false);
mProgressDialog.setCancelable(false);
mProgressDialog.setCanceledOnTouchOutside(false);
mProgressDialog.show();
new Thread(new Runnable() {
public void run() {
ArrayList<String> skuList = new ArrayList<String> ();
skuList.add(s);
Bundle querySkus = new Bundle();
querySkus.putStringArrayList("ITEM_ID_LIST", skuList);
Bundle skuDetails;
try {
//Network request
skuDetails = mService.getSkuDetails(3,
getPackageName(), "inapp", querySkus);
mProgressDialog.dismiss();
int response = skuDetails.getInt("RESPONSE_CODE");
if (response == 0) {
ArrayList<String> responseList
= skuDetails.getStringArrayList("DETAILS_LIST");
for (String thisResponse : responseList) {
JSONObject object = new JSONObject(thisResponse);
String sku = object.getString("productId");
if (sku.equals(s)) {
Bundle buyIntentBundle = mService.getBuyIntent(3, getPackageName(),
sku, "inapp", "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ");
PendingIntent pendingIntent = buyIntentBundle.getParcelable("BUY_INTENT");
startIntentSenderForResult(pendingIntent.getIntentSender(),
1001, new Intent(), Integer.valueOf(0), Integer.valueOf(0),
Integer.valueOf(0));
}
}
}
} catch (RemoteException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
} catch (IntentSender.SendIntentException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}