2013-02-09 34 views
6

tôi đã thực hiện trong việc mua ứng dụng trong ứng dụng của tôi, tôi đã sử dụng "TrivialDrive" ví dụ cho phiên bản 3 của thanh toán trong ứng dụng, tôi đã thử nghiệm ứng dụng bằng cách sử dụng phản ứng tĩnh mọi công việc như mong đợi.Android trong ứng dụng mua đâm sau khi thanh toán

Nhưng khi tôi tải ứng dụng từ thị trường, ứng dụng bị treo trên mua thành công,

Mã của tôi là mua thành công

IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() { 
public void onIabPurchaseFinished(IabResult result, Purchase purchase) { 

    Log.d(TAG, "Purchase finished: " + result + ", purchase: " + purchase); 
    if (result.isFailure()) { 
    complain("Error purchasing: " + result); 
    } 

    if (purchase != null) { 
    if (purchase.getSku().equals(Constants.IN_APP_PURCHASE_PRODUCT_ID)) { 
     // bought the premium upgrade! 
     String message = getResources().getString(R.string.app_purchase_successful_msg); 
     mIsPremium = true; 
     updateUi(mIsPremium); 
     successAlert(message); 
    } 
    } 
} 
}; 

tôi đã thiết lập tin nhắn trên mua thành công, nhưng tôi không thể nhìn thấy thông báo này, (có nghĩa là những linse không thực hiện) khi tôi mua thành công từ nó, ứng dụng treo sau khi thanh toán thành công.

Khi ứng dụng khởi động lại và cố gắng mua item nó nói đã mua.

tôi đã báo cáo vụ tai nạn từ nhà phát triển giao diện điều khiển.

02-09 02:01:13.181: E/AndroidRuntime(11530): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=10001, result=-1, data=Intent { (has extras) }} to activity {com.eknathkadam.grammaruplite/com.webrich.base.ui.GoogleInAppPurchaseActivity}: java.lang.NullPointerException 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.app.ActivityThread.deliverResults(ActivityThread.java:3141) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3184) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.app.ActivityThread.access$1100(ActivityThread.java:130) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1243) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.os.Handler.dispatchMessage(Handler.java:99) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.os.Looper.loop(Looper.java:137) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.app.ActivityThread.main(ActivityThread.java:4745) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at java.lang.reflect.Method.invokeNative(Native Method) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at java.lang.reflect.Method.invoke(Method.java:511) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at dalvik.system.NativeStart.main(Native Method) 
**02-09 02:01:13.181: E/AndroidRuntime(11530): Caused by: java.lang.NullPointerException 
02-09 02:01:13.181: E/AndroidRuntime(11530): at com.google.billing.Base64.decode(Base64.java:434)** 
02-09 02:01:13.181: E/AndroidRuntime(11530): at com.google.billing.Security.generatePublicKey(Security.java:87) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at com.google.billing.Security.verifyPurchase(Security.java:66) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at com.google.billing.IabHelper.handleActivityResult(IabHelper.java:437) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at com.webrich.base.ui.GoogleInAppPurchaseActivity.onActivityResult(GoogleInAppPurchaseActivity.java:238) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.app.Activity.dispatchActivityResult(Activity.java:5192) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.app.ActivityThread.deliverResults(ActivityThread.java:3137) 
02-09 02:01:13.181: E/AndroidRuntime(11530): ... 11 more 
02-09 02:02:20.610: E/JavaBinder(250): !!! FAILED BINDER TRANSACTION !!! 
02-09 02:02:20.638: E/MountService(250): Listener dead 
02-09 02:02:20.638: E/MountService(250): Listener dead 
02-09 02:02:22.028: E/InputDispatcher(250): channel '41f313f0 com.android.vending/com.android.vending.AssetBrowserActivity (server)' ~ Channel is unrecoverably broken and will be disposed! 
02-09 02:03:59.884: E/PowerManagerService(250): Excessive delay setting brightness: 198ms, mask=2 

nó ném ngoại lệ Null Pointer trong phương pháp trên dòng này

if (!mHelper.handleActivityResult(requestCode, resultCode, data)) 

Phương pháp là như thế này

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
Log.d(TAG, "onActivityResult(" + requestCode + "," + resultCode + "," + data); 

// Pass on the activity result to the helper for handling 
if (!mHelper.handleActivityResult(requestCode, resultCode, data)) { 
    // not handled, so handle it ourselves (here's where you'd 
    // perform any handling of activity results not related to in-app 
    // billing... 
    super.onActivityResult(requestCode, resultCode, data); 
} else { 
    Log.d(TAG, "onActivityResult handled by IABUtil."); 
} 
} 

Nó hoạt động hoàn toàn tốt đẹp trên phản ứng tĩnh nhưng tai nạn trên khi tôi onActivityResult() mua từ thị trường.

+1

Tôi đang đối mặt với cùng một vấn đề kể từ hôm qua.Tôi hy vọng tôi sẽ nhận được một số giải pháp tại đây. –

