Не удается получить значение из Activity во фрагмент, NullPointerException - PullRequest
0 голосов
/ 30 апреля 2020

Итак, я работал над этим в течение нескольких дней и продолжаю получать исключение NullPointerException. У меня есть MainActivity, OutputActivity и OutputFragment. Мне нужно получить данные из editText в MainActivity в OutputFragment. Я могу получить его в OutputActivity из MainActivity с намерением и распечатать значение в logcat, но не могу получить его из OutputActivity в OutputFragment.

Я пытался:
- используя пакет для отправки его из MainActivity в OutputFragment
- используя Intent для отправки его в OutputActivity, а затем с помощью Intent для отправки его в OutputFragment
-using Намерение отправить его в OutputActivity, а затем использовать пакет для отправки в OutputFragment

Я искал во всем Stack Overflow, Google, смотрел видео и т. Д. c.

Каждый раз, когда я пытаюсь получить значение в OutputFragment, я получаю исключение NullPointerException. Я студент колледжа, и я просто не понимаю, что я делаю неправильно. Все выглядит правильно, но я продолжаю получать исключения. Я прокомментировал несколько строк, когда пробовал разные вещи, поэтому я извиняюсь за удобство чтения, я думал, что больше информации лучше, чем меньше, поэтому я оставил их. (Вся OutputActivity в настоящее время в основном закомментирована)

Кто-нибудь может мне помочь и показать мне глупую ошибку, пожалуйста?

Спасибо

Основная активность

package com.murach.josephsmithsemesterproject;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {


//Initialize variables
EditText benchPressEditText;
EditText squatEditText;
EditText overheadPressEditText;
EditText deadliftEditText;
Button calculateBtn;



@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Get references to the widgets
    benchPressEditText = (EditText) findViewById(R.id.benchPressEditText);
    squatEditText = (EditText) findViewById(R.id.squatEditText);
    overheadPressEditText = (EditText) findViewById(R.id.overheadPressEditText);
    deadliftEditText = (EditText) findViewById(R.id.deadliftEditText);
    calculateBtn = (Button) findViewById(R.id.calculateBtn);



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


}



private void openOutputActivity() {
    Intent intent = new Intent(getApplicationContext(), OutputActivity.class);
    startActivity(intent);
}

private void sendData() {
    //Get values from edit text
   String oneRepBench = benchPressEditText.getText().toString();

    OutputFragment outputFragment = new OutputFragment();
    Bundle bundle = new Bundle();
    bundle.putString("oneRepBench",oneRepBench);
    Log.v("Data", oneRepBench);

   //set fragment class arguments

   //outputFragment.setArguments(bundle);

    //Intent intent = new Intent(getApplicationContext(), OutputActivity.class);
    //intent.putExtra("oneRepBench", oneRepBench);
    //startActivity(intent);





}

}

OutputActivity

package com.murach.josephsmithsemesterproject;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;

public class OutputActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //Set the view for the activities XML
    setContentView(R.layout.activity_output);

    //Bundle bundle = getArguments();
    //Log.v("getString", bundle.getString("oneRepBench", "No value"));
    //String oneRepBench = bundle.getString("oneRepBench");

    //Intent intent = getIntent();
    //String oneRepBench = intent.getStringExtra("oneRepBench");
    //Log.v("Data now", oneRepBench);

    //Intent outputIntent = new Intent(getApplicationContext(), OutputFragment.class);
    //intent.putExtra("oneRepbench", oneRepBench);
    //startActivity(intent);

    //Bundle bundle = new Bundle();
    //bundle.putString("oneRepBench", oneRepBench);

    //OutputFragment outputFragment = new OutputFragment();
    //outputFragment.setArguments(bundle);


}

}

Фрагмент вывода

 package com.murach.josephsmithsemesterproject;

    import android.content.Intent;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.EditText;
    import android.widget.TextView;

    import androidx.annotation.NonNull;
    import androidx.annotation.Nullable;
    import androidx.fragment.app.Fragment;

    import org.w3c.dom.Text;

    import java.util.Objects;

    public class OutputFragment extends Fragment {

   /* @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //Bundle bundle = getArguments();
        //Log.v("getString", bundle.getString("oneRepBench", "No value"));
        //String oneRepBench = bundle.getString("oneRepBench");

        //TextView oneRepBenchText = (TextView) view.findViewById(R.id.oneRepBench);
        //oneRepBenchText.setText(oneRepBench);
        //Intent intent = getActivity().getIntent();
        //String oneRepBench = intent.getStringExtra("oneRepBench");
    }*/

    @Override
    public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_output, container, false);

        //assert getArguments() != null;
        //String oneRepBench = getArguments().getString("oneRepBench");
        //Intent intent = getActivity().getIntent();
        //String oneRepBench = intent.getStringExtra("oneRepBench");
        //Log.v("Data now", oneRepBench);

        String text;
        text = this.getArguments().getString("oneRepBench");
        //Returns NullPointerException

        return view;
    }

}

1 Ответ

0 голосов
/ 30 апреля 2020

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

В Activity, чтобы добавить фрагмент

   Bundle bundle = new Bundle();
   bundle.putString("edttext", "value");
     // set Fragmentclass Arguments
    Fragmentclass fragobj = new Fragmentclass();
    fragobj.setArguments(bundle);
    FragmentManager manager = getFragmentManager();
    FragmentTransaction transaction = manager.beginTransaction();
    transaction.add(R.id.container,fragobj,YOUR_FRAGMENT_STRING_TAG);
    transaction.addToBackStack(null);
    transaction.commit();

Во фрагменте

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
     Bundle bundle= getArguments();
      if(bundle!=null){
         String strtext = bundle.getString("value"); 
       }

    return inflater.inflate(R.layout.fragment, container, false);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...