Я пытался передать данные из Recyclerview, используя Firebase, чтобы передать данные для детальной активности, но не получилось. Я получаю ошибку - PullRequest
0 голосов
/ 28 марта 2020

newb ie to android программирование и начало обучения. Я надеюсь, что кто-нибудь сможет помочь мне решить эту проблему. Спасибо. Проблема в том, что я не могу получить данные для отображения в RestaurantInfoActivity, когда пользователь нажимает на список. Это будет продолжать подсказывать эту ошибку. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация

RestaurantAdapter

@Override
protected void onBindViewHolder(@NonNull RestaurantViewHolder holder, final int position, @NonNull 
final RestaurantDetails details) {

    holder.restaurant_Name.setText(details.getName());
    holder.restaurant_Category.setText(details.getCategory());
    holder.restaurant_Location.setText(details.getLocation());

    holder.itemView.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View view){
            String post_key = getRef(position).getKey();

            Intent intent = new Intent(view.getContext(), RestaurantInfoActivity.class);
            intent.putExtra("Post_key", position);
            view.getContext().startActivity(intent);
        }
    });
}

'' '

RestaurantInfoActivity

public class RestaurantInfoActivity extends AppCompatActivity{

TextView iRestaurantName, iRestaurantCategory, iRestaurantAddress, iRestaurantLocation;
private static final String TAG = RestaurantInfoActivity.class.getSimpleName();
DatabaseReference mReference;


@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.restaurant_details);
    Log.d(TAG, "onCreate: started.");

    FirebaseRecyclerOptions<RestaurantDetails> options =
            new FirebaseRecyclerOptions.Builder<RestaurantDetails>()
                    .setQuery(FirebaseDatabase.getInstance().getReference().child("Restaurant"), RestaurantDetails.class)
                    .build();

    //Toast.makeText(RestaurantInfoActivity.this, post_key,Toast.LENGTH_LONG).show();
    //Log.d(TAG,"onClick" + post_key );



    mReference = FirebaseDatabase.getInstance().getReference().child("Restaurant");

    final String post_key = getIntent().getExtras().get("post_key").toString();

    iRestaurantName = (TextView) findViewById(R.id.restaurantName);
    iRestaurantAddress = (TextView) findViewById(R.id.restaurantAddress);
    iRestaurantCategory = (TextView) findViewById(R.id.restaurantCategory);
    iRestaurantLocation = (TextView) findViewById(R.id.restaurantLocation);

    mReference.child(post_key).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            RestaurantDetails details = dataSnapshot.getValue(RestaurantDetails.class);
            if(dataSnapshot.exists()){
                RestaurantDetails nameRestaurant = dataSnapshot.child("name").getValue().toString();
                RestaurantDetails locationRestaurant = dataSnapshot.child("location").getValue().toString();
                RestaurantDetails addressRestaurant = dataSnapshot.child("address").getValue().toString();
                RestaurantDetails categoryRestaurant = dataSnapshot.child("category").getValue().toString();


                iRestaurantName.setText( nameRestaurant);
                iRestaurantLocation.setText(locationRestaurant);
                iRestaurantAddress.setText(addressRestaurant);
                iRestaurantCategory.setText(categoryRestaurant);


            }

'' '

Журнал ошибок

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.isaac.foodie/com.isaac.foodie.RestaurantInfoActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3121)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3264)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1955)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:214)
    at android.app.ActivityThread.main(ActivityThread.java:7078)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
    at com.isaac.foodie.RestaurantInfoActivity.onCreate(RestaurantInfoActivity.java:49)
    at android.app.Activity.performCreate(Activity.java:7327)
    at android.app.Activity.performCreate(Activity.java:7318)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1275)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3101)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3264) 
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1955) 
    at android.os.Handler.dispatchMessage(Handler.java:106) 
    at android.os.Looper.loop(Looper.java:214) 
    at android.app.ActivityThread.main(ActivityThread.java:7078) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964) 

Ответы [ 2 ]

0 голосов
/ 28 марта 2020

Разница:

intent.putExtra("Post_key", position);

и

final String post_key = getIntent().getExtras().get("post_key").toString();

Post_key вместо post_key

0 голосов
/ 28 марта 2020

В ваших событиях клика я вижу, что вы не отправляете почтовый ключ с намерением, а отправляете позицию. Измените событие клика на это

holder.itemView.setOnClickListener(new View.OnClickListener(){
    @Override
    public void onClick(View view){
        String post_key = getRef(position).getKey();

        Intent intent = new Intent(view.getContext(), RestaurantInfoActivity.class);
        intent.putExtra("Post_key", post_key);
        view.getContext().startActivity(intent);
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...