无法通过活动导航到其他活动

时间:2018-11-23 18:17:17

标签: android firebase-realtime-database

我有2个活动,它们从firebase存储/获取数据,不同的数据但是它们彼此相关。

第一个活动例如在列表视图中存储不同的食物,当我单击其中一个项目时,我进入了第二个活动,可以在第一个活动中选择的第一个项目下存储不同的东西。因此,例如,如果单击“ PIZZA”,我将进入一个新活动,可以在其中存储“意大利比萨”。这很好。但是我想有一个中间活动,该活动将在我的第一个活动之后出现,在这个中间活动中,我想有一个将我带到第二个活动的按钮。

因此在第一个和第二个活动之间没问题,就像一个护身符。但是,当我尝试使用带有按钮的中间活动时,它不起作用。我想它与中间活动有关,它与其他活动没有“连接”到数据库。但我不知道,需要帮助:)

尝试单击添加按钮时出现此错误:

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 :(得分:0)

让我们比较一下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 的值,但是现在用于启动{ {1}}没有任何额外功能,因此两个变量均为Intent。这将导致Notater

null之前缺少两行:

NullPointerException

(请注意,为了能够访问startActivity()中的leggtil.putExtra(Jobbliste.jobbId, id); leggtil.putExtra(Jobbliste.jobbnavn, navn); 变量 id navn ,您必须将它们设置为String。)