Не удается активировать переход к другому виду деятельности - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть 2 действия, которые хранят / получают данные из базы данных, разные данные, но они связаны друг с другом.

В первом упражнении, например, хранятся различные блюда из пищи в виде списка, и когда я нажимаю на один из элементов, я попадаю во второе действие, где я могу хранить разные вещи под первым элементом, выбранным в первом задании.,Так, например, если я нажму на «ПИЦЦА», я попаду в новое занятие, где я могу хранить «Итальянскую пиццу».И это работает нормально.Но я хочу, чтобы средняя активность появлялась после моей первой активности, и в этой средней активности мне нужна кнопка, которая возвращает меня ко второму виду деятельности.

Так что между первым и вторым действием это не проблема, работает как заклинание.Но когда я пытаюсь использовать это среднее действие с кнопкой, оно не работает.Я предполагаю, что это как-то связано со средней активностью, что она не «связана» с базой данных для других операций.Но я не знаю, нужна помощь:)

Я получаю эту ошибку при попытке нажать кнопку добавления:

java.lang.NullPointerException: Can't pass null for argument 'pathString' in child()
    at com.google.firebase.database.DatabaseReference.child(Unknown Source:40)

Первое действие:

public class Jobbliste extends AppCompatActivity {

    DatabaseReference databaseJobber;

    public static final String jobbnavn = "jobbnavn";
    public static final String jobbId = "jobbid";


    TextView jobbliste
    ListView listjobber;
    ImageView leggtiljobb;

    List<Jobber> listjobb;

    {

    }

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

        databaseJobber = FirebaseDatabase.getInstance().getReference("Jobber");
        databaseVerktøy = FirebaseDatabase.getInstance().getReference("Verktøy");
        databaseAnsatt = FirebaseDatabase.getInstance().getReference("Ansatte");


        jobbliste = (TextView) findViewById(R.id.tvjobbliste);
        listjobber = (ListView) findViewById(R.id.lvjobbliste);

        listjobber.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {


                Jobber jobber = listjobb.get(i);

                Intent intent = new Intent(getApplicationContext(), MainActivity.class);

                intent.putExtra(jobbId, jobber.getJobbId());
                intent.putExtra(jobbnavn, jobber.getJobbnavn());

                startActivity(intent);

                return false;


            }
        });


        leggtiljobb = (ImageView) findViewById(R.id.tvleggtiljobb);

        listjobb = new ArrayList<>();
        søkjobb = new ArrayList<>();

        leggtiljobb.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent leggtil = new Intent(Jobbliste.this, Leggtiljobb.class);
                startActivity(leggtil);

            }
        });


    }

    @Override
    protected void onStart() {
        super.onStart();

        databaseJobber.orderByChild("jobbnavn").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                listjobb.clear();

                for (DataSnapshot jobberSnapshot : dataSnapshot.getChildren()) {

                    final Jobber jobber = jobberSnapshot.getValue(Jobber.class);

                    listjobb.add(jobber);

                    final listJobber adapter = new listJobber(Jobbliste.this, listjobb);
                    listjobber.setAdapter(adapter);

                    adapter.notifyDataSetChanged();

                }

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }
}

Вторая активность:

public class Notater extends AppCompatActivity {

    public static final String jobbnavn = "jobbnavn";
    public static final String jobbId = "jobbid";


    TextView tvjobbnavn;
    EditText etnotater;
    Button btnlagrenotat;
    ListView lvnotater;
    Button btntest;
    TextView tvjobbnavn1;

    DatabaseReference databaseNotater;
    DatabaseReference databaseJobber;

    List<Notat> notater;
    List<Jobber> listjobb;

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


        tvjobbnavn = (TextView) findViewById(R.id.tvjobbnavn);
        tvjobbnavn1 = (TextView) findViewById(R.id.tvjobbnavn1);

        etnotater = (EditText) findViewById(R.id.etnotater);
        btnlagrenotat = (Button) findViewById(R.id.btnlagrenotat);
        lvnotater = (ListView) findViewById(R.id.lvnotater);
        btntest = (Button) findViewById(R.id.btntest);
        lvnotater.setItemsCanFocus(true);


        Intent intent = getIntent();

        notater = new ArrayList<>();
        listjobb = new ArrayList<>();


        String id = intent.getStringExtra(Jobbliste.jobbId);
        String navn = intent.getStringExtra(Jobbliste.jobbnavn);

        tvjobbnavn.setText(navn);


        databaseNotater = FirebaseDatabase.getInstance().getReference("Notater").child(id);
        databaseJobber = FirebaseDatabase.getInstance().getReference("Jobber").child(id);


        btnlagrenotat.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                lagrenotat();

            }
        });

    }

    @Override
    protected void onStart() {
        super.onStart();

        databaseNotater.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                notater.clear();

                for (DataSnapshot notatsnapshot : dataSnapshot.getChildren()) {
                    Notat notat = notatsnapshot.getValue(Notat.class);
                    notater.add(notat);


                }
                listNotater notatlistadapter = new listNotater(Notater.this, notater);

                lvnotater.setAdapter(notatlistadapter);

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

    private void lagrenotat() {
        String notatavn = etnotater.getText().toString().trim();


        if (!TextUtils.isEmpty(notatavn)) {
            String id = databaseNotater.push().getKey();

            Notat notat = new Notat(id, notatavn);
            databaseNotater.child(id).setValue(notat);

        } else {
            Toast.makeText(this, "Skriv noe", Toast.LENGTH_SHORT).show();
        }

    }
}

Моя средняя активность:

public class MainActivity extends AppCompatActivity {

    public static final String jobbnavn = "jobbnavn";
    public static final String jobbId = "jobbid";

    Button add;
    TextView text;

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

        add = (Button) findViewById(R.id.add);
        text = (TextView) findViewById(R.id.text);

        Intent intent = getIntent();


        String id = intent.getStringExtra(Jobbliste.jobbId);
        String navn = intent.getStringExtra(Jobbliste.jobbnavn);

        text.setText(navn);

        add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent leggtil = new Intent(MainActivity.this, Notater.class);
                startActivity(leggtil);


            }
        });
    }
}

1 Ответ

0 голосов
/ 23 ноября 2018

Давайте сравним, как вы начинаете Notater

С Jobbliste в вашей первой рабочей версии:

listjobber.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
    @Override
    public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
        Jobber jobber = listjobb.get(i);

        Intent intent = new Intent(getApplicationContext(), MainActivity.class);
        intent.putExtra(jobbId, jobber.getJobbId());
        intent.putExtra(jobbnavn, jobber.getJobbnavn());
        startActivity(intent);

        return false;
    }
});

С MainActivity:

add.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent leggtil = new Intent(MainActivity.this, Notater.class);
            startActivity(leggtil);
        }
    });

В Notater вы пытаетесь получить значения для id и navn , но сейчас Intent, который использовался для запуска Notater, не имеет никаких дополнительных функций, поэтомуобе переменные null.Это приводит к NullPointerException.

. Перед startActivity() пропущены две строки:

leggtil.putExtra(Jobbliste.jobbId, id);
leggtil.putExtra(Jobbliste.jobbnavn, navn);

(Обратите внимание, что для доступа к переменным String id и navn из onClick(), их нужно сделать final.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...