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

مشکل درون پرداخت کافه بازار

Vampire  11 سال پیش  11 سال پیش
0 0

سلام ، من تا جایی که جستجو کردم چند تاپیک مشابه با مشکل خودم پیدا کردم ولی اونها هم به نتیجه نرسیدن متاسفانه،

مشکل اینجاست که گاهی اوقات که روی دکمه آپگرید کلیک میشه، این ارور در لاگ ثبت میشه :

 java.lang.IllegalStateException: Can't start async operation (launchPurchaseFlow) because another async operation(refresh inventory) is in progress.

لازم به ذکره متد on destroy رو قرار دادم و اتصال رو هم با try گذاشتم ولی همچنان مشکل برطرف نشده

+1 0
وقتی وارد کلاس پرداخت می شوید همان اول یک دیالوگ قرار دهید تا برنامه برای اتصال به بازار آماده شود . به پروژه آموزشی بنده مراجعه کنید (11 سال پیش)
0 0
پروژه تون رو دیدم ، اون مشکل با flagEndAsync کردن helper حل شد حامد جان، یه مشکل دیگه هم داشتم. من الان دقیقا از کد های خود بازار استفاده کردم ، میخوام پاسخ دریافتی رو بررسی کنم باید روی کدوم بخش سوئیچ کنم؟ (11 سال پیش)
+1 0
منظورتون در API توسعه دهندگان بازاره یا در برنامه Trivial Drive ؟ (11 سال پیش)
0 0
این بود منظورم : لینک کجای کد های نمونه ی خود بازار باید تغییر پیدا کنه؟ لینک (11 سال پیش)
0 0
ببخشید میشه بگید چجوری helper رو flagEndAsync کردید.چون من همین خطا رو دارم.ممنون میشم راهنمایی کنید (11 سال پیش)
0 0
ببخشید میشه بگید چجوری helper رو flagEndAsync کردید.چون من همین خطا رو دارم.ممنون میشم راهنمایی کنید (11 سال پیش)
+1 0
if (mHelper != null)mHelper.flagEndAsync(); (11 سال پیش)
0 0
کجای کد باید این خط رو اضافه کرد (11 سال پیش)
0 0
کجای کد باید این خط رو اضافه کرد (11 سال پیش)
+1 0
باید روی کلیک لیسنر دکمه ارتقا قرار دهید. (11 سال پیش)
0 0
ببخشید هر کاری میکنم خطا میده من کد کلیک لیسنرم رو میذارم ImageView btnPurchaseGP = (ImageView) findViewById(R.id.btnPurchaseGP); btnPurchaseGP.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (HelperIAP.helperIAPIsSetup) { HelperIAP.iabHelper.launchPurchaseFlow(BookxActivity.this, SKU_PREMIUM, 0, onIabPurchaseFinished); } } }); } (11 سال پیش)
0 0
چه خطایی ؟ قبل از if (HelperIAP.helperIAPIsSetup) کدی که دادم رو قرار دادید ؟ (11 سال پیش)
0 0
یه سری خطای درون برنامه هست که با پابلیک کردنflagEndAsync حل میشه و همینطور کد به این صورت در میاد: if (HelperIAP.iabHelper != null) HelperIAP.iabHelper.flagEndAsync(); if (HelperIAP.helperIAPIsSetup) { اما بازم برنامه کرش میکنه (11 سال پیش)
+1 0
متن اروری که میده رو بزارین دوست عزیز. (11 سال پیش)
0 0
06-18 15:32:12.962: E/AndroidRuntime(2866): java.lang.IllegalStateException: Can't start async operation (launchPurchaseFlow) because another async operation(refresh inventory) is in progress. (11 سال پیش)
 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
حامد  11 سال پیش
+3 0

شما باید بخش پیاده سازی API   را مطالعه بفرمایید

پاسخ برگستی در قالب یک json به متد onActivityResult برگشت داده می شود:

قبلا سیستم محصولات مصرفی را از روی این مستندات پیاده سازی کرده بودم . شاید بدردت بخوره :

 public class API extends Activity {

Button kharid;
Button masraf;
TextView coin_txt;
int Coin = 0;
IInAppBillingService mService;
Thread thread;
Bundle buyIntentBundle;
String token;
String sharedKey;
SharedPreferences prefs;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.me);
coin_txt = (TextView) findViewById(R.id.coin);
kharid = (Button) findViewById(R.id.kharid);
masraf = (Button) findViewById(R.id.masraf);

//retrieve Coin
prefs = getSharedPreferences("MyPrefs_api", Context.MODE_PRIVATE);
Coin = prefs.getInt(sharedKey, Coin);
coin_txt.setText(Coin + " Coin");

masraf.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
if (Coin >= 50) {
Coin -= 50;
coin_txt.setText(Coin + " Coin");
}else if (Coin <= 0) {
Toast.makeText(getApplicationContext(), "Coin is finished! Buy some more", Toast.LENGTH_SHORT).show();
}
Editor editor = prefs.edit();
editor.putInt(sharedKey, Coin);
editor.commit();
}
});


thread = new Thread(new Runnable() {

@Override
public void run() {
bindService(new Intent("ir.cafebazaar.pardakht.InAppBillingService.BIND")
, mServiceConn, Context.BIND_AUTO_CREATE);

}
});thread.start();


kharid.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
thread = new Thread(new Runnable() {

@Override
public void run() {
try {
buyIntentBundle = mService.getBuyIntent(3, getPackageName(),
"api2", "inapp", "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzsdfsfdfJ");

PendingIntent pendingIntent = buyIntentBundle.getParcelable("BUY_INTENT");

startIntentSenderForResult(pendingIntent.getIntentSender(),
1001, new Intent(), Integer.valueOf(0), Integer.valueOf(0),
Integer.valueOf(0));
} catch (RemoteException e) {
Toast.makeText(getApplicationContext(), "opps ", Toast.LENGTH_SHORT).show();
e.printStackTrace();
} catch (SendIntentException e) {
Toast.makeText(getApplicationContext(), "opps startIntentSenderForResult", Toast.LENGTH_SHORT).show();
e.printStackTrace();
}

}
});
thread.start();

}
});



}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1001) {
int responseCode = data.getIntExtra("RESPONSE_CODE", 0);
String purchaseData = data.getStringExtra("INAPP_PURCHASE_DATA");
String dataSignature = data.getStringExtra("INAPP_DATA_SIGNATURE");

if (resultCode == RESULT_OK) {
try {
JSONObject jo = new JSONObject(purchaseData);
String sku = jo.getString("productId");
token = jo.getString("purchaseToken");

thread = new Thread(new Runnable() {

@Override
public void run() {
try {
int response = mService.consumePurchase(3, getPackageName(), token);
} catch (RemoteException e) {
Toast.makeText(getApplicationContext(), "Failed to Consume produce", Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
}
});thread.start();

Coin += 100;
coin_txt.setText(Coin + " Coin");
Editor editor = prefs.edit();
editor.putInt(sharedKey, Coin);
editor.commit();

}
catch (JSONException e) {
Toast.makeText(getApplicationContext(), "Failed to parse purchase data.", Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
}
}
}

@Override
public void onDestroy() {
super.onDestroy();
if (mServiceConn != null) {
unbindService(mServiceConn);
}
}

ServiceConnection mServiceConn = new ServiceConnection() {

@Override
public void onServiceDisconnected(ComponentName name) {
mService = null;

}

@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mService = IInAppBillingService.Stub.asInterface(service);

}
};


}

 


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