2016-12-23 3 views
0

Я хочу извлечь данные из базы данных Firebase. Имя моей таблицы - «cardornek». И я устанавливаю разрешения для чтения/записи.java.util.ArrayList.size() 'на ссылке нулевого объекта

Но я получаю эту ошибку "java.util.ArrayList.size()" по ссылке на нулевой объект ". Есть идеи?

RecyclerViewAdapter.java

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> { 

private ArrayList<String> values=null; 
RecyclerViewAdapter(ArrayList<String> values) { 
    this.values = values; 
} 
@Override 
public RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_view_item,parent,false)); 
} 


@Override 
public void onBindViewHolder(RecyclerViewAdapter.ViewHolder holder, int position) 
{ 
    holder.name.setText(values.get(position)); 
} 

@Override 
public int getItemCount() { 
    return values.size(); 
} 

public class ViewHolder extends RecyclerView.ViewHolder 
{ 
    private TextView name; 
    ViewHolder(View itemView) { 
     super(itemView); 
     name = (TextView) itemView.findViewById(R.id.list_item_text); 
    } 
} 

MainActivity.java

public class MainActivity extends AppCompatActivity { 
private RecyclerView recyclerView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    recyclerView = (RecyclerView) findViewById(R.id.recycler_view); 
    recyclerView.setHasFixedSize(true); 
    recyclerView.setLayoutManager(new LinearLayoutManager(this)); 
    new GetDataFromFirebase().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 

    // Read from the database 
    FirebaseDatabase database = FirebaseDatabase.getInstance(); 
    DatabaseReference myRef = database.getReference("cardornek"); 

    myRef.addValueEventListener(new ValueEventListener() { 


     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      ArrayList<String> values = (ArrayList<String>) dataSnapshot.getValue(); 
      recyclerView.setAdapter(new RecyclerViewAdapter(values)); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      System.out.println("Failed to read value." + databaseError.toException()); 
     } 
    }); 
+0

'dataSnapshot.getValue()' возвращает 'null', поэтому вы передаете' null' в конструктор вашего 'RecyclerViewAdapter' и когда вызовы android' getItemCount() 'вы получаете' NullPointerException' – larsgrefer

+0

Итак, что мне делать ? –

+0

проверьте следующий пример: https://github.com/firebase/quickstart-android/tree/master/database/app/src/main/java/com/google/firebase/quickstart/database –

ответ

5

Ваша проблема заключается в том, что (ArrayList<String>) dataSnapshot.getValue() иногда null и после сохранения значения, то исключение в getItemCount. Если все в порядке с возвратом 0 как размер, когда значения является null, то решение

@Override 
public int getItemCount() { 
    return (values == null) ? 0 : values.size(); 
} 

Однако, вы можете выяснить, почему dataSnapshot.getValue может вернуться null. Возможно, это настоящая проблема, и NullPointerException - это просто симптом.

+0

Да! Спасибо, что сейчас работает. Но на карте нет данных. Думаю, я должен проверить свою базу данных. Спасибо друг! –

+0

Добро пожаловать –

Смежные вопросы