Android: передача значения из базы данных в содержимое / переменную

#android #database #variables

#Android #База данных #переменные

Вопрос:

Кажется, я возвращаю значение из базы данных для идентификатора столбца #, но мне нужно фактическое текстовое значение столбца, которое я уже определил.

У меня есть строка, определенная как ID_COLUMN_TITLE , в которой я пытаюсь передать значение столбца в строку.:

 public final static String ID_COLUMN_TITLE = "com.pocketbeta.COLUMN_TITLE";
  

Значение COLUMN_TITLE заполняется базой данных в другом фрагменте кода:

 public static final String COLUMN_TITLE = "route_name";
  

Затем я настраиваю адаптер и прослушиватель и передаю его в действие:

     private AdapterView.OnItemClickListener onListClick = new AdapterView.OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Intent i=new Intent(SmithRockNameDatabase.this, DatabaseChoice.class);
        i.putExtra(ID_COLUMN_TITLE, String.valueOf(id));
        startActivity(i);
    }
};
  

Затем новое действие отображает результат:

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.databasechoice);
passedVar=getIntent().getStringExtra(SmithRockNameDatabase.ID_COLUMN_TITLE);
    passedView=(TextView)findViewById(R.id.passed);
    passedView.setText(passedVar);
}
  

Все работает, только он отображает идентификатор столбца, а не фактическое значение заголовка столбца, как я хочу. Кто-нибудь может сказать мне, чего мне не хватает?

Комментарии:

1. Вы получаете правильный вывод, если регистрируете значение id в ClickListener?

2. вы помещаете valueOf(id) в ключ- ID_COLUMN_TITLE. То, что вы получите обратно, — это valueOf (id). Это то, что вы хотите? или вы хотите ID_COLUMN_TITLE?

3. Да, я распознал передачу идентификатора из valueOf (id) сразу после публикации. Я пытаюсь передать значение одной из записей столбцов. Так, например, я пытаюсь передать значение 1 записи в столбце с именем «route_name» в базе данных.

Ответ №1:

Быстрое и грязное решение этой проблемы — захватить текст из представления:

 public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
    Intent i=new Intent(SmithRockNameDatabase.this, DatabaseChoice.class);

    // I use R.id.txtTitle here but you probably have something similar
    TextView txtTitle = (TextView)view.findViewByid(R.id.txtTitle);
    if(txtTitle!=null)i.putExtra(ID_COLUMN_TITLE, txtTitle.getText());
    startActivity(i);
}
  

Строго говоря, хотя вам, вероятно, следует использовать идентификатор в вашем новом действии для запроса данных, относящихся к этому идентификатору, тогда у вас будет доступ ко всем полям в записи.

Комментарии:

1. Это то, к чему я пытался добраться, я думаю, это работает. Спасибо!

2. Я пропустил приведение к TextView … Я продолжаю это делать. Хотя теперь исправлено 😉

Ответ №2:

Все, что вы делаете, работает так, как должно.

Ты делаешь эту реплику:

 i.putExtra(ID_COLUMN_TITLE, String.valueOf(id));
  

Который преобразует значение int в строку, поэтому при вашем следующем действии тексту присваивается значение this int.

Я думаю, вы хотите сделать что-то более похожее:

   String value = (view.findViewById(R.id.text1)).getText();
  i.putExtra(ID_COLUMN_TITLE, String.valueOf(id));
  

Я не слишком уверен, какой текст вы хотите получить, но основной ответ — это преобразование int в строку. Итак, 4 = «4», тогда вы показываете это. Вы пропустили шаг получения фактического текста, который вы хотите.