Я сейчас в проекте и пытаюсь получить данные из моей базы данных, используя представление и видоискатель переработчика, но используя мой вспомогательный класс, сразу же после запуска приложения, и я пытаюсь удалить данные через мой вспомогательный класс, он вылетает, и когда я смотрю через мой logcat выдает эту ошибку E / RecyclerView: адаптер не подключен; пропускаю макет .... я искал много ответов и вижу некоторые, но они не связаны с моим кодом ...
вот мой основной код активности
package com.example.android.journalapp;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import com.example.android.journalapp.users.LogInActivity;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class MainActivity extends AppCompatActivity {
private static final String DATE_FORMAT = "dd/MM/yyy";
private SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT,
Locale.getDefault());
private FirebaseAuth mFirebaseAuth;
private FirebaseUser mFirebaseUser;
private DatabaseReference mDatabase;
String mUserId;
private RecyclerView mRecyclerView;
private FirebaseHelper helper;
Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mFirebaseAuth = FirebaseAuth.getInstance();
mFirebaseUser = mFirebaseAuth.getCurrentUser();
mRecyclerView = (RecyclerView) findViewById(R.id.journal_recycler);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mRecyclerView.setHasFixedSize(true);
if (mFirebaseUser == null) {
// Not logged in, launch the Log In activity
loadLogInView();
} else {
mDatabase = FirebaseDatabase.getInstance().getReference();
mUserId = mFirebaseUser.getUid();
helper = new FirebaseHelper(context, mDatabase, mRecyclerView,
mUserId);
helper.refreshData();
}
FloatingActionButton fab = (FloatingActionButton)
findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent addJournalIntent = new Intent(MainActivity.this,
AddJournalActivity.class);
addJournalIntent.putExtra("USER_ID", mUserId);
startActivity(addJournalIntent);
}
});
}
private void loadLogInView() {
Intent intent = new Intent(this, LogInActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_logout) {
mFirebaseAuth.signOut();
loadLogInView();
}
return super.onOptionsItemSelected(item);
}
}
вот мой помощник по пожарной базе
package com.example.android.journalapp;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.widget.RecyclerView;
import android.widget.Toast;
import com.example.android.journalapp.model.Journal;
import com.google.firebase.database.ChildEventListener;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Locale;
public class FirebaseHelper {
private String mUserId;
private Context context;
private DatabaseReference mDb;
RecyclerView mRecyclerView;
ArrayList<Journal> journals = new ArrayList<>();
public JournalAdapter mJournalAdapter;
private static final String DATE_FORMAT = "dd/MM/yyy";
private SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT, Locale.getDefault());
public FirebaseHelper(Context context, DatabaseReference mDb, RecyclerView mRecyclerView, String mUserId) {
this.context = context;
this.mDb = mDb;
this.mRecyclerView = mRecyclerView;
this.mUserId = mUserId;
}
public void saveData(String journal, String date) {
Journal journalEntry = new Journal(journal, date);
mDb.child("users").child(mUserId).child("journals").push().setValue(journalEntry) ;
// .child("journal")
}
public void recieveData(DataSnapshot ds) {
journals.clear();
for (DataSnapshot dataSnapshot : ds.getChildren()) {
Journal journal = dataSnapshot.getValue(Journal.class);
journals.add(journal);
}
mJournalAdapter = new JournalAdapter(context, journals);
mRecyclerView.setAdapter(mJournalAdapter);
// if (journals.size() > 0) {
//
// mJournalAdapter = new JournalAdapter(context, journals);
// mRecyclerView.setAdapter(mJournalAdapter);
// } else {
// Toast.makeText(context, "No data", Toast.LENGTH_SHORT).show();
// }
}
public void refreshData() {
mDb.child("users").child(mUserId).child("journals").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
recieveData(dataSnapshot);
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
recieveData(dataSnapshot);
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
вот мой класс модели
package com.example.android.journalapp.model;
import java.util.Date;
public class Journal {
private String journalContent;
private String date;
public Journal(String journalContent, String date) {
this.journalContent = journalContent;
this.date = date;
}
public String getJournalContent() {
return journalContent;
}
public void setJournalContent(String journalContent) {
this.journalContent = journalContent;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
}
///
вот мой адаптер класса
package com.example.android.journalapp;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.example.android.journalapp.model.Journal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Locale;
public class JournalAdapter extends RecyclerView.Adapter<JournalHolder> {
Context context;
private ArrayList<Journal> journals;
private static final String DATE_FORMAT = "dd/MM/yyy";
private SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT, Locale.getDefault());
public JournalAdapter(Context context, ArrayList<Journal> journals) {
this.context = context;
this.journals = journals;
}
@NonNull
@Override
public JournalHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.journal_layout, parent, false);
JournalHolder holder = new JournalHolder(view);
return holder;
}
@Override
public void onBindViewHolder(@NonNull JournalHolder holder, int position) {
holder.mJournalTextView.setText(journals.get(position).getJournalContent());
String date = journals.get(position).getDate();
holder.mDateTextView.setText(date);
}
@Override
public int getItemCount() {
if (journals == null) {
return 0;
}
return journals.size();
}
}
//
вот мой класс зрителя
package com.example.android.journalapp;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.TextView;
public class JournalHolder extends RecyclerView.ViewHolder {
TextView mJournalTextView;
TextView mDateTextView;
public JournalHolder(View itemView) {
super(itemView);
mJournalTextView = itemView.findViewById(R.id.journal_text_view);
mDateTextView = itemView.findViewById(R.id.journal_date_text_view);
}
}
Я могу нажать на базу данных, но для получения данных выдает ошибку E / RecyclerView: Адаптер не подключен; пропускающий макет