#android #android-fragments #bundle
#Android #android-фрагменты #пакет
Вопрос:
У меня проблема с получением значения пакета в другой фрагмент, мой код работает, но получаю разные данные из SQLite
Database
например, я вхожу в свою учетную запись после входа в систему, в моей Profile.class если кто-нибудь может показать мне, как получить значение из пакета в другой Fragment
класс
Это то, что у меня есть в моем Login.class
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
DocProfile fragment = new Profile();
Bundle bundle = new Bundle();
bundle.putString("Name", c.getString(1));
bundle.putString("Age", c.getString(2));
bundle.putString("Gender", c.getString(3));
bundle.putString("Address", c.getString(4));
bundle.putString("Email", c.getString(5));
bundle.putString("Contact", c.getString(6));
fragment.setArguments(bundle);
ft.replace(R.id.content_frame, fragment);
ft.commit();
В моем Profile.class чтобы получить значение из пакета, но получая разные пользовательские данные
Bundle args = getArguments();
if (args != null amp;amp; args.containsKey("Name"))
name = args.getString("Name");
if (args != null amp;amp; args.containsKey("Age"))
age = args.getString("Age");
if (args != null amp;amp; args.containsKey("Gender"))
gender = args.getString("Gender");
if (args != null amp;amp; args.containsKey("Address"))
address = args.getString("Address");
if (args != null amp;amp; args.containsKey("Email"))
email = args.getString("Email");
if (args != null amp;amp; args.containsKey("Contact"))
contact = args.getString("Contact");
Комментарии:
1. вы использовали
getArgument()
?2. да, я обновил свой вопрос, посмотрите, что я сделал
3. каков результат значений?
4. разные данные из других учетных записей
5. отладьте свой код, опубликуйте значение вашего курсора (c (1), c (2), … c (6)) и значения на
args
Ответ №1:
эй, когда вы пытаетесь получить значение из курсора, попробуйте вот так
я думаю, проблема в номере индекса, который вы передаете c.getString(int)
bundle.putString("Name", c.getString(c.getColumnIndex("your_column_name")));
и остальную часть руководства as @Sanket Kachhela вы делаете вот так
Предложение
когда вы получаете значение курсора в цикле, используйте это
bundle.putString("Name", c.getString(c.getColumnIndex("your_column_name")));
Нравится
int columnIndex = c.getColumnIndex("your_column_name");
bundle.putString("Name", c.getString(columnIndex));
потому что
в цикле поиск индекса столбца каждый раз является трудоемкой задачей, это влияет на производительность приложения, хотя индекс столбца не меняется каждый раз, поэтому найдите его один раз и используйте каждый раз в цикле
Комментарии:
1. почему в
int columnIndex = cursor.getColumnIndex("your_column_name");
вы используетеcursor
и в следующей строке вы используетеc
?2. Извините, это моя ошибка, вы взяли c в качестве переменной курсора, а я взял cursor в качестве переменной
Ответ №2:
Используйте getArgument()
public class Test extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
Bundle bundle = getArguments();
String str = bundle.getString("YOUR_KEY");
}
}
Комментарии:
1. Я пробовал это, но все равно получаю разные пользовательские данные
2. могу я спросить, как отлаживать c.getString(1)? srry новое в программировании
3. @user3766257 вы можете использовать
Log
like:Log.d("c.getString(1)" , c.getString(1));
или вы можете использовать режим отладки и посмотреть значение наc
Ответ №3:
Bundle bundle = this.getArguments();
String name = bundle.getString("Name");
или
String name = bundle.getString("Name","yourdefaultvaluehere");
когда в пакете нет ключа с именем «name», он примет указанное значение по умолчанию
Комментарии:
1. Я получаю сообщение об ошибке
defaultValue
можете ли вы объяснить, почему, сэр? Я вроде как новичок в программировании2. когда такого ключа нет, он принимает значение по умолчанию
3. но он просит меня создать локальную переменную
defaultValue
4. вы можете указать прямое значение там или у вас может быть ссылка на это значение по умолчанию, создав локальную переменную
5. если вы получаете какие-то другие данные, то проблема заключается в том, что ваш курсор перемещает положение курсора соответствующим образом