2012-03-14 6 views
0

私はアプリを公開しましたが、最近外国語で100%正しく動作しないことが判明しました。AndroidのEclipseアプリケーションがデータベースのある外国語で正しく動作しない

データベースからカーソルを作成し、返されたデータを操作するまで正しく動作するようです。私は、デフォルトのテキストでグレーアウトされたテキストビューを持っているか、カーソルから返されたものを読み込みます。何が起こっているのかは、それがどちらもしていないということです。代わりに、私が作成したレイアウトにあるテキストを使用します。ここ

コードである:

カーソルアイテム= mDbHelper.fetchItem(mItemId)。

String airline =item.getString(
        item.getColumnIndexOrThrow(TripsDbAdapter.KEY_FIELD_FLIGHT_AIRLINE)); 

TextView itemAirline = (TextView)findViewById(R.id.flight_item_airline); 
      if(airline==null||airline.equalsIgnoreCase("null")){ 

       itemAirline.setText(R.string.default_carrier); 
       itemAirline.setTextColor(getResources().getColor(R.color.light_orange)); 
      }else{ 
      itemAirline.setText(item.getString(
        item.getColumnIndexOrThrow(TripsDbAdapter.KEY_FIELD_FLIGHT_AIRLINE))); 
        //itemAirline.setTextColor(getResources().getColor(R.color.white)); 
      } 

あなたが見ることができるように、私はと呼ばれるデータベース項目がnullまたは「ヌル」であるかどうかを確認し、それに応じてテキストビューを変更するには、チェックを行います。それはまったく変わらないので、それには達していないようです。英語の携帯電話では、これが完璧に機能していることに注意してください。私のアプリの残りの部分は、この機能以外はフランス語でもうまく動作しているようです。ここで

は私のデータベース呼び出しは、あまりにもそれが必要とされる場合には次のとおりです。

public Cursor fetchItem(long itemId) throws SQLException { 
     Cursor mCursor = 
       mDb.query(true, DATABASE_TABLE_ITEMS, COLUMNS, KEY_ITEMID + "=" + itemId, null, 
         null, null, null, null); 
     if (mCursor != null) { 
      mCursor.moveToFirst(); 
     } 
     return mCursor; 
    } 

UPDATE 私はフランス語に自分の携帯電話を切り替えたときに、私は解析できない日付のLogCatメッセージを取得しています。日付を解析するコードは次のとおりです。

DateFormat df = DateFormat.getDateInstance(DateFormat.LONG); 

String itemDate = item.getString(
        item.getColumnIndexOrThrow(TripsDbAdapter.KEY_DEP_DATE)); 
      System.out.println("Before PArse Dates"); 
      Date dateObj = df.parse(itemDate); 

日付は月、日、年の形式です。だからどこに問題が起こっているのか分かっていますが、それでも理由を理解できません。何か案は?

+0

がにローカライズするLAOUTのですか? –

答えて

0

私が得ていた解析不可能な日付の例外は、間違った書式化によるものであり、私のコードは私の元の問題の原因となった例外に止まっていたことがわかりました。今後の参考のために

、あなたは「2012年10月5日」のようなものを解析する場合:

private static final String DATE_SQL = "yyyy-MM-dd"; 
private static final String DATE_FORMAT = "MMM dd, yyyy"; 

DateFormat df = new SimpleDateFormat(DATE_SQL, Utility.getLocale()); 
Date dateObj = df.parse("2012-10-05"); 

//Format it to a more user friendly date 
System.out.println(sdf.format(dateObj)); //Oct. 05, 2012 
1

つのアイデア、関連していない可能性があります。

  1. なぜairline.equalsIgnoreCase("null")? "null"(文字列)である理由が表示されない場合は、airline.isEmpty()である必要があります。あなたは航空会社の値が何であるかをデバッグしながら

  2. あなたは

    if ((mCursor != null) && (mCursor.getCount() != 0)) {

if (mCursor != null) {

を変更する必要がありますか? (言語がフランス語の場合) ログの猫をチェックすると、どこかの例外があるように聞こえるので、「働いていない」という理由があります。

2番目のことは、読みやすくなりますので、コメントから ::)...

編集をRクエリが0のレコードが返されると、あなたは最初のものに移動しようとしている

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 
String locale = prefs.getString(Preferences.KEY_LOCALE, "null"); 
return locale; 

をロケールを取得します(例えば、fr_FRの場合にはfr_FR(もし私がworngではないなら..))

+0

お薦めいただきありがとうございます。これらのベストプラクティスを使用するようにコードを更新しますが、問題の発生場所を見つけ出し、元の質問を更新したと思います。 – Nick

+0

ロケールを使用してみてください:DateFormat df = DateFormat.getDateInstance(DateFormat.LONG、 Locale.FRANCE); –

+0

これはうまくいくが、ロケールを動的に切り替えるにはどうすればよいだろうか? 20か国のユーザーがいる場合は、動的にする方法がありますか? – Nick

関連する問題