我有 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
,您尝试获取 id 和 navn 的值,但现在 Intent
用于启动 Notater
没有任何额外内容,所以两个变量都是 null
.这会导致 NullPointerException
.
startActivity()
之前少了两行:
leggtil.putExtra(Jobbliste.jobbId, id);
leggtil.putExtra(Jobbliste.jobbnavn, navn);
(请注意,为了能够从 String
访问 onClick()
变量 id 和 navn ,您必须将它们设为 final
。 )
关于android - 无法让 Activity 导航到另一个 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53451367/