Android Studio вторичной переработки ViewView с пожарным магазином - PullRequest
0 голосов
/ 19 марта 2019

У меня есть коллекция заказов в пожарном магазине: enter image description here

И у меня есть коллекция Продавцов, а внутри коллекции Продавцов есть еще одна коллекция Фруктов: enter image description here

Я хочу получить данные в коллекции заказовСбор только заказов fruit_ID равен Сбор продавцов / фруктов Идентификатор документа и добавление в программу просмотра отходов

Возможно ли это?

Класс активности:

package com.example.freshbucket.Seller;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;
import android.util.Log;
import android.widget.Toast;

import com.example.freshbucket.Adapter.OrdersSellerRecylerAdapter;
import com.example.freshbucket.Model.PlaceOrder;
import com.example.freshbucket.R;
import com.firebase.ui.firestore.FirestoreRecyclerOptions;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.DocumentSnapshot;
import com.google.firebase.firestore.EventListener;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.FirebaseFirestoreException;
import com.google.firebase.firestore.Query;
import com.google.firebase.firestore.QuerySnapshot;

import javax.annotation.Nullable;

import static android.support.constraint.Constraints.TAG;

public class SellerGetOrdersActivity extends AppCompatActivity {

    String fid, pro;

   private FirebaseAuth mAuth = FirebaseAuth.getInstance();
    String user_id = mAuth.getCurrentUser().getUid();

    private FirebaseFirestore db = FirebaseFirestore.getInstance();
    private CollectionReference orders = db.collection("Orders");
    private CollectionReference sellers = db.collection("Sellers/"+user_id+"/Fruits");

    private OrdersSellerRecylerAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_seller_get_orders);

        setupRecyclerView();

    }

    private void setupRecyclerView()
    {

        Query query =orders.orderBy("timestamp", Query.Direction.DESCENDING).whereEqualTo("fruit_ID",fid);

        FirestoreRecyclerOptions<PlaceOrder> options = new FirestoreRecyclerOptions.Builder<PlaceOrder>().setQuery(query, PlaceOrder.class).build();

        adapter = new OrdersSellerRecylerAdapter(options);

        RecyclerView recyclerView = findViewById(R.id.ordersReView);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));



        recyclerView.setAdapter(adapter);

        //swipe delete
        new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT| ItemTouchHelper.RIGHT) {
            @Override
            public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder viewHolder1) {
                return false;
            }

            @Override
            public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
                adapter.deleteItem(viewHolder.getAdapterPosition());

            }
        }).attachToRecyclerView(recyclerView);

    }



    @Override
    protected void onStart() {
        super.onStart();
        adapter.startListening();



       sellers.addSnapshotListener(new EventListener<QuerySnapshot>() {
            @Override
            public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {



                if (e != null) {
                    Log.d(TAG, "Error:" + e.getMessage());
                } else {

                    for (DocumentSnapshot doc :queryDocumentSnapshots){

                        fid = doc.getId();

                       // pro = doc.getString("province");
                       // fid = doc.getString("fruit_ID");
                        Toast.makeText(SellerGetOrdersActivity.this, "Register error:" +fid , Toast.LENGTH_SHORT).show();


                               }



                }

            }
        });



    }

    @Override
    protected void onStop() {
        super.onStop();
        adapter.stopListening();
    }
  }

Адаптер:

    package com.example.freshbucket.Adapter;

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 android.widget.EditText;
import android.widget.TextView;

import com.example.freshbucket.Model.PlaceOrder;
import com.example.freshbucket.R;
import com.firebase.ui.firestore.FirestoreRecyclerAdapter;
import com.firebase.ui.firestore.FirestoreRecyclerOptions;

public class OrdersSellerRecylerAdapter extends FirestoreRecyclerAdapter<PlaceOrder, OrdersSellerRecylerAdapter.OrdersSellerHolder> {

    Context context;


    public OrdersSellerRecylerAdapter(@NonNull FirestoreRecyclerOptions<PlaceOrder> options) {
        super(options);
    }

    @Override
    protected void onBindViewHolder(@NonNull final OrdersSellerHolder holder, int position, @NonNull final PlaceOrder model) {

       holder.txtfruitname.setText(model.getName());
       holder.txtqun.setText(model.getQun());
       holder.txtcusname.setText(model.getCustomer_Name());
        holder.txtaddress1.setText(model.getAddressLine1());
        holder.txtaddress2.setText(model.getAddressLine2());
        holder.txtcity.setText(model.getCity());


    }

    @NonNull
    @Override
    public OrdersSellerHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.order_list_item_seller,viewGroup, false);
        context = viewGroup.getContext();


        return new OrdersSellerHolder(v);
    }


    class OrdersSellerHolder extends RecyclerView.ViewHolder{

       TextView txtfruitname, txtqun, txtcusname, txtaddress1, txtaddress2, txtcity;
       EditText tctBprice;


        public OrdersSellerHolder(@NonNull View itemView) {
            super(itemView);

            txtfruitname = itemView.findViewById(R.id.fruitnametext);
            txtqun = itemView.findViewById(R.id.fruitquntext);
            txtcusname = itemView.findViewById(R.id.cusnametext);
            txtaddress1 = itemView.findViewById(R.id.addres1text);
            txtaddress2 = itemView.findViewById(R.id.addres2text);
            txtcity = itemView.findViewById(R.id.citytext);


        }


    }

    public void deleteItem(int position) {
        getSnapshots().getSnapshot(position).getReference().delete();
    }




}

