Проблема с использованием данных, полученных с помощью интерфейса из Activity2 на Activity1 Frament - PullRequest
0 голосов
/ 28 октября 2019

У меня есть EditText на моем Activity2 и я хочу использовать его на моем Activity1 Fragment. Используя interfaces, я придумал:

В моем Activity2 я определил и инициализировал interface:

private OnEditTextData onEditTextData;

    public interface OnEditTextData{
        void sendEdtData(String str);
    }

, затем в onCreate я вызываюinterface метод на моем EditText после присоединения interface:

public class Activity2 extends AppCompatActivity  {

    private EditText editText;
    private OnEditTextData onEditTextData;

    public interface OnEditTextData{
        void sendEdtData(String str);
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity2);

        editText = findViewById(R.id.edit_text);

        btn_next = findViewById(R.id.btn_next);
        btn_previous = findViewById(R.id.btn_previous);
        btn_previous.setVisibility(View.GONE);
        .
        .
        Fragment fragment = new Fragment();
        onEditTextData = fragment;

        btn_previous.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                .
                .
                }
            }
        });

        btn_next.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                .
                onEditTextData.sendEdtData(editText.getText().toString());
                .    
                }
            }
        });
        .
        .
    }
}

Теперь в моем Activity1 Fragment я реализовал interface, и так как я хочу сохранить его с общими настройками...:

public class Fragment extends Fragment implements Activity2.OnEditTextData {
public static final String PREFS_NAME = "MyPrefsFile";
.
.


    @Override
        public void sendEdtData(String str) {
            SharedPreferences settings = this.getActivity().getSharedPreferences("MyPrefsFile", 0);
            Editor editor = settings.edit();
            editor.putString("string", str);
            editor.apply();  
        }

}

Я пытался использовать Logs, чтобы проверить, пришла ли моя строка в Fragment, и это произошло. Но всякий раз, когда я использую его для чего-то другого, например, для общих настроек, я получаю ошибку NullPointer:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.SharedPreferences androidx.fragment.app.FragmentActivity.getSharedPreferences(java.lang.String, int)' on a null object reference

Это также происходило, когда я пытался добавить строку в List.

1 Ответ

0 голосов
/ 28 октября 2019

проблема не в передаче данных, а в том, как вы используете android component.

используйте это:

SharedPreferences settings = getActivity().getSharedPreferences("MyPrefsFile", 0);

вместо

 SharedPreferences settings =this.getActivity().getSharedPreferences("MyPrefsFile", 0);
...