4
timeOfMark = Calendar.getInstance(Locale.ENGLISH);
Map<String, Integer> what = timeOfMark.getDisplayNames(Calendar.HOUR, Calendar.SHORT, Locale.ENGLISH);

    for(Map.Entry<String, Integer> pair : what.entrySet())
    {
        Log.e(pair.getKey(), Integer.toString(pair.getValue()));
    }

この場合、Log.e は null 文字列を受け入れることができないため、Android アプリがクラッシュします。

と同じことです

timeOfMark.getDisplayName(Calendar.HOUR, Calendar.SHORT, Locale.ENGLISH);

入力パラメーターで多くのバリエーションを試しました。ロケールについては、 Locale.getDefault() なども行いました。変わらず* *

運が悪い。これを解決するものはありますか?または簡単な回避策はありますか?

4

1 に答える 1

9

public Map getDisplayNames(int field,int style,Locale locale)

このメソッドは、スタイルとロケールのすべての表示名とそのフィールド値を含むマップを返しnullます。文字列表現が利用できない場合は、マップを返します。

timeOfMark.getDisplayName(Calendar.HOUR, Calendar.SHORT, Locale.ENGLISH);

HOUR の文字列表現はありません。つまり、MONTH と DAY_OF_WEEK で行ったようにHOURS表現できますstring

試してみる WEEK, MONTH 例

 Map< String, Integer> representations = 
      now.getDisplayNames(Calendar.MONTH, Calendar.ALL_STYLES, locale);

あなたは得るでしょう

 {Apr=3, April=3, Aug=7, August=7, Dec=11, December=11, Feb=1, February=1, Jan=0, January=0, Jul=6, July=6, Jun=5, June=5, Mar=2, March=2, May=4, Nov=10, November=10, Oct=9, October=9, Sep=8, September=8}

カレンダーの場合.DAY_OF_WEEK

{Fri=6, Friday=6, Mon=2, Monday=2, Sat=7, Saturday=7, Sun=1, Sunday=1, Thu=5, Thursday=5, Tue=3, Tuesday=3, Wed=4, Wednesday=4}

ここで試してください

http://www.browxy.com/SubmittedCode/18596

于 2013-05-06T12:40:38.333 に答える