PingPlusPlus / pingpp-android

413 stars 190 forks source link

调用 createPayment 崩溃 #69

Closed twiceyuan closed 5 years ago

twiceyuan commented 5 years ago

设备:Android 8.1.0 OxygenOS

classpath 'com.android.tools.build:gradle:3.2.1' target 28

Process: [packageName], PID: 8538
java.lang.RuntimeException: Unable to start activity ComponentInfo{[packageName]/com.pingplusplus.android.PaymentActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'org.json.JSONObject org.json.JSONObject.put(java.lang.String, boolean)' on a null object reference
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2911)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2989)
    at android.app.ActivityThread.-wrap11(Unknown Source:0)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1688)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6753)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:482)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
    at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:108)

另外加入支付宝依赖后编译也不通过,报错信息为:

Error: Type com.alipay.android.phone.mrpc.core.ab is referenced as an interface from `com.alipay.android.phone.mrpc.core.l`.

调试环境,没有开启混淆

samurai00 commented 5 years ago

第一个问题应该是 order 对象有问题,格式或者内容不对。

twiceyuan commented 5 years ago

第一个问题应该是 order 对象有问题,格式或者内容不对。

感谢,和后端确认后确实是这个问题。第二个问题应该和我环境有关,Invalidate Caches / Restart 之后没有再出现

twiceyuan commented 5 years ago

有个小小的建议,如果能在拿到的参数先进行一遍校验然后抛出可读性更高的异常或者按照错误返回就更好了,因为直接抛出 SDK 的空指针异常对于使用者来说不太友好。

samurai00 commented 5 years ago

其实我们做了初步的判断,因为一般情况,order 对象或者 charge 对象都是整个直接输出,出问题的概率不是很大,所以没有很仔细的每一个字段的判断。而是做了几个关键点判断,就认为是一个合法的对象了。