android - 无法让 Activity 导航到另一个 Activity

标签 android firebase-realtime-database

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

例如,第一个 Activity 在 ListView 中存储不同的食物菜肴,当我点击其中一个项目时,我进入第二个 Activity ,在那里我可以在第一个 Activity 中选择的第一个项目下存储不同的东西。因此,例如,如果我单击“PIZZA”,我将进入一个新 Activity ,我可以在其中存储“Italian Pizza”。这工作正常。但是我想要在我的第一个 Activity 之后出现一个中间 Activity ,并且在这个中间 Activity 中我想要一个按钮让我进入我的第二个 Activity 。

所以在第一个和第二个 Activity 之间没有问题,就像一个魅力。但是当我尝试通过按钮使用这个中间 Activity 时,它不起作用。我想它必须与中间 Activity 有关,它没有与其他 Activity 的数据库“连接”。但我不知道,需要帮助:)

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

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

第一个 Activity :

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) {

            }
        });
    }
}

第二个 Activity :

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();
        }

    }
}

我的中间 Activity :

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);


            }
        });
    }
}

最佳答案

让我们比较一下你是如何开始的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 ,您尝试获取 idnavn 的值,但现在 Intent用于启动 Notater没有任何额外内容,所以两个变量都是 null .这会导致 NullPointerException .

startActivity() 之前少了两行:

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

(请注意,为了能够从 String 访问 onClick() 变量 idnavn ,您必须将它们设为 final 。 )

关于android - 无法让 Activity 导航到另一个 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53451367/

相关文章:

javascript - 在 Cordova Android 应用程序上使用后退按钮关闭模态窗口

android - 在 firebase 上保存数据时应用程序崩溃并出现 'java.lang.StackOverflowError: stack size 8MB' 错误

java - Android Firebase 如何处理实时服务器到本地数据库的连接

javascript - Android - WebView 中的 Javascript

android - 从 Android 调用 Google Cloud Endpoints API 时出现错误 413(请求实体太大)

android - 从 Firebase 读取数据时发生 UnrecognizedPropertyException

android - 使用 Firebase 数据库首先显示新项目

ios - 如何使用 Swift 从 UITableViewCell 中删除 Firebase 中的特定子节点

Android:以编程方式设置单选按钮文本的背景颜色

Android 有没有办法知道哪些应用程序在通知区域显示通知?