بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

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

مدیریت گفتگو
Vampire 11 سال پیش
آخرین تغییر: 11 سال پیش

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

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

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

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

نظرات

حامد 11 سال پیش
وقتی وارد کلاس پرداخت می شوید همان اول یک دیالوگ قرار دهید تا برنامه برای اتصال به بازار آماده شود . به پروژه آموزشی بنده مراجعه کنید
Vampire 11 سال پیش
پروژه تون رو دیدم ، اون مشکل با flagEndAsync کردن helper حل شد حامد جان، یه مشکل دیگه هم داشتم. من الان دقیقا از کد های خود بازار استفاده کردم ، میخوام پاسخ دریافتی رو بررسی کنم باید روی کدوم بخش سوئیچ کنم؟
حامد 11 سال پیش
منظورتون در API توسعه دهندگان بازاره یا در برنامه Trivial Drive ؟
Vampire 11 سال پیش
این بود منظورم : لینک کجای کد های نمونه ی خود بازار باید تغییر پیدا کنه؟ لینک
khajavi 11 سال پیش
ببخشید میشه بگید چجوری helper رو flagEndAsync کردید.چون من همین خطا رو دارم.ممنون میشم راهنمایی کنید
khajavi 11 سال پیش
ببخشید میشه بگید چجوری helper رو flagEndAsync کردید.چون من همین خطا رو دارم.ممنون میشم راهنمایی کنید
Vampire 11 سال پیش
if (mHelper != null)mHelper.flagEndAsync();
khajavi 11 سال پیش
کجای کد باید این خط رو اضافه کرد
khajavi 11 سال پیش
کجای کد باید این خط رو اضافه کرد
Vampire 11 سال پیش
باید روی کلیک لیسنر دکمه ارتقا قرار دهید.
khajavi 11 سال پیش
ببخشید هر کاری میکنم خطا میده من کد کلیک لیسنرم رو میذارم 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); } } }); }
Vampire 11 سال پیش
چه خطایی ؟ قبل از if (HelperIAP.helperIAPIsSetup) کدی که دادم رو قرار دادید ؟
khajavi 11 سال پیش
یه سری خطای درون برنامه هست که با پابلیک کردنflagEndAsync حل میشه و همینطور کد به این صورت در میاد: if (HelperIAP.iabHelper != null) HelperIAP.iabHelper.flagEndAsync(); if (HelperIAP.helperIAPIsSetup) { اما بازم برنامه کرش میکنه
Vampire 11 سال پیش
متن اروری که میده رو بزارین دوست عزیز.
khajavi 11 سال پیش
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.

پاسخ‌ها 1

حامد 11 سال پیش

شما باید بخش پیاده سازی 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);

}
};


}

 

نظرات


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