#java #android #firebase #android-intent #android-recyclerview
#java #Android #firebase #android-intent #android-recyclerview
Вопрос:
В FirebaseAdapter я создал представление для intent в ViewHolderClass
@Override
protected void onBindViewHolder(@NonNull MyviewHolder holder, int position, @NonNull DataClass model) {
holder.name.setText(String.valueOf(model.getName()));
holder.Nickname.setText(model.getNickname());
Log.d(TAG, "onBindViewHolder: Now Bind method executing");
holder.v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(v.getContext(),SecondActivity.class);
i.putExtra("Users",getRef(position).getKey());
mContext.startActivity(i);
}
});
}
In MainActivity:
mAdapter = new FirebaseAdapter(options,MainActivity.this);
In SecondActivity
public class SecondActivity extends AppCompatActivity {
DatabaseReference ref;
TextView gname,gnickname;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
gname = (TextView)findViewById(R.id.gettingname);
gnickname =(TextView)findViewById(R.id.gettingnickname);
ref = FirebaseDatabase.getInstance().getReference().child("Users");
String Users = getIntent().getStringExtra("Users");
ref.child(Users).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if(snapshot.exists()){
String name = Objects.requireNonNull(snapshot.child("Name").getValue()).toString();
String nick = Objects.requireNonNull(snapshot.child("Nick").getValue()).toString();
gname.setText(name);
gnickname.setText(nick);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
Error:
Process: com.example.firebasesearchrec, PID: 20933
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
at com.example.firebasesearchrec.SecondActivity$1.onDataChange(SecondActivity.java:34)
at com.google.firebase.database.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:75)
…………………..Спасибо…………………………………………………………………………………………………………………………………………
Ответ №1:
Прежде всего, получите контекст активности
Context mContext;
Get context from constructor
public FirbaseAdapter(FirebaseRecyclerOptions<DataClass> options, Context context) {
super(options);
this.mContext = context;
}
Наконец
Intent i = new Intent(view.getContext(), SecondActivity.class);
i.putExtra("Users",getRef(position).getKey());
mContext.startActivity(i);
или, если вам нужно быстрое и простое решение, попробуйте это
Intent i = new Intent(view.getContext(), SecondActivity.class);
i.putExtra("Users",getRef(position).getKey());
view.getContext().startActivity(i);
Комментарии:
1. Теперь его сбой, но раньше вы задавали другой вопрос
2. Теперь я перехожу к другому действию, но теперь во втором действии я получил ошибки, не могли бы вы проверить это и сказать мне
3. Да, теперь я перехожу к другому действию, но теперь у меня есть ошибки в другом действии
Ответ №2:
для вашего третьего метода используйте этот.
v.getContext().startActivity(i);
Комментарии:
1. public void onClick(View v) { Намерение i = новое намерение (v.getContext(),SecondActivity.class ); i.putExtra(«Пользователи»,GetRef(позиция).getKey()); v.getContext().startActivity(i);
2. это правильный вариант? выше я внес некоторые изменения
3. В конструкторе я использовал (v.getcontext,SecondActivity.class ) и в последней строке я использовал то, что вы сказали
4. новый вид. OnClickListener() этот код не становится темнее, это какая-то проблема? или я могу оставить это?
5. пожалуйста, отредактируйте свой пост и добавьте туда код. а также напишите проблему