1 Ответ

0 голосов
/ 19 марта 2019

Я хочу получить данные только для сбора заказов. fruit_ID

Хорошо, вы хотите получить fruit_ID?

enter image description here

равняется идентификатору документа продавца / Фруктовой коллекции и добавляется в переработчик

а вы хотите получить fruit_ID, который равен продавцам / фруктам?

как if (fruit_ID.equals(sellerFruits_ID) {// get fruit_ID}

enter image description here

Я постараюсь ответить на него.

ПРОБЛЕМА

1. Вы, как продавец, имеете свою seller uid в своей коллекции Sellers и хотите получить V4x1Dh..

2. У вас есть buyer uid в вашей коллекции Orders и вы хотите получить 83Fmf..

3. Вы хотите получить Банан в Продавцах / Фруктах, который Банан как id.

Наконец, вы хотите загрузить данные Sellers/Fruits в recyclerView, потому что

вы хотите получить данные только для сбора заказов fruit_ID

ОТВЕТ

Ответ номер один: Пожалуйста, найдите Продавцов ids и получите V4x1Dh на основе ViewHolder position, что я объясню позже.

Ответ номер два: Пожалуйста, получите Заказы ids и получите 83Fmf на основе ViewHolder position, что я объясню позже.

Ответ номер два: Пожалуйста, возьмите фрукты продавцов ids скажем sellerFruit_ID и получите Banana на основе ViewHolder position, что я объясню позже. ПРИМЕЧАНИЕ: Поскольку в документе есть банан, это будет ID.

ОПИСАНИЕ:

Извлечение продавцов ids и получение V4x1Dh:

    firebaseFirestore
     .collection("Sellers")
     .addSnapshotListener(new EventListener<QuerySnapshot>(){
        @Override
        public void onEvent(QuerySnapshot documentSnapshots, FirebaseFirestoreException e){

            for (DocumentChange doc : documentSnapshots.getDocumentChanges()){

                if (doc.getType() == DocumentChange.Type.ADDED){

                    // RETRIEVING Orders id
                    String orders_ID = doc.getDocument().getId();
                    YourContentOrdersHere contentOrders = doc.getDocument().toObject(YourContentOrdersHere.class).withId(orders_ID);

                    // RETRIEVING Sellers id
                    String sellers_ID = doc.getDocument().getId();
                    YourContentSellersHere contentSellers = doc.getDocument().toObject(YourContentSellersHere.class).withId(sellers_ID);

                    contentListOrders.add(contentOrders);   //example: List<YourContentOrdersHere> contentList                
                    adapter.notifyDataSetChanged(); // before of course, you add this in onCreate adapterOrders = new YourAdapterOrders(contentListOrders);

                    contentListSellers.add(contents);   //example: List<YourContentSellersHere> contentList                
                    adapter.notifyDataSetChanged(); // before of course, you add this in onCreate adapterSellers = new YourAdapterSellers(contentListSellers);
                }
            }


        }
    });

убедитесь, что ваш класс контента расширяет идентификаторы

public class YourContentOrdersHere extends OrdersId {

// make your constructor here of course
// make your getter to get id

}

и сделать OrdersId.class

public class OrdersId{


    @Exclude
    public String OrdersId;

    public <T extends OrdersId> T withId(@NonNull final String id) {

        this.OrdersId = id;
        return (T) this;
    }
}

и, наконец, из класса вашего адаптера, получающего OrdersId. Как пример:

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {


        // GET YOUR `Sellers` id based position and getSellerId() from getter of your content class
        String sellers_ID = contentListSeller.get(position).getSellerId(); // don't forget List<YourContentSellers> contentList = new ArrayList<>();
        firebaseFirestore
           .collection("Sellers")
           .document(sellers_ID)
           .collection("Fruits")
           .document("Banana")


// STORE 'LIKE TAP' USING LIKE BUTTON
        holder.likeHome.seOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){

                /* RETRIEVING VALUE UNDER currentUserId */
                firebaseFirestore.collection("Posts/" + postId + "/Likes").document(currentUserId).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>(){
                    @Override
                    public void onComplete(@NonNull Task<DocumentSnapshot> task){

                        if (!task.getResult().exists()) {

                            /* STORE NEW VALUE */
                            Map<String, Object> likesMap = new HashMap<>();
                            likesMap.put("timestamp", FieldValue.serverTimestamp);
                            firebaseFirestore.collection("Posts/" + postId + "/Likes").document(currentUserId).set(likesMap);
                        } else {
                            // retrieve like timestamp
                            String whenToLike = task.getResult().getString("timestamp");
                            holder.setWhenToLike(whenToLike);

                            /* DELETE VALUE */
                            firebaseFirestore.collection("Posts/" + postId + "/Likes").document(currentUserId).delete();
                        }
                    }
                });                
            }
        });


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...