【问题标题】:Format Date in Android wear watchface在 Android Wear 表盘中格式化日期
【发布时间】:2017-12-22 16:44:37
【问题描述】:

我正在尝试使用此代码将 Android Wear 表盘中的日期格式化为“dd-MMM”

mDateFormat = DateFormat.getDateFormat(DigitalWatchFaceService.this);
mDateFormat.setCalendar(mCalendar);
mDateFormat.format("dd-MMM");

但是,我得到这个错误,它指向上面代码的最后一行。

12-20 04:32:37.896 5616-5616/com.example.android.wearable.watchface E/AndroidRuntime: 致命异常: main 进程:com.example.android.wearable.watchface,PID:5616 java.lang.IllegalArgumentException:无法将给定的对象格式化为 日期 在 java.text.DateFormat.format(DateFormat.java:302) 在 java.text.Format.format(Format.java:157) 在 com.example.android.wearable.watchface.watchface.DigitalWatchFaceService$Engine.initFormats(DigitalWatchFaceService.java:290) 在 com.example.android.wearable.watchface.watchface.DigitalWatchFaceService$Engine.onCreate(DigitalWatchFaceService.java:235) 在 android.service.wallpaper.WallpaperService$Engine.attach(WallpaperService.java:875) 在 android.service.wallpaper.WallpaperService$IWallpaperEngineWrapper.executeMessage(WallpaperService.java:1166) 在 com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:37) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6119) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

【问题讨论】:

    标签: wear-os


    【解决方案1】:

    我会说问题是java.text.DateFormat.format() 没有将格式字符串作为参数 - 它需要一个Date 对象。要指定格式字符串,可以像这样使用android.text.format.DateFormat

    mDateFormat = DateFormat.getDateFormat(DigitalWatchFaceService.this);
    String output = mDateFormat.format("dd-MMM", mCalendar);
    

    或像这样使用java.text.SimpleDateFormat

    mDateFormat = new SimpleDateFormat("dd-MMM");
    String output = mDateFormat.format(mCalendar.getTime());
    

    [代码是在这里徒手输入的,所以不能保证没有错误!]

    【讨论】:

      【解决方案2】:

      你可以像这样简单地格式化它

      mDateFormat = new SimpleDateFormat("dd-MMM"); 日期 mDate;

      这将从当前的上下文格式中得到它:

      mDateFormat = DateFormat.getDateFormat(DigitalWatchFaceService.this);
      

      完整代码为:

              java.text.DateFormat mDateFormat;
                  mDateFormat = new SimpleDateFormat("dd-MMM");
      
              private void initFormats() {
                  mDateFormat = new SimpleDateFormat("dd-MMM");
                  mDateFormat.setCalendar(mCalendar);
              }
      

      在某处画出来:

                      canvas.drawText(
                              mDateFormat.format(mDate),
                              mXOffset, mYOffset + mLineHeight * (float)1.5, mDatePaint);
      

      您需要在您的 onCreate 中调用上述方法:

              @Override
              public void onCreate(SurfaceHolder holder) {
                  if (Log.isLoggable(TAG, Log.DEBUG)) {
                      Log.d(TAG, "onCreate");
                  }
                  super.onCreate(holder);
      
      
                  Resources resources = DigitalWatchFaceService.this.getResources();
      
                  mCalendar = Calendar.getInstance();
                  mDate = new Date();
                  initFormats();
              }
      

      【讨论】:

        猜你喜欢
        • 2014-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多