【发布时间】:2021-08-15 17:11:44
【问题描述】:
我已将 PAYTM ALL IN ONE SDK 集成到我的 Android 应用程序中。它在调试模式下工作正常,但在发布模式下它会抛出异常。我缺少一件小事,因为它在调试模式下工作得非常好,但是将其更改为释放它会引发异常。
存款活动
public class DepositActivity extends AppCompatActivity {
private TextView mmbalance, mgateway, mtext_imp3;
private DatabaseReference mmRef, mmtRef, mmbRef, mmcRef, mmcrRef, mmiRef, mmdRef, mmopRef, mmdbRef, yesRefty3, mmRefuc;
DatabaseReference databaseReference, tdatabaseReference, yesRef, mmRefu, mmRefr;
private ImageView mdep_back;
public EditText mtodepo;
private ConstraintLayout mcons_imp3;
private String TAG ="DepositActivity";
private ProgressBar progressBar;
private String midString="MY MERCHANT ID I HAVE HIDED", txnAmountString="", orderIdString="", txnTokenString="";
private Integer ActivityRequestCode = 2;
public CardView depobtn, depobtn2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_deposit);
mtodepo=(EditText)findViewById(R.id.amountdepo);
depobtn=(CardView) findViewById(R.id.depositbtn);
depobtn2=(CardView) findViewById(R.id.depositbtn2);
String mydep = mtodepo.getText().toString();
mmbalance = (TextView) findViewById(R.id.dbalance);
mgateway = (TextView) findViewById(R.id.gateway);
mcons_imp3 = findViewById(R.id.cons_imp3);
mtext_imp3 = findViewById(R.id.text_imp3);
progressBar = (ProgressBar) findViewById(R.id.progressBar);
Calendar c = Calendar.getInstance();
SimpleDateFormat df = new SimpleDateFormat("ddMMyyyy");
String date = df.format(c.getTime());
Random rand = new Random();
int min =1000, max= 9999;
// nextInt as provided by Random is exclusive of the top value so you need to add 1
int randomNum = rand.nextInt((max - min) + 1) + min;
orderIdString = date+String.valueOf(randomNum);
depobtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
txnAmountString = mtodepo.getText().toString();
String errors = "";
if(orderIdString.equalsIgnoreCase("")){
errors ="Enter valid Order ID here\n";
Toast.makeText(DepositActivity.this, errors, Toast.LENGTH_SHORT).show();
}else
if(txnAmountString.equalsIgnoreCase("")){
errors ="Enter valid Amount here\n";
Toast.makeText(DepositActivity.this, errors, Toast.LENGTH_SHORT).show();
}else{
int amountff = Math.round(Float.parseFloat(txnAmountString));
if (amountff <= 50000) {
if (amountff > 99) {
getToken();
} else {
Toast.makeText(DepositActivity.this, "Minimum amount > 100", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(DepositActivity.this, "Amount must be smaller than 50000", Toast.LENGTH_SHORT).show();
}
}
}
});
}
private void getToken(){
Log.e(TAG, " get token start");
progressBar.setVisibility(View.VISIBLE);
ServiceWrapper serviceWrapper = new ServiceWrapper(null);
Call<Token_Res> call = serviceWrapper.getTokenCall("12345", midString, orderIdString, txnAmountString);
call.enqueue(new Callback<Token_Res>() {
@Override
public void onResponse(Call<Token_Res> call, Response<Token_Res> response) {
Log.e(TAG, " respo "+ response.isSuccessful() );
progressBar.setVisibility(View.GONE);
try {
if (response.isSuccessful() && response.body()!=null){
if (response.body().getBody().getTxnToken()!="") {
Log.e(TAG, " transaction token : "+response.body().getBody().getTxnToken());
startPaytmPayment(response.body().getBody().getTxnToken());
}else {
Log.e(TAG, " Token status false");
}
}
}catch (Exception e){
Log.e(TAG, " error in Token Res "+e.toString());
}
}
@Override
public void onFailure(Call<Token_Res> call, Throwable t) {
progressBar.setVisibility(View.GONE);
Log.e(TAG, " response error "+t.toString());
}
});
}
public void startPaytmPayment (String token){
txnTokenString = token;
// for test mode use it
// String host = "https://securegw-stage.paytm.in/";
// for production mode use it
String host = "https://securegw.paytm.in/";
String orderDetails = "MID: " + midString + ", OrderId: " + orderIdString + ", TxnToken: " + txnTokenString
+ ", Amount: " + txnAmountString;
//Log.e(TAG, "order details "+ orderDetails);
String callBackUrl = host + "theia/paytmCallback?ORDER_ID="+orderIdString;
Log.e(TAG, " callback URL "+callBackUrl);
PaytmOrder paytmOrder = new PaytmOrder(orderIdString, midString, txnTokenString, txnAmountString, callBackUrl);
TransactionManager transactionManager = new TransactionManager(paytmOrder, new PaytmPaymentTransactionCallback(){
@Override
public void onTransactionResponse(Bundle bundle) {
}
@Override
public void networkNotAvailable() {
Log.e(TAG, "network not available ");
}
@Override
public void onErrorProceed(String s) {
Log.e(TAG, " onErrorProcess "+s.toString());
}
@Override
public void clientAuthenticationFailed(String s) {
Log.e(TAG, "Clientauth "+s);
}
@Override
public void someUIErrorOccurred(String s) {
Log.e(TAG, " UI error "+s);
}
@Override
public void onErrorLoadingWebPage(int i, String s, String s1) {
Log.e(TAG, " error loading web "+s+"--"+s1);
}
@Override
public void onBackPressedCancelTransaction() {
Log.e(TAG, "backPress ");
}
@Override
public void onTransactionCancel(String s, Bundle bundle) {
Log.e(TAG, " transaction cancel "+s);
}
});
transactionManager.setShowPaymentUrl(host + "theia/api/v1/showPaymentPage");
transactionManager.startTransaction(this, ActivityRequestCode);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.e(TAG ," result code "+resultCode);
// -1 means successful // 0 means failed
// one error is - nativeSdkForMerchantMessage : networkError
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == ActivityRequestCode && data != null) {
Bundle bundle = data.getExtras();
if (bundle != null) {
for (String key : bundle.keySet()) {
Log.e(TAG, key + " : " + (bundle.get(key) != null ? bundle.get(key) : "NULL"));
}
}
/*Log.e(TAG, " data "+ data.getStringExtra("nativeSdkForMerchantMessage"));
Log.e(TAG, " data response - "+data.getStringExtra("response"));*/
Toast.makeText(DepositActivity.this, "Payment Cancelled", Toast.LENGTH_LONG).show();
/*
data response - {"BANKNAME":"WALLET","BANKTXNID":"1395841115",
"CHECKSUMHASH":"7jRCFIk6eRmrep+IhnmQrlrL43KSCSXrmMP5pH0hekXaaxjt3MEgd1N9mLtWyu4VwpWexHOILCTAhybOo5EVDmAEV33rg2VAS/p0PXdk\u003d",
"CURRENCY":"INR","GATEWAYNAME":"WALLET","MID":"EAcR4116","ORDERID":"100620202152",
"PAYMENTMODE":"PPI","RESPCODE":"01","RESPMSG":"Txn Success","STATUS":"TXN_SUCCESS",
"TXNAMOUNT":"2.00","TXNDATE":"2020-06-10 16:57:45.0","TXNID":"202006101112128001101683631290118"}
*/
/*Toast.makeText(this, data.getStringExtra("nativeSdkForMerchantMessage")
+ data.getStringExtra("response"), Toast.LENGTH_SHORT).show();*/
}else{
/*Log.e(TAG, " payment failed");*/
Toast.makeText(DepositActivity.this, "Payment Failed", Toast.LENGTH_LONG).show();
}
}
public static boolean isConnectionAvailable(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager != null) {
NetworkInfo netInfo = connectivityManager.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnected()
&& netInfo.isConnectedOrConnecting()
&& netInfo.isAvailable()) {
return true;
}
}
return false;
}
}
ServiceWrapper
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.util.concurrent.TimeUnit;
import okhttp3.Interceptor;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.RequestBody;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Call;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class ServiceWrapper {
private ServiceInterface mServiceInterface;
public ServiceWrapper(Interceptor mInterceptorheader) {
mServiceInterface = getRetrofit(mInterceptorheader).create(ServiceInterface.class);
}
public Retrofit getRetrofit(Interceptor mInterceptorheader) {
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient mOkHttpClient = null;
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.connectTimeout(1201, TimeUnit.SECONDS);
builder.readTimeout(901, TimeUnit.SECONDS);
if (BuildConfig.DEBUG) {
// HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
builder.addInterceptor(loggingInterceptor);
}
mOkHttpClient = builder.build();
Gson gson = new GsonBuilder().setLenient().create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://mywebsitei_i_have_hided.com/")
.addConverterFactory(GsonConverterFactory.create(gson))
.client(mOkHttpClient)
.build();
return retrofit;
}
public Call<Token_Res> getTokenCall(String code, String mid, String order_id, String amount) {
return mServiceInterface.generateTokenCall(
convertPlainString(code), convertPlainString(mid), convertPlainString(order_id)
, convertPlainString(amount));
}
// convert aa param into plain text
public RequestBody convertPlainString(String data){
RequestBody plainString = RequestBody.create(MediaType.parse("text/plain"), data);
return plainString;
}
}
【问题讨论】:
-
您在 live paytm 中遇到了哪些异常?
-
存款活动 > private void getToken() > catch (Exception e){ Log.e(TAG, "error in Token Res "+e.toString());这个。
-
Test 和 Live Paytm 都在调试模式下工作,但在发布版本中不工作
-
你在这次捕获中得到了什么。 e.tostring 中有什么
-
这是在 catch e.tostring - java.lang.NullPointerException: throw with null exception
标签: java android android-studio paytm