وقت بخیر
من از کد های زیر برای پرداخت درون برنامه ای و چک کردن پرداخت سمت سرور استفاده می کنم :
ولی وقتی رو دکمه خرید کلیک می کنم خطای زیر رو میده :
کسی میدونه مشکل از چیه؟
من از کد های زیر برای پرداخت درون برنامه ای و چک کردن پرداخت سمت سرور استفاده می کنم :
کد پیاچپی:
private database db;
static final String TAG = "";
static final String SKU_PREMIUM = "deser1";
boolean mIsPremium = false;
static final int RC_REQUEST =21111368 ;
IabHelper mHelper;
private static final String TAG_SUCCESS = "consumptionState";
private static String url_all_products = "http://eydkojaberim.ir/sajad/fall/barresi.php";
JSONParser jParser = new JSONParser();
JSONArray products = null;
String order;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.kharid);
db = new database(this);
db.open();
String base64EncodedPublicKey = "MIHNMA0GCSqGSIb3DQEBAQUAA4G7ADCBtwKBrwDXKC8YG l/T62dNzpumjYNQheGxo/cARIshxIGbuBsBWn9mkFeRrqnmZv3iPjNRkvedca7kmqM5g1bR w6NU/qo2cyFd4Way1I7s/kfZCAp+1Hz2KWwyhG1SKS290nCbkf75T89IMjWE2Yaz/NSBrllLKKrYgUaOPejRRPd6iHvdPoSd/b3KxWs+6izaX0YqCR5DpmZ25BTcY2nUpKd+Kvsm48MzwDrPL0G gXRseEH8CAwEAAQ==";
mHelper = new IabHelper(this, base64EncodedPublicKey);
Log.d(TAG, "Starting setup.");
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
@Override
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) ;
}
});
Button btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mHelper.launchPurchaseFlow(Kharid.this, SKU_PREMIUM, RC_REQUEST, mPurchaseFinishedListener, "payload-string");
}
});
}
IabHelper.QueryInventoryFinishedListener mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
@Override
public void onQueryInventoryFinished(IabResult result, Inventory inventory) {
Log.d(TAG, "Query inventory finished.");
if (result.isFailure()) {
Log.d(TAG, "Failed to query inventory: " + result);
return;
}
else {
Log.d(TAG, "Query inventory was successful.");
// does the user have the premium upgrade?
mIsPremium = inventory.hasPurchase(SKU_PREMIUM);
// update UI accordingly
Log.d(TAG, "User is " + (mIsPremium ? "PREMIUM" : "NOT PREMIUM"));
}
Log.d(TAG, "Initial inventory query finished; enabling main UI.");
}
};
IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
@Override
public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
if (result.isFailure()) {
Log.d(TAG, "Error purchasing: " + result);
return;
}
else if (purchase.getSku().equals(SKU_PREMIUM)) {
order = purchase.getOrderId();
new NetCheck().execute();
}
}
};
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d(TAG, "onActivityResult(" + requestCode + "," + resultCode + "," + data);
// Pass on the activity result to the helper for handling
if (!mHelper.handleActivityResult(requestCode, resultCode, data)) {
super.onActivityResult(requestCode, resultCode, data);
} else {
Log.d(TAG, "onActivityResult handled by IABUtil.");
}
}
private class NetCheck extends AsyncTask<String,String,Boolean> {
@Override
protected void onPreExecute(){
super.onPreExecute();
}
@Override
protected Boolean doInBackground(String... params) {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnected()) {
try {
URL url = new URL("http://www.google.com");
HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
urlc.setConnectTimeout(3000);
urlc.connect();
if (urlc.getResponseCode() == 200) {
return true;
}
} catch (MalformedURLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return false;
}
@Override
protected void onPostExecute(Boolean th) {
if(th == true){
new SaveProductDetails().execute();
}
else{
//namayeshe matn ke begim khata dad
}
}
}
class SaveProductDetails extends AsyncTask<String, String, String> {
ProgressDialog pDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(Kharid.this);
pDialog.setMessage("در حال تکمیل فرایند خرید...");
pDialog.setIndeterminate(true);
pDialog.setCancelable(true);
pDialog.show();
}
@Override
protected String doInBackground(String... args) {
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("package", "com.fallrooz.srp"));
params.add(new BasicNameValuePair("product", SKU_PREMIUM));
params.add(new BasicNameValuePair("tokenid", order));
JSONObject json = jParser.getJSONFromUrl(url_all_products,params);
try {
int consumptionState = json.getInt(TAG_SUCCESS);
if (consumptionState == 1) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(Kharid.this, "خرید موفق", Toast.LENGTH_SHORT).show();
db.update_vip("1");
Intent intent = new Intent(Kharid.this, MainActivity.class);
startActivity(intent);
}
});
} else {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(Kharid.this, "شما از لاکی پچر استفاده می کنید", Toast.LENGTH_SHORT).show();
}
});
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String file_url) {
pDialog.dismiss();
}
}
}
ولی وقتی رو دکمه خرید کلیک می کنم خطای زیر رو میده :
کد پیاچپی:
05-21 23:04:06.277: E/AndroidRuntime(4204): java.lang.IllegalStateException: Can't start async operation (launchPurchaseFlow) because another async operation(refresh inventory) is in progress.
05-21 23:04:06.277: E/AndroidRuntime(4204): at com.util.IabHelper.flagStartAsync(IabHelper.java:8 22)
05-21 23:04:06.277: E/AndroidRuntime(4204): at com.util.IabHelper.launchPurchaseFlow(IabHelper.ja va:373)
05-21 23:04:06.277: E/AndroidRuntime(4204): at com.util.IabHelper.launchPurchaseFlow(IabHelper.ja va:338)
05-21 23:04:06.277: E/AndroidRuntime(4204): at com.deser.srp.Kharid$4.onClick(Kharid.java:77)
05-21 23:04:06.277: E/AndroidRuntime(4204): at android.view.View.performClick(View.java:4463)
05-21 23:04:06.277: E/AndroidRuntime(4204): at android.view.View$PerformClick.run(View.java:18770 )
05-21 23:04:06.277: E/AndroidRuntime(4204): at android.os.Handler.handleCallback(Handler.java:808 )
05-21 23:04:06.277: E/AndroidRuntime(4204): at android.os.Handler.dispatchMessage(Handler.java:10 3)
05-21 23:04:06.277: E/AndroidRuntime(4204): at android.os.Looper.loop(Looper.java:193)
05-21 23:04:06.277: E/AndroidRuntime(4204): at android.app.ActivityThread.main(ActivityThread.jav a:5333)
05-21 23:04:06.277: E/AndroidRuntime(4204): at java.lang.reflect.Method.invokeNative(Native Method)
05-21 23:04:06.277: E/AndroidRuntime(4204): at java.lang.reflect.Method.invoke(Method.java:515)
05-21 23:04:06.277: E/AndroidRuntime(4204): at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:829)
05-21 23:04:06.277: E/AndroidRuntime(4204): at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:645)
05-21 23:04:06.277: E/AndroidRuntime(4204): at dalvik.system.NativeStart.main(Native Method)
کسی میدونه مشکل از چیه؟