کلیدستان

نسخه‌ی کامل: خطا در پرداخت درون برنامه ای another async operation(refresh inventory) is in progre
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
وقت بخیر
من از کد های زیر برای پرداخت درون برنامه ای و چک کردن پرداخت سمت سرور استفاده می کنم :

کد پی‌اچ‌پی:
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(thisbase64EncodedPublicKey);
        
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 = (ButtonfindViewById(R.id.button1);
        
btn.setOnClickListener(new OnClickListener() {
             
            @
Override
            
public void onClick(View v) {
                
mHelper.launchPurchaseFlow(Kharid.thisSKU_PREMIUMRC_REQUESTmPurchaseFinishedListener"payload-string");
                 
            }
        });
    }
    
IabHelper.QueryInventoryFinishedListener mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
        @
Override
        
public void onQueryInventoryFinished(IabResult resultInventory 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 resultPurchase 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 requestCodeint resultCodeIntent data) {
        
super.onActivityResult(requestCoderesultCodedata);
 
        
Log.d(TAG"onActivityResult(" requestCode "," resultCode "," data);
 
        
// Pass on the activity result to the helper for handling
        
if (!mHelper.handleActivityResult(requestCoderesultCodedata)) {
            
super.onActivityResult(requestCoderesultCodedata);
        } 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 = (ConnectivityManagergetSystemService(Context.CONNECTIVITY_SERVICE);
            
NetworkInfo netInfo cm.getActiveNetworkInfo();
            if (
netInfo != null && netInfo.isConnected()) {
                try {
                    
URL url = new URL("http://www.google.com");
                    
HttpURLConnection urlc = (HttpURLConnectionurl.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<StringStringString> {
        
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<
NameValuePairparams = 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.thisMainActivity.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.277E/AndroidRuntime(4204): java.lang.IllegalStateExceptionCan'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) 

کسی میدونه مشکل از چیه؟