【问题标题】:Using joda-time-android with proguard将 joda-time-android 与 proguard 一起使用
【发布时间】:2017-08-31 13:12:17
【问题描述】:

我正在尝试在我的应用程序中使用joda-time-android,同时还使用 proguard。问题是,当我尝试从这样的 Intent 获取 LocalDate 时:

LocalDate date = (LocalDate) data.getSerializableExtra("dueDate");

我收到此错误:

Process: org.mpardalos.homeworkmanager, PID: 7509
    java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=2, result=-1, data=Intent { (has extras) }} to activity {org.mpardalos.homeworkmanager/org.mpardalos.homeworkmanager.TaskList}: java.lang.NullPointerException
            at android.app.ActivityThread.deliverResults(ActivityThread.java:3389)
            at android.app.ActivityThread.handleSendResult(ActivityThread.java:3432)
            at android.app.ActivityThread.access$1300(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1253)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5146)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException
            at org.joda.time.LocalDate.isSupported(LocalDate.java:577)
            at org.joda.time.format.DateTimeFormatterBuilder$PaddedNumber.printTo(DateTimeFormatterBuilder.java:1434)
            at org.joda.time.format.DateTimeFormatterBuilder$Composite.printTo(DateTimeFormatterBuilder.java:2446)
            at org.joda.time.format.DateTimeFormatter.print(DateTimeFormatter.java:663)
            at org.joda.time.base.AbstractPartial.toString(AbstractPartial.java:412)
            at org.mpardalos.homeworkmanager.TaskList.onActivityResult(TaskList.java:91)
            at android.app.Activity.dispatchActivityResult(Activity.java:5423)
            at android.app.ActivityThread.deliverResults(ActivityThread.java:3385)
            at android.app.ActivityThread.handleSendResult(ActivityThread.java:3432)
            at android.app.ActivityThread.access$1300(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1253)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5146)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566)
            at dalvik.system.NativeStart.main(Native Method)

调试器会这样说变量:

Method threw 'java.lang.NullPointerException' exception.

但是,一旦我从 gradle 构建文件中删除 minifyEnabled,问题就会消失。

我发现的唯一临时解决方案是禁用 proguard,因为应用程序相对较小(2 MB 没有 proguard - 0.9 MB)但我确实计划添加更多功能,所以我需要 以后会的。

谁能指出我的问题的解决方案?

TL;DR joda-time-android 在启用 proguard 时不起作用

【问题讨论】:

    标签: java android proguard jodatime


    【解决方案1】:

    对于joda-time-androidv2.9.9 发行版,您不需要添加proguard 规则。这是因为它已经包含了proguard:

    consumerProguardFiles 'proguard-rules.txt'
    

    在它的 build.gradle 中。

    请看源码:
    https://github.com/dlew/joda-time-android/blob/master/library/build.gradle

    【讨论】:

    • 好发现!我删除了我的答案
    猜你喜欢
    • 2012-12-11
    • 2010-11-07
    • 2013-07-19
    • 1970-01-01
    • 2021-03-18
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多