Java Firebase数据库出现问题“;“onDataChange”;方法NullPointerException
您好,如果这个问题很明显,很抱歉,但两天之后,当Java Firebase数据库出现问题“;“onDataChange”;方法NullPointerException,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,您好,如果这个问题很明显,很抱歉,但两天之后,当 E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.myapplicationteeeeeeeeeest, PID: 13439 java.lang.NullPointerException: Attempt to invoke virtual method 'void java.util.ArrayList.add(int, java.lang.Object
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.myapplicationteeeeeeeeeest, PID: 13439
java.lang.NullPointerException: Attempt to invoke virtual method 'void java.util.ArrayList.add(int, java.lang.Object)' on a null object reference
at com.example.myapplicationteeeeeeeeeest.ui.FSettings.SettingsFragment$4.onDataChange(SettingsFragment.java:336)
at com.google.firebase.database.Query$1.onDataChange(com.google.firebase:firebase-database@@19.0.0:179)
at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@19.0.0:75)
at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@19.0.0:63)
at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@19.0.0:55)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
I/Process: Sending signal. PID: 13439 SIG: 9
Disconnected from the target VM, address: 'localhost:8617', transport: 'socket'
我知道Firebase是异步的,返回值为null,但它是随机出现的。
这是它所使用的类
package com.example.myapplicationteeeeeeeeeest.ui.FSettings;
import ...
public class SettingsFragment extends Fragment {
private SettingsViewModel sendViewModel;
private Recipe recipe_1,recipe_2,recipe_3,recipe_4,recipe_5,recipe_6,recipe_7,recipe_8,recipe_9,recipe_10,recipe_11,recipe_12,recipe_13,recipe_14,recipe_15,recipe_16,recipe_17,recipe_18,recipe_19,recipe_20;
private ArrayList<String> ingridients1,ingridients2,ingridients3,ingridients4,ingridients5,ingridients6,ingridients7,ingridients8,ingridients9,ingridients10,ingridients11,ingridients12,ingridients13,ingridients14,ingridients15,ingridients16,ingridients17,ingridients18,ingridients19,ingridients20;
private View root;
private String[] resultAmount,resultIngredients;
ExpandableListView expandableListView;
ExpandableListAdapter expandableListAdapter;
List<String> expandableListTitle;
HashMap<String, List<String>> expandableListDetail;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
sendViewModel =
ViewModelProviders.of( this ).get( SettingsViewModel.class );
View root = inflater.inflate( R.layout.fragment_settings, container, false );
expandableListView = (ExpandableListView) root.findViewById(R.id.expandableListView);
expandableListDetail = ExpandableListDataPump.getData();
expandableListTitle = new ArrayList<String>(expandableListDetail.keySet());
expandableListAdapter = new CustomExpandableListAdapter(getActivity(), expandableListTitle, expandableListDetail);
expandableListView.setAdapter(expandableListAdapter);
expandableListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {
@Override
public void onGroupExpand(int groupPosition) {
Toast.makeText(getActivity().getApplicationContext(),
expandableListTitle.get(groupPosition) + " List Expanded.",
Toast.LENGTH_SHORT).show();
}
});
expandableListView.setOnGroupCollapseListener(new ExpandableListView.OnGroupCollapseListener() {
@Override
public void onGroupCollapse(int groupPosition) {
Toast.makeText(getActivity().getApplicationContext(),
expandableListTitle.get(groupPosition) + " List Collapsed.",
Toast.LENGTH_SHORT).show();
}
});
expandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
Toast.makeText(
getActivity().getApplicationContext(),
expandableListTitle.get(groupPosition)
+ " -> "
+ expandableListDetail.get(
expandableListTitle.get(groupPosition)).get(
childPosition), Toast.LENGTH_SHORT
).show();
return false;
}
});
obtainFirebase();
return root;
}
private void initIngredients() {
ingridients1 = new ArrayList<>( );
ingridients2 = new ArrayList<>( );
ingridients3 = new ArrayList<>( );
ingridients4 = new ArrayList<>( );
ingridients5 = new ArrayList<>( );
ingridients6 = new ArrayList<>( );
ingridients7 = new ArrayList<>( );
ingridients8 = new ArrayList<>( );
ingridients9 = new ArrayList<>( );
ingridients10 = new ArrayList<>( );
ingridients11 = new ArrayList<>( );
ingridients12 = new ArrayList<>( );
ingridients13 = new ArrayList<>( );
ingridients14 = new ArrayList<>( );
ingridients15 = new ArrayList<>( );
ingridients16 = new ArrayList<>( );
ingridients17 = new ArrayList<>( );
ingridients18 = new ArrayList<>( );
ingridients19 = new ArrayList<>( );
ingridients20 = new ArrayList<>( );
resultAmount = new String[15];
resultIngredients = new String[15];
}
public void obtainFirebase() {
FirebaseDatabase.getInstance().getReference().child( "recipes" )
.addListenerForSingleValueEvent( new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
if( snapshot.getKey().equals("recipe_2")) {
//do your stuff
recipe_2 = snapshot.getValue( Recipe.class );
ArrayList<String> amountIngridients = new ArrayList<>( );
ArrayList<String> ingridients = new ArrayList<>( );
String[] resultAmount = new String[15];
resultAmount = Arrays.copyOf(recipe_2.getAmountOfIngredients().values().toArray(),recipe_2.getAmountOfIngredients().values().toArray().length,String[].class );
Collections.addAll( amountIngridients,resultAmount );
String[] resultIngredients = new String[15];
resultIngredients = Arrays.copyOf(recipe_2.getIngredients().values().toArray(),recipe_2.getIngredients().values().toArray().length,String[].class );
Collections.addAll( ingridients,resultAmount );
for (int i = 0; i < resultAmount.length;i++) {
ingridients2.add( i,resultAmount[i]+resultIngredients[i]);
}
Arrays.fill( resultAmount,null );
Arrays.fill( resultIngredients,null );
}
if( snapshot.getKey().equals("recipe_3")) {
//do your stuff
recipe_3 = snapshot.getValue( Recipe.class );
ArrayList<String> amountIngridients = new ArrayList<>( );
ArrayList<String> ingridients = new ArrayList<>( );
String[] resultAmount = new String[15];
resultAmount = Arrays.copyOf(recipe_3.getAmountOfIngredients().values().toArray(),recipe_3.getAmountOfIngredients().values().toArray().length,String[].class );
Collections.addAll( amountIngridients,resultAmount );
String[] resultIngredients = new String[15];
resultIngredients = Arrays.copyOf(recipe_3.getIngredients().values().toArray(),recipe_3.getIngredients().values().toArray().length,String[].class );
Collections.addAll( ingridients,resultAmount );
for (int i = 0; i < resultAmount.length;i++) {
ingridients3.add( i,resultAmount[i]+resultIngredients[i]);
}
Arrays.fill( resultAmount,null );
Arrays.fill( resultIngredients,null );
}
if( snapshot.getKey().equals("recipe_4")) {
//do your stuff
recipe_4 = snapshot.getValue( Recipe.class );
ArrayList<String> amountIngridients = new ArrayList<>( );
ArrayList<String> ingridients = new ArrayList<>( );
String[] resultAmount = new String[15];
resultAmount = Arrays.copyOf(recipe_4.getAmountOfIngredients().values().toArray(),recipe_4.getAmountOfIngredients().values().toArray().length,String[].class );
Collections.addAll( amountIngridients,resultAmount );
String[] resultIngredients = new String[15];
resultIngredients = Arrays.copyOf(recipe_4.getIngredients().values().toArray(),recipe_4.getIngredients().values().toArray().length,String[].class );
Collections.addAll( ingridients,resultAmount );
for (int i = 0; i < resultAmount.length;i++) {
ingridients4.add( i,resultAmount[i]+resultIngredients[i]);
}
Arrays.fill( resultAmount,null );
Arrays.fill( resultIngredients,null );
}
if( snapshot.getKey().equals("recipe_5")) {
//do your stuff
recipe_5 = snapshot.getValue( Recipe.class );
ArrayList<String> amountIngridients = new ArrayList<>( );
ArrayList<String> ingridients = new ArrayList<>( );
String[] resultAmount = new String[15];
resultAmount = Arrays.copyOf(recipe_5.getAmountOfIngredients().values().toArray(),recipe_5.getAmountOfIngredients().values().toArray().length,String[].class );
Collections.addAll( amountIngridients,resultAmount );
String[] resultIngredients = new String[15];
resultIngredients = Arrays.copyOf(recipe_5.getIngredients().values().toArray(),recipe_5.getIngredients().values().toArray().length,String[].class );
Collections.addAll( ingridients,resultAmount );
for (int i = 0; i < resultAmount.length;i++) {
ingridients5.add( i,resultAmount[i]+resultIngredients[i]);
}
Arrays.fill( resultAmount,null );
Arrays.fill( resultIngredients,null );
}
if( snapshot.getKey().equals("recipe_6")) {
//do your stuff
recipe_6 = snapshot.getValue( Recipe.class );
ArrayList<String> amountIngridients = new ArrayList<>( );
ArrayList<String> ingridients = new ArrayList<>( );
String[] resultAmount = new String[15];
resultAmount = Arrays.copyOf(recipe_6.getAmountOfIngredients().values().toArray(),recipe_6.getAmountOfIngredients().values().toArray().length,String[].class );
Collections.addAll( amountIngridients,resultAmount );
String[] resultIngredients = new String[15];
resultIngredients = Arrays.copyOf(recipe_6.getIngredients().values().toArray(),recipe_6.getIngredients().values().toArray().length,String[].class );
Collections.addAll( ingridients,resultAmount );
for (int i = 0; i < resultAmount.length;i++) {
ingridients6.add( i,resultAmount[i]+resultIngredients[i]);
}
Arrays.fill( resultAmount,null );
Arrays.fill( resultIngredients,null );
}
if( snapshot.getKey().equals("recipe_7")) {
//do your stuff
recipe_7 = snapshot.getValue( Recipe.class );
ArrayList<String> amountIngridients = new ArrayList<>( );
ArrayList<String> ingridients = new ArrayList<>( );
String[] resultAmount = new String[15];
resultAmount = Arrays.copyOf(recipe_7.getAmountOfIngredients().values().toArray(),recipe_7.getAmountOfIngredients().values().toArray().length,String[].class );
Collections.addAll( amountIngridients,resultAmount );
String[] resultIngredients = new String[15];
resultIngredients = Arrays.copyOf(recipe_7.getIngredients().values().toArray(),recipe_7.getIngredients().values().toArray().length,String[].class );
Collections.addAll( ingridients,resultAmount );
for (int i = 0; i < resultAmount.length;i++) {
ingridients7.add( i,resultAmount[i]+resultIngredients[i]);
}
Arrays.fill( resultAmount,null );
Arrays.fill( resultIngredients,null );
}
if( snapshot.getKey().equals("recipe_8")) {
//do your stuff
recipe_8 = snapshot.getValue( Recipe.class );
ArrayList<String> amountIngridients = new ArrayList<>( );
ArrayList<String> ingridients = new ArrayList<>( );
String[] resultAmount = new String[15];
resultAmount = Arrays.copyOf(recipe_8.getAmountOfIngredients().values().toArray(),recipe_8.getAmountOfIngredients().values().toArray().length,String[].class );
Collections.addAll( amountIngridients,resultAmount );
String[] resultIngredients = new String[15];
resultIngredients = Arrays.copyOf(recipe_8.getIngredients().values().toArray(),recipe_8.getIngredients().values().toArray().length,String[].class );
Collections.addAll( ingridients,resultAmount );
for (int i = 0; i < resultAmount.length;i++) {
ingridients8.add( i,resultAmount[i]+resultIngredients[i]);
}
Arrays.fill( resultAmount,null );
Arrays.fill( resultIngredients,null );
}
//Same for recipes 9-14 just too many chars for so
}
if( snapshot.getKey().equals("recipe_15")) {
//do your stuff
recipe_15 = snapshot.getValue( Recipe.class );
ArrayList<String> amountIngridients = new ArrayList<>( );
ArrayList<String> ingridients = new ArrayList<>( );
String[] resultAmount = new String[15];
resultAmount = Arrays.copyOf(recipe_15.getAmountOfIngredients().values().toArray(),recipe_15.getAmountOfIngredients().values().toArray().length,String[].class );
Collections.addAll( amountIngridients,resultAmount );
String[] resultIngredients = new String[15];
resultIngredients = Arrays.copyOf(recipe_15.getIngredients().values().toArray(),recipe_15.getIngredients().values().toArray().length,String[].class );
Collections.addAll( ingridients,resultAmount );
for (int i = 0; i < resultAmount.length;i++) {
ingridients15.add( i,resultAmount[i]+resultIngredients[i]);
}
Arrays.fill( resultAmount,null );
Arrays.fill( resultIngredients,null );
}
if( snapshot.getKey().equals("recipe_16")) {
//do your stuff
recipe_16 = snapshot.getValue( Recipe.class );
ArrayList<String> amountIngridients = new ArrayList<>( );
ArrayList<String> ingridients = new ArrayList<>( );
String[] resultAmount = new String[15];
resultAmount = Arrays.copyOf(recipe_16.getAmountOfIngredients().values().toArray(),recipe_16.getAmountOfIngredients().values().toArray().length,String[].class );
Collections.addAll( amountIngridients,resultAmount );
String[] resultIngredients = new String[15];
resultIngredients = Arrays.copyOf(recipe_16.getIngredients().values().toArray(),recipe_16.getIngredients().values().toArray().length,String[].class );
Collections.addAll( ingridients,resultAmount );
for (int i = 0; i < resultAmount.length;i++) {
ingridients16.add( i,resultAmount[i]+resultIngredients[i]);
}
Arrays.fill( resultAmount,null );
Arrays.fill( resultIngredients,null );
}
if( snapshot.getKey().equals("recipe_17")) {
//do your stuff
recipe_17 = snapshot.getValue( Recipe.class );
ArrayList<String> amountIngridients = new ArrayList<>( );
ArrayList<String> ingridients = new ArrayList<>( );
String[] resultAmount = new String[15];
resultAmount = Arrays.copyOf(recipe_17.getAmountOfIngredients().values().toArray(),recipe_17.getAmountOfIngredients().values().toArray().length,String[].class );
Collections.addAll( amountIngridients,resultAmount );
String[] resultIngredients = new String[15];
resultIngredients = Arrays.copyOf(recipe_17.getIngredients().values().toArray(),recipe_17.getIngredients().values().toArray().length,String[].class );
Collections.addAll( ingridients,resultAmount );
for (int i = 0; i < resultAmount.length;i++) {
ingridients17.add( i,resultAmount[i]+resultIngredients[i]);
}
Arrays.fill( resultAmount,null );
Arrays.fill( resultIngredients,null );
}
if( snapshot.getKey().equals("recipe_18")) {
//do your stuff
recipe_18 = snapshot.getValue( Recipe.class );
ArrayList<String> amountIngridients = new ArrayList<>( );
ArrayList<String> ingridients = new ArrayList<>( );
String[] resultAmount = new String[15];
resultAmount = Arrays.copyOf(recipe_18.getAmountOfIngredients().values().toArray(),recipe_18.getAmountOfIngredients().values().toArray().length,String[].class );
Collections.addAll( amountIngridients,resultAmount );
String[] resultIngredients = new String[15];
resultIngredients = Arrays.copyOf(recipe_18.getIngredients().values().toArray(),recipe_18.getIngredients().values().toArray().length,String[].class );
Collections.addAll( ingridients,resultAmount );
for (int i = 0; i < resultAmount.length;i++) {
ingridients18.add( i,resultAmount[i]+resultIngredients[i]);
}
Arrays.fill( resultAmount,null );
Arrays.fill( resultIngredients,null );
}
if( snapshot.getKey().equals("recipe_19")) {
//do your stuff
recipe_19 = snapshot.getValue( Recipe.class );
ArrayList<String> amountIngridients = new ArrayList<>( );
ArrayList<String> ingridients = new ArrayList<>( );
String[] resultAmount = new String[15];
resultAmount = Arrays.copyOf(recipe_19.getAmountOfIngredients().values().toArray(),recipe_19.getAmountOfIngredients().values().toArray().length,String[].class );
Collections.addAll( amountIngridients,resultAmount );
String[] resultIngredients = new String[15];
resultIngredients = Arrays.copyOf(recipe_19.getIngredients().values().toArray(),recipe_19.getIngredients().values().toArray().length,String[].class );
Collections.addAll( ingridients,resultAmount );
for (int i = 0; i < resultAmount.length;i++) {
ingridients19.add( i,resultAmount[i]+resultIngredients[i]);
}
Arrays.fill( resultAmount,null );
Arrays.fill( resultIngredients,null );
}
if( snapshot.getKey().equals("recipe_20")) {
//do your stuff
recipe_20 = snapshot.getValue( Recipe.class );
ArrayList<String> amountIngridients = new ArrayList<>( );
ArrayList<String> ingridients = new ArrayList<>( );
String[] resultAmount = new String[15];
resultAmount = Arrays.copyOf(recipe_20.getAmountOfIngredients().values().toArray(),recipe_20.getAmountOfIngredients().values().toArray().length,String[].class );
Collections.addAll( amountIngridients,resultAmount );
String[] resultIngredients = new String[15];
resultIngredients = Arrays.copyOf(recipe_20.getIngredients().values().toArray(),recipe_20.getIngredients().values().toArray().length,String[].class );
Collections.addAll( ingridients,resultAmount );
for (int i = 0; i < resultAmount.length;i++) {
ingridients20.add( i,resultAmount[i]+resultIngredients[i]);
}
Arrays.fill( resultAmount,null );
Arrays.fill( resultIngredients,null );
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
} );
}
}
package com.example.myapplicationteest.ui.FSettings;
导入。。。
公共类设置片段扩展片段{
私有设置查看模型sendViewModel;
私人配方配方1、配方2、配方3、配方4、配方5、配方6、配方7、配方8、配方9、配方10、配方11、配方12、配方13、配方14、配方15、配方16、配方17、配方18、配方19、配方20;
专用阵列列表IngRidinents1、IngRidinents2、IngRidinents3、IngRidinents4、IngRidinents5、IngRidinents6、IngRidinents7、IngRidinents8、IngRidinents9、IngRidinents10、IngRidinents11、IngRidinents12、IngRidinents13、IngRidinents14、IngRidinents15、IngRidinents16、IngRidinents17、IngRidinents18、IngRidinents19、IngRidinents20;
私有视图根;
私有字符串[]结果计数,结果元素;
ExpandableListView ExpandableListView;
ExpandableListAdapter ExpandableListAdapter;
列表可扩展列表标题;
HashMapExpandableListDetail;
公共视图onCreateView(@NonNull layoutiner充气机,
视图组容器,捆绑包savedInstanceState){
sendViewModel=
ViewModelProviders.of(this.get)(SettingsViewModel.class);
视图根=充气机。充气(R.layout.fragment\u设置,容器,错误);
expandableListView=(expandableListView)root.findViewById(R.id.expandableListView);
expandableListDetail=ExpandableListDataPump.getData();
expandableListTitle=newArrayList(expandableListDetail.keySet());
expandableListAdapter=新的CustomExpandableListAdapter(getActivity(),expandableListTitle,expandableListDetail);
setAdapter(expandableListAdapter);
expandableListView.setOnGroupExpandListener(新的expandableListView.OnGroupExpandListener(){
@凌驾
public void onGroupExpand(int groupPosition){
Toast.makeText(getActivity().getApplicationContext(),
expandableListTitle.get(groupPosition)+“列表已展开”,
吐司。长度(短)。show();
}
});
expandableListView.setOnGroupCollapseListener(新的expandableListView.OnGroupCollapseListener(){
@凌驾
公共void-onGroupCollapse(int-groupPosition){
Toast.makeText(getActivity().getApplicationContext(),
expandableListTitle.get(groupPosition)+“列表已折叠。”,
吐司。长度(短)。show();
}
});
expandableListView.setOnChildClickListener(新的expandableListView.OnChildClickListener(){
@凌驾
公共布尔onChildClick(ExpandableListView父视图,视图v,
int groupPosition、int childPosition、long id){
Toast.makeText(
getActivity().getApplicationContext(),
expandableListTitle.get(groupPosition)
+ " -> "
+expandableListDetail.get(
expandableListTitle.get(groupPosition)).get(
childPosition)、Toast.LENGTH\u SHORT
).show();
返回false;
}
});
获得火基();
返回根;
}
私人有限公司(){
ingridients1=新的ArrayList();
ingridients2=新的ArrayList();
ingridients3=新的ArrayList();
ingridients4=新的ArrayList();
ingridients5=新的ArrayList();
ingridients6=新的ArrayList();
ingridients7=新的ArrayList();
ingridients8=新的ArrayList();
ingridients9=新的ArrayList();
ingridients10=新的ArrayList();
ingridients11=新的ArrayList();
ingridients12=新的ArrayList();
ingridients13=新的ArrayList();
Ingridients4=新的ArrayList();
ingridients15=新的ArrayList();
ingridients16=新的ArrayList();
ingridients17=新的ArrayList();
ingridients18=新的ArrayList();
ingridients19=新的ArrayList();
ingridients20=新的ArrayList();
resultAmount=新字符串[15];
ResultingElements=新字符串[15];
}
公共空间获取Firebase(){
FirebaseDatabase.getInstance().getReference().child(“配方”)
.addListenerForSingleValueEvent(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
对于(DataSnapshot快照:DataSnapshot.getChildren()){
if(snapshot.getKey().equals(“配方2”)){
//做你的事
recipe_2=snapshot.getValue(recipe.class);
ArrayList amountIngridients=新的ArrayList();
ArrayList ingridients=新的ArrayList();
String[]resultAmount=新字符串[15];
resultAmount=Arrays.copyOf(配方2.GetAmountFingRedients().values().toArray(),配方2.GetAmountFingRedients().values().toArray().length,字符串[].class);
Collections.addAll(amountingrides,resultAmount);
字符串[]结果元素=新字符串[15];
ResultingCredits=Arrays.copyOf(配方2.GetComponents().values().toArray(),配方2.GetComponents().values().toArray().length,字符串[].class);
收集