Как получить значение из пакета в другой фрагмент

#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. если вы получаете какие-то другие данные, то проблема заключается в том, что ваш курсор перемещает положение курсора соответствующим образом