1

多くの新聞の日付を扱い、多くの日付形式を扱う Android アプリを開発しています。私はほとんど手動で解析を行っていますが、非常に驚​​くべきことは、ICS デバイスでアプリを試したときに、JB デバイスで試したときと同じ結果が得られないことです。問題の解析は、XML から解析されたいくつかの文字列から new と呼ばれるオブジェクトを構築するときに発生します。

 public class NewNew implements Parcelable, Comparable<NewNew>{

private String title;
private String link;
private String description;
private Date pubDate;
private String img;
private String country;

 public NewNew (String t, String l, String d, String f, String i, String c)
{
    this.title= t;
    this.link = l;
    this.description = d;

    //convert string to date
    Date date = toDate(f) ;
    this.pubDate= date;

    this.img=i;
    this.country=c;
}

 public Date toDate (String dateText)
{
Date d=null;
//Sat, 03 Aug 2013 17:06:30 +0000 that is the value of dateText
        SimpleDateFormat df5 = new SimpleDateFormat("dd MMM yyyy HH:mm:ss Z", Locale.getDefault());
d =  df5.parse(dateText.substring(5));
return d;
}
}

非常に驚くべきことに、ICS では Date オブジェクトを作成しますが、JB デバイスでは作成しません。デバイスの設定を変更しようとしました (タイムゾーンと時刻を手動または自動で設定しても違いはありません)

関連するかどうかはわかりませんが、ICS のバージョンは 4.0.4 および JB 4.3 です。


SimpleDateFormat のコンストラクターの Locale.getDefault() を定義済みのロケール (私の場合は Locale.US) に置き換えることで、これを修正しました。それはまさに私が望んでいたものではありませんでしたが、Date オブジェクトを作成したら、SimpleDateFormat のパターンを手動で設定して印刷できます

TextView dateTextView = (TextView)findViewById(R.id.dateTextView);
SimpleDateFormat sdf = new SimpleDateFormat("dd MMMM, HH:mm");
dateTextView.setText(sdf.format(d);

また、XML pubDate からの形式で解析エラーが発生しました。デバッグした場合にそれらが書かれていない場合でも、それらに html /n または /t が含まれる日付がいくつかあることに気付きます。次のコードを使用してそれらを削除します

 public String stripHtml(String html) {

     SpannableStringBuilder spannedStr = (SpannableStringBuilder) Html
                .fromHtml(html.trim());
        Object[] spannedObjects = spannedStr.getSpans(0, spannedStr.length(),
                Object.class);
        for (int i = 0; i < spannedObjects.length; i++) {
            if (spannedObjects[i] instanceof ImageSpan) {
                ImageSpan imageSpan = (ImageSpan) spannedObjects[i];
                spannedStr.replace(spannedStr.getSpanStart(imageSpan),
                        spannedStr.getSpanEnd(imageSpan), "");
            }
        }
        String textWeb = spannedStr.toString();
        return Html.fromHtml(textWeb).toString();

    }

日付として解析する前に、このメソッドをテキスト形式の XML に適用します。

4

0 に答える 0