#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», тогда вы показываете это. Вы пропустили шаг получения фактического текста, который вы хотите.