【问题标题】:NullPointerException in retrieving data from Firebase in Android Studio在 Android Studio 中从 Firebase 检索数据时出现 NullPointerException
【发布时间】:2017-04-07 19:11:11
【问题描述】:

我正在尝试从 firebase 数据库中检索值并将其存储在列表视图中,但应用程序正在关闭。 logCat 中的异常来了

java.lang.NullPointerException: 尝试调用虚方法 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' 空对象引用 在 com.example.dell.week11.MainActivity$1.onDataChange(MainActivity.java:60)

这是主要活动

package com.example.dell.week11;
import android.app.Activity; 
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import org.w3c.dom.Text;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

ListView listView;
DatabaseReference databasefaq;
List<Faq> faqList;
@Override

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    databasefaq= FirebaseDatabase.getInstance().getReference("FAQ");
    listView=(ListView)findViewById(R.id.listView);
    faqList=new ArrayList<>();
}

@Override
protected void onStart() {
    super.onStart();

    databasefaq.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            faqList.clear();
            for(DataSnapshot faqSnapshot:dataSnapshot.getChildren())
            {
                Faq faq=faqSnapshot.getValue(Faq.class);
                faqList.add(faq);

            }
            FaqList adapter=new FaqList(MainActivity.this,faqList);
            listView.setAdapter(adapter);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater=getMenuInflater();
    inflater.inflate(R.menu.menu,menu);

    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if(item.getItemId()==R.id.add)
    {
        Intent i=new Intent(MainActivity.this,AddActivity.class);
        startActivity(i);
    }
    return super.onOptionsItemSelected(item);
  }
}

接下来是CustomAdapter FaqList:

package com.example.dell.week11;
import android.app.Activity;
import android.text.Layout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

import java.util.List;

/**
 * Created by Dell on 4/7/2017.
*/
 public class FaqList extends ArrayAdapter<Faq> {
 private Activity context;
 List<Faq> faqList;

public FaqList(Activity context,List<Faq> faqList){

    super(context,R.layout.list_layout,faqList);
    this.context=context;
    this.faqList=faqList;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater=context.getLayoutInflater();
    View listViewItem=inflater.inflate(R.layout.list_layout,null,true);

    TextView q=(TextView)listViewItem.findViewById(R.id.questiontv);
    TextView a=(TextView)listViewItem.findViewById(R.id.answertv);

    Faq faq=faqList.get(position);
    q.setText(faq.getFaqQuestion());
    a.setText(faq.getFaqAnswer());
    return listViewItem;
}
}

这是模型类

package com.example.dell.week11;

 /**
 * Created by Dell on 4/5/2017.
*/
public class Faq {
String faqid,faqQuestion,faqAnswer;

public Faq() {
}

public Faq(String faqid, String faqQuestion, String faqAnswer) {
    this.faqid = faqid;
    this.faqQuestion = faqQuestion;
    this.faqAnswer = faqAnswer;
}

public String getFaqid() {
    return faqid;
}

public String getFaqQuestion() {
    return faqQuestion;
}

public String getFaqAnswer() {
    return faqAnswer;
}
}

【问题讨论】:

    标签: android listview android-studio nullpointerexception firebase-realtime-database


    【解决方案1】:

    您没有在 onCreate 方法中调用 setContentView

    【讨论】:

    • 虽然此代码可能会回答问题,但提供有关 如何 和/或 为什么 解决问题的附加 context 将改善答案的长度长期价值。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人!请edit您的答案添加解释,并说明适用的限制和假设。提及为什么这个答案比其他答案更合适也没有什么坏处。
    【解决方案2】:

    确保调用setContentView(R.whatever),然后才能在其中找到任何 id,并且布局 XML 中的 ListView 必须定义为

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        databasefaq= FirebaseDatabase.getInstance().getReference("FAQ");
        setContentView(R.layout.xyz);   //you missed this line
        listView=(ListView)findViewById(R.id.listView);
        faqList=new ArrayList<>();
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      相关资源
      最近更新 更多