我有一个AsyncTask来执行交易,只要用户没有足够的余额就可以从开始开始流程,而不是只是告诉用户你没有足够的余额,它告诉用户并再次尝试,继续这样直到我必须删除应用才能停止
class HttpGetAsyncTaskFirst extends AsyncTask<String, Void, String> {
ObscuredSharedPreferences serve = ObscuredSharedPreferences.getPrefs(PayService.this, "Serve", MODE_PRIVATE);
String merchantId = serve.getString("MerchantId", null);
String encryptedToken = serve.getString("EncryptedToken", null);
String encryptedCustId = serve.getString("EncryptedCustId", null);
String encryptedCurrency = serve.getString("EncryptedCurrency", null);
String encryptedAmount = serve.getString("EncryptedAmount", null);
String encryptedNarration = serve.getString("EncryptedNarration", null);
@Override
protected String doInBackground(String... params) {
URL url;
HttpURLConnection urlConnection = null;
String paramMerchantId = merchantId;
String paramEncryptedToken = encryptedToken;
String paramEncryptedCustId = encryptedCustId;
String paramEncryptedCurrency = encryptedCurrency;
String paramEncryptedAmount = encryptedAmount;
String paramEncryptedNarration = encryptedNarration;
String result = null;
String JsonResponse = null;
BufferedReader reader = null;
try {
url = new URL(Config.PAY_URL_RENEW);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setDoOutput(true);
// is output buffer writter
urlConnection.setRequestMethod("POST");
urlConnection.setRequestProperty("Content-Type", "application/json");
urlConnection.setRequestProperty("Accept", "application/json");
JSONObject jsonParam = new JSONObject();
jsonParam.put("merchantid", paramMerchantId);
jsonParam.put("amount", paramEncryptedAmount);
jsonParam.put("currency", paramEncryptedCurrency);
jsonParam.put("chargetoken", paramEncryptedToken);
jsonParam.put("narration", paramEncryptedNarration);
jsonParam.put("custid", paramEncryptedCustId);
//set headers and method
Writer writer = new BufferedWriter(new OutputStreamWriter(urlConnection.getOutputStream(), "UTF-8"));
writer.write(jsonParam.toString());
System.out.println("input" + jsonParam.toString());
// json data
writer.close();
InputStream inputStream = urlConnection.getInputStream();
System.out.println("input" + inputStream );
//input stream
StringBuffer buffer = new StringBuffer();
if (inputStream == null) {
// Nothing to do.
return null;
}
reader = new BufferedReader(new InputStreamReader(inputStream));
String inputLine;
while ((inputLine = reader.readLine()) != null)
buffer.append(inputLine + "\n");
if (buffer.length() == 0) {
// Stream was empty. No point in parsing.
return null;
}
JsonResponse = buffer.toString();
System.out.println("Response" + JsonResponse);
//response data
return JsonResponse;
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
} finally {
if (urlConnection != null) {
urlConnection.disconnect();
}
if (reader != null) {
try {
reader.close();
} catch (final IOException e) {
}
}
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
ObscuredSharedPreferences pref = ObscuredSharedPreferences.getPrefs(PayService.this, "MyPref", MODE_PRIVATE);
final String userName = pref.getString("Username", null);
final String email = pref.getString("Email", null);
final String name = pref.getString("Name", null);
String space=" ";
String breaking = "\n";
final String greet = getString(R.string.hi)+space+name+breaking+breaking;
final String first = getString(R.string.first);
final String insufficient = getString(R.string.insufficient);
final String noReason = getString(R.string.no_reason);
final ObscuredSharedPreferences.Editor editor = pref.edit();
Firebase pay = new Firebase(Config.FIREBASE_URL);
JSONObject ResponseObject = null;
String str = null;
String token = null;
String message= null;
String reference= null;
try {
ResponseObject = new JSONObject(result);
str = ResponseObject.getJSONObject("data").getString("responsecode");
token = ResponseObject.getJSONObject("data").getString("responsetoken");
message= ResponseObject.getJSONObject("data").getString("responsemessage");
reference= ResponseObject.getJSONObject("data").getString("transactionreference");
} catch (JSONException e) {
e.printStackTrace();
}
if ("00".equalsIgnoreCase(str)) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
String currentDateAndTime = sdf.format(new Date());
String body = greet+first+reference;
Calendar c = Calendar.getInstance();
c.add(Calendar.MINUTE, 10);
Date resultdate = new Date(c.getTimeInMillis());
String dateInString = sdf.format(resultdate);
System.out.println("String date:"+dateInString);
Map<String, Object> update = new HashMap<String, Object>();
update.put(userName + "/subscription",Config.SUB_YES);
update.put(userName + "/renewSub", Config.RENEW_YES);
update.put(userName + "/activeCard",Config.CARD_ACTIVE);
update.put(userName + "/lastSubscription", currentDateAndTime);
update.put(userName + "/endSubscription", dateInString);
update.put(userName + "/serviceRun",currentDateAndTime);
pay.updateChildren(update);
editor.remove("Subscription");
editor.remove("Renew");
editor.remove("ActiveCard");
editor.putString("Subscription", Config.SUB_YES);
editor.putString("Renew", Config.RENEW_YES);
editor.putString("ActiveCard", Config.CARD_ACTIVE);
editor.apply();
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
manager.cancel(pendingIntent);
manager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(),
AlarmManager.INTERVAL_FIFTEEN_MINUTES, pendingIntent);
ObscuredSharedPreferences serve = ObscuredSharedPreferences.getPrefs(PayService.this, "Serve", MODE_PRIVATE);
ObscuredSharedPreferences.Editor serveEdit = serve.edit();
serveEdit.clear();
serveEdit.apply();
Mail.connectWithHttpGetEmail(email, body);
}else if("5".equalsIgnoreCase(str)){
String body = greet+insufficient;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
String currentDateAndTime = sdf.format(new Date());
Map<String, Object> update = new HashMap<String, Object>();
update.put(userName + "/subscription", Config.SUB_NO);
update.put(userName + "/serviceRun",currentDateAndTime);
pay.updateChildren(update);
editor.remove("Subscription");
editor.putString("Subscription", Config.SUB_NO);
editor.apply();
Mail.connectWithHttpGetEmail(email, body);
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
manager.cancel(pendingIntent);
manager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(),
AlarmManager.INTERVAL_HALF_HOUR, pendingIntent);
ObscuredSharedPreferences serve = ObscuredSharedPreferences.getPrefs(PayService.this, "Serve", MODE_PRIVATE);
ObscuredSharedPreferences.Editor serveEdit = serve.edit();
serveEdit.clear();
serveEdit.apply();
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
}else{
String body = greet+noReason;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
String currentDateAndTime = sdf.format(new Date());
Map<String, Object> update = new HashMap<String, Object>();
update.put(userName + "/subscription", Config.SUB_NO);
update.put(userName + "/serviceRun",currentDateAndTime);
pay.updateChildren(update);
editor.remove("Subscription");
editor.putString("Subscription", Config.SUB_NO);
editor.apply();
Mail.connectWithHttpGetEmail(email, body);
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
manager.cancel(pendingIntent);
manager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(),
AlarmManager.INTERVAL_HALF_HOUR, pendingIntent);
ObscuredSharedPreferences serve = ObscuredSharedPreferences.getPrefs(PayService.this, "Serve", MODE_PRIVATE);
ObscuredSharedPreferences.Editor serveEdit = serve.edit();
serveEdit.clear();
serveEdit.apply();
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
}
}
}