+0

Tôi cũng phải đối mặt với vấn đề này kể từ hôm qua, không biết tại sao – Goofy

+0

@MehulJoisar khi bạn tải lên ứng dụng của mình? – Goofy

Trả lời

0

tôi đã phải đối mặt với chính xác cùng một vấn đề. Sau đó, tôi nhận ra rằng toàn bộ hoạt động đôi khi được tái tạo trong quá trình mua hàng (không có lý do gì). Tôi chưa thử nghiệm ví dụ Trivia riêng rẽ để kiểm tra xem nó có xảy ra với ứng dụng đó hay không, nhưng tôi mong đợi nó, vì nó có vẻ liên quan đến quá trình thanh toán (hoặc các phương thức trợ giúp của ví dụ đó, mà tôi sử dụng trong ứng dụng của riêng mình quá).

Sự khác biệt duy nhất giữa phần thanh toán của mã của riêng tôi và ví dụ bên lề là tôi đã khởi tạo mHelper từ một phương thức được khởi chạy trên một sự kiện nhất định, trong ví dụ Trivia được khởi tạo từ onCreate. Vì vậy, tôi đã thực hiện thay đổi đó (tôi tạo ví dụ mới của mHelper từ onCreate ngay bây giờ) và mọi thứ bắt đầu hoạt động tốt. Vấn đề là, khi hoạt động được tái tạo, mHelper được khởi tạo lại trong onCreate, do đó, trong lệnh gọi hàm onActivityResult, nó không thể rỗng.

Thật lòng, tôi không biết tại sao hoạt động được tạo lại và tại sao phương thức onActivityResult của cá thể mới của Hoạt động được gọi, nhưng mọi thứ dường như hoạt động ngay bây giờ.

+0

Nghe có vẻ kỳ lạ! –

+0

Vâng, tôi biết nó có vẻ kỳ lạ, nhưng nó hoạt động, và nó chắc chắn là nguồn gốc của vấn đề. Tôi khá chắc chắn vấn đề có liên quan đến các thư viện của ví dụ bên lề, chứ không phải trong thanh toán trong ứng dụng, vì vậy bình luận của bạn trong câu hỏi ban đầu, "Tôi nghĩ rằng trong ứng dụng v3 chưa ổn định", không có ý nghĩa. Tôi muốn @Mac, người đưa ra câu hỏi, để đăng bài nếu anh ấy chuyển việc tạo ra cá thể mHelper ra khỏi phương thức onCreate, như tôi đã làm lúc đầu tiên ... – thelawnmowerman

+0

ok và có, có một số lỗi, hoạt động không nên tạo lại và rõ ràng là tôi đã đưa ra nhận xét cho v3 trong ứng dụng (nghĩa là thư viện trong ứng dụng v3), không phải cho toàn bộ tính năng mua hàng trong ứng dụng của google. –

0

tôi đã cùng một vấn đề. Điều tôi thấy là khi hộp mua hàng trong ứng dụng được hiển thị, phương thức onPause được thực thi trong hoạt động ứng dụng của tôi và khi hộp được đóng thì phương thức onResume được thực thi. Đây là mã của các phương pháp sau:

@Override 
public void onPause() 
{ 
    mWakeLock.release(); 
    super.onPause(); 
} 

@Override 
public void onResume() 
{ 
    super.onResume(); 
    mWakeLock.acquire(); 
} 

Cuối cùng tôi xóa các dòng trong đó mWaveLock được thực thi.

@Override 
public void onPause() 
{ 
    super.onPause(); 
} 

@Override 
public void onResume() 
{ 
    super.onResume(); 
} 

và hoạt động tốt. Tôi hy vọng rằng nó sẽ giúp ai đó.

0

Tôi biết chủ đề này là cũ, nhưng tôi có lẽ chỉ có cùng một vấn đề. Phương thức của bạn

complain("Error purchasing: " + result); 

làm gì?

tôi gọi

Toast.makeText(getParent(), "Premium purchased successfully", Toast.LENGTH_LONG) 
        .show(); 

ở nơi chính xác giống nhau, và điều này gây ra các lỗi sau cho tôi:

06-26 14:02:54.229: E/AndroidRuntime(25681): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=10001, result=0, data=Intent { (has extras) }} to activity {sf.com.flightBook/sf.com.flightBook.ui.configuration.ConfigurationMain}: java.lang.NullPointerException 

Nếu đây là vẫn còn phù hợp cho bạn, bạn nên kiểm tra của bạn "phàn nàn ()" phương pháp.

1

Tôi cố định vấn đề này bằng cách đơn giản làm thành viên biến IabHelper tôi (mHelper) tĩnh

0

Khi tôi có vấn đề này tôi đã tìm ra rằng khóa công khai của tôi trong ứng dụng của tôi không tương ứng với license key mà Google Play tạo cho ứng dụng của tôi

Các vấn đề liên quan