Приложение Android Eclipse работает некорректно на иностранном языке с базой данных - PullRequest
0 голосов
/ 14 марта 2012

Я выпустил приложение и недавно обнаружил, что оно не работает на 100% правильно на иностранном языке (точнее, на французском).

Похоже, что он работает правильно, пока я не создам курсор из базы данных и не манипулирую своими возвращенными данными. У меня есть текстовые представления, которые либо затеняются текстом по умолчанию, либо заполняются тем, что возвращается из курсора. То, что происходит, - то, что он не делает ни одной из тех вещей, и вместо этого просто использует текст, который находится в макете, который я создал.

Вот код:

Элемент курсора = 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 или "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);

Указанная дата имеет формат Месяц, день, год. Так что я знаю, где происходит проблема, но я до сих пор не могу понять, почему. Есть идеи?

Ответы [ 2 ]

1 голос
/ 14 марта 2012

Две идеи, которые могут быть не связаны:

  1. почему airline.equalsIgnoreCase("null")?не вижу причин для того, чтобы оно было "нулевым" (строка), должно быть airline.isEmpty().

  2. , вы должны изменить

if (mCursor != null) {

в

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

Пока вы отлаживаете, какова ценность авиакомпании?(когда язык французский) проверьте log cat, это действительно звучит так, как будто у вас где-то есть исключение, и поэтому, если "не работает"

вторая вещь, кажется очень разумной ... (вы'запрос вернул 0 записей, и вы пытаетесь перейти к первой ...)

edit: из комментариев, так будет легче читать:

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

будетполучить языковой стандарт (например, fr_FR, если он французский (если я не занят ..))

0 голосов
/ 15 марта 2012

Я обнаружил, что исключение неразборчивой даты, которое я получал, было просто из-за неправильного форматирования, и что мой код просто останавливался на исключении, которое и вызвало мою первоначальную проблему.

Для дальнейшего использования, если вы хотите разобрать что-то вроде «2012-10-05»:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...