آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

استفاده بیش از حد از try-catch و چند سوال دیگه

Reza AF  12 سال پیش  12 سال پیش
+1 0

با سلام
پرداخت درون برنامه ای بازار خیلی وقته منو مشغول کرده،اما هنوزم نتونستم درستش کنم، خیلی کرش داره شایدم من خیلی حساس شدم .
من توی صفحه پرداختم بجای دکمه از یه دیالوگ استفاده کردم که از کاربر میپرسم میخاد پرداخت انجام بشه یا نه، اگه تایید بزنه به بازار میره و مشکلی نیست اما اگه کنسل کنه کرش میکنه، و کلا برنامه بسته میشه.
این خطا رو میده :
[XML]
06-23 22:14:00.402: E/AndroidRuntime(1719): FATAL EXCEPTION: Thread-144

[/XML]
و چند تا خط از فایل IabHelper (یکی از فایلهایی که توی پوشه util قرار داره) رو نشون میده. ازونجایی که این فایل بسیار خفنه و من هیچی ازش نمیفهمم! اومدم همه اون خطهایی که خطا رخ داده بود رو یکی یه دونه try-catch  گذاشتم! بنظرم خودم غیر اصولیه اما حداقلش اینه دیگه کرش نمیکنه.
حالا سوالم اینجاست،
1-کسی میدونه مشکل چطور رفع میشه ، منظورم بدون استفاده از try-catch ؟
2- این همه try-catch  مشکلی پیش نمیاره؟
3-اصلا دست بردن توی فایلهای بازار کار درستیه؟

0 0
بهتره تا میتونید از try-catch استفاده نکنید جاهایی که لازم بوده خودشون گذاشتن.این فایل ها رو بازار دقیقا از سورسی که گوگل پلی گذاشته، کپی کرده (فقط دو تا خط شو تغییر داده).اگه احتیاج بشه باید دست توی این فایلها برد.باز شدن و کنسل شدن دیالوگ نباید باعث کرش برنامه بشه .این همه try-catch مشکل پیش میاره.اگه ندونید فلان خط کد چه کاری رو انجام میده نباید براش try-catch بذارید. (12 سال پیش)
0 0
من هم در یکی از برنامه هام دقیقا همین کار را انجام دادم ولی کرش نکرده. بهتر هست کدت بزاری تا بررسی بشه (12 سال پیش)
0 0
من هم در یکی از برنامه هام دقیقا همین کار را انجام دادم ولی کرش نکرده. بهتر هست کدت بزاری تا بررسی بشه (12 سال پیش)
+1 0
استفاده از try catch ضرری نداره ، هر وقت احساس کردید ممکنه خطایی اتفاق بیافته باید مدیریت Handle بشه ، اما در مورد بازار و سورس کدش ، بازار سورس کد های تک خطی برای فراخوانی داده ، سورس کد کامل نیست ، قطعا به Catch کردن خطا نیاز داره (12 سال پیش)
0 0
من پرداخت درون برنامه ای توی برنامم پیاده سازی کردم هیچ crach ای رخ نمیده.مثل ساعت هم کار می کنه.هیچ try catch ای هم بهش اضافه نکردم.ولی همون طور که عرض کردم اگه احتیاج بشه باید دست توی این فایلها برد و try catch اضافه کرد. ولی تا ندونید اون خط کدی که باعث خطا شده کارش چی هست اگه براش try catch اضافه کنید فقط جلوی کرش کردن برنامه رو میگیرید ولی باعث ایجاد خطا در جاهای دیگر برنامه میشه و مجبورید باز هم try catch اضافه کنید.دقیقا مثل همین کاری که شما کردید. (12 سال پیش)
0 0
من نمیدونم شما چطور خطا نمیگیرید؟ الان حتی مثال بازار هم در شرایطی کرش داره! خوش بحال شما (12 سال پیش)
0 0
خود مثالش که چند تا خطا داره.یکیش اینه که اگه بازار نصب نباشه کرش میکنه.باید برطرف شون کنید. (12 سال پیش)
0 0
برای منم کرش می داد.خطاهاشو برطرف کردم ولی try catch نذاشتم. (12 سال پیش)
0 0
نه منظور ما اضافه کردن try catch در کتابخانه و فایل های inAppBilling بازار نیست ، منظورمون تو فراخوانی متد ها هست (12 سال پیش)
0 0
ok مجتبی جان. ولی ایشون نوشته که برای تمام خطاهایی که توی فایل IabHelper (یکی از فایلهایی که توی پوشه util قرار داره) وجود داره ،try-catch گذاشته. فایل IabHelper یکی از فایلهای inAppBilling بازار هست. (12 سال پیش)
0 0
اوه اوه ! ، نیازی نیست رضا جان ، کارتون خیلی گره می خوره (12 سال پیش)
 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
Reza AF  12 سال پیش
0 0


  protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

//**************************** ghesmate on create pardakht **********************
String base64EncodedPublicKey = "...";

mHelper = new IabHelper(this, base64EncodedPublicKey);

Log.d(TAG, "Starting setup.");
try {
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {

public void onIabSetupFinished(IabResult result) {
Log.d(TAG, "Setup finished.");

if ( !result.isSuccess()) {
// Oh noes, there was a problem.
Log.d(TAG, "Problem setting up In-app Billing: " + result);
}
// Hooray, IAB is fully set up!
mHelper.queryInventoryAsync(mGotInventoryListener);
}
});
}
catch (Exception ee) {}

pardakht_dialog();

}

این کد صفحه پرداخته، که دقیقا همون کد بازاره فقط یه دیالوگ اضافه شده. فراخوانی خرید هم از طریق همین دیالوگه.

البته یه try-catch خودم اضافه کردم.

این هم کد دیالوگ :

 
private void pardakht_dialog() {
final Dialog mydialog = new Dialog(Pardakht.this);

mydialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
mydialog.setContentView(R.layout.pardakht_popup);
Button pardakht = (Button) mydialog.findViewById(R.id.btn_pardakht_ok);
Button cancel = (Button) mydialog.findViewById(R.id.btn_pardakht_cancel);
mydialog.show();
pardakht.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
try {
mHelper.launchPurchaseFlow(Pardakht.this, SKU_PREMIUM, RC_REQUEST, purchaseFinishedListener);
}
catch (Exception e) {
Toast.makeText(G.context,"Err", Toast.LENGTH_LONG).show();
}
}
});

cancel.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
try {
mydialog.dismiss();
if (mHelper != null) {
mHelper.dispose();
}

mHelper = null;
Pardakht.this.finish();
}
catch (Exception e) {

}

}
});



من میخاستم وقتی کاربر روی یک ایتم لیست کلیک کرد همونجا پنجره پرداخت باز بشه و نیازی نباشه بره یه صفحه دیگه و اونجا دکمه پرداخت رو بزنه. واسه همین اکتیویتی پرداختم رو بدون فایل xml ساختم ، یعنی بهش layout اختصاص ندادم. و فقط یه دیالوگ توش گذاشتم. وقتی کاربر روی لیست کلیک میکنه اکتیوتی پرداخت فراخوانی میشه ولی چون هیچ layout ی نداره، صفحه تغییر نمیکنه و کاربر حس میکنه هنوز توی لیست مونده. و فقط یه دیالوگ باز میشه که کدهاشو واستون گذاشتم. حالا همینجا اگه کاربر کنسل کنه برنامه کرش میکنه. البته نکته جالبش اینجاست که فقط وقتی به انترنت وصل باشه کرش میکنه. و اگه اینترنت قطع باشه همه چی درست کار میکنه

 

 

0 0
روی کدوم خط کرش می کنه؟ لطفا خطای logcat رو بزارید. (12 سال پیش)
0 0
اگه توی رویداد cancel فقط کد mydialog.dismiss(); رو بزارید باید کار کنه.دیگه نیازی به اون کدها نیست.شما قبل از نمایش دیالوگ به mHelper کاری نداشتید که بخواهید موقع cancel شدن دیالوگ مقدارش رو null بزارید یا هر کار دیگه ای روش انجام بدید. (12 سال پیش)
پاسخ به سوال 
Reza AF  12 سال پیش
0 0

همچنان امیدوار به تایید!

+1 0
من و بازار ! یه روز آفتابی (12 سال پیش)
0 0
فکر کنم کلا با شما مشکل دارن D: (12 سال پیش)
0 0
دست رو دلم نذار (12 سال پیش)
0 0
هه چه آفتاب بدی :). A.L.U به چه چیزایی فکر میکنیاا :) (12 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .