我正在做我的项目,当引用/子项的值在RecycleView和CardView中更改时,我需要从FIREBASE中获取数据。我的编码没有错误,但是当我尝试进入该界面时,它崩溃了。如果大家都知道请告诉我什么问题,我将在下面附上我的代码。非常感谢。
MainAlarm.java
//Perform logout action
var buttonLogout = wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.XPath(".//div[@class='menu']/div/ul[@class='list']/li[last()]/a")));
executor.ExecuteScript("arguments[0].click();", buttonLogout);
//Locate confirm button in modal window
var buttonConfirm = wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.XPath(".//button[@class='swal-button swal-button--confirm']")));
executor.ExecuteScript("arguments[0].click();", buttonConfirm);
MainAlarm.xml
package com.example.xh3al3r.myapplication2;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
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 java.util.ArrayList;
public class MainAlarm extends AppCompatActivity {
private RecyclerView recyclerView;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_alarm);
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("Resort");
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot alert: dataSnapshot.getChildren()) {
System.out.println(alert.getValue());
}
// This method is called once with the initial value and again
// whenever data at this location is updated.
ArrayList<String> values = (ArrayList<String>) dataSnapshot.getValue();
recyclerView.setAdapter(new RecyclerViewAdapter(values));
}
@Override
public void onCancelled(DatabaseError error) {
// Failed to read value
System.out.println("Failed to read value." + error.toException());
}
});
}
private class GetDataFromFirebase extends AsyncTask<Void,Void,Boolean>{
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Boolean doInBackground(Void... voids) {
return false;
}
@Override
protected void onPostExecute(Boolean aBoolean) {
super.onPostExecute(aBoolean);
}
}
}
RecycleViewAdapter.java
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainAlarm"
android:id="@+id/recycler_view"
android:background="@drawable/blue1"
tools:layout_editor_absoluteY="25dp"
>
</android.support.v7.widget.RecyclerView>
RecycleViewAdapter.xml
package com.example.xh3al3r.myapplication2;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.ArrayList;
class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
private ArrayList<String> values;
RecyclerViewAdapter(ArrayList<String> values) {
this.values = values;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.RecycleViewAdapter,parent,false));
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.name.setText(values.get(position));
}
@Override
public int getItemCount() {
return values.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
private TextView name;
ViewHolder(View itemView) {
super(itemView);
name = (TextView) itemView.findViewById(R.id.list_item_text);
}
}
}
Logcat
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/recycler_item"
android:layout_margin="4dp"
card_view:contentPadding="8dp"
card_view:cardElevation="6dp"
card_view:cardCornerRadius="4dp">
<TextView
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/list_item_text"
android:minLines="4"/>
</android.support.v7.widget.CardView>