我有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);
}
});
}
}
答案 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
。)