简体   繁体   中英

How to render render JSON data using retrofit and recylerview in android studio

I am trying use retrofit and recyclerview to display from a web app. I have the following models:

Main Activities

public class ProfileActivity extends AppCompatActivity {
    private SalesAdapter mAdapter;
    private RecyclerView mRecyclerView;
    private SaleService mService;

    @Override
    protected void onCreate (Bundle savedInstanceState)  {
        super.onCreate( savedInstanceState );
        setContentView(R.layout.activity_profile );
        mService = ApiUtils.getSaleService();
        mRecyclerView = (RecyclerView) findViewById(R.id.rvItems);
        mAdapter = new SalesAdapter(this, new ArrayList<Sale>(0), new SalesAdapter.ItemListener() {
            @Override
            public void onPostClick(long id) {

            }
        });


        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(layoutManager);
        mRecyclerView.setAdapter(mAdapter);
        mRecyclerView.setHasFixedSize(true);
        RecyclerView.ItemDecoration itemDecoration = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL);
        mRecyclerView.addItemDecoration(itemDecoration);

        loadAnswers();
    }

    public void loadAnswers() {
        mService.getSales().enqueue(new Callback<List<Sale>>() {
            @Override
            public void onResponse(Call<List<Sale>> call, Response<List<Sale>> response) {

                if(response.isSuccessful()) {
                    mAdapter.UpdateSales(response.body());
                } else {
                    int statuscode = response.code();
                }
            }

            @Override
            public void onFailure(Call<List<Sale>> call, Throwable t) {

            }
        });
    }
}

Recyclerview Adapter

public class SalesAdapter extends RecyclerView.Adapter<SalesAdapter.ViewHolder>{

    private Context mContext;
    private List<Sale> mSales;
    private  ItemListener mItemListener;

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
        public TextView tvLocaleName;
        ItemListener mItemListener;

        public ViewHolder(View itemView, ItemListener itemListener) {
            super(itemView);

            tvLocaleName = (TextView) itemView.findViewById(android.R.id.text1);
            this.mItemListener = itemListener;
            itemView.setOnClickListener(this);
        }

        @Override
        public void onClick(View view) {
            Sale sale = getSales(getAdapterPosition());
            this.mItemListener.onPostClick(sale.getId());
            notifyDataSetChanged();
        }
    }

    public SalesAdapter(Context mContext, List<Sale> mSales, ItemListener mItemListener) {
        this.mContext = mContext;
        this.mSales = mSales;
        this.mItemListener = mItemListener;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        Context context = parent.getContext();
        LayoutInflater inflater = LayoutInflater.from(context);

        View view = inflater.inflate(android.R.layout.simple_list_item_1, parent, false);
        return new ViewHolder(view, this.mItemListener);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        Sale sale = mSales.get(position);
        TextView textView = holder.tvLocaleName;
        textView.setText(sale.getLocaleName());
    }

    @Override
    public int getItemCount() {
        return mSales.size();
    }



    public void UpdateSales(List<Sale> sales) {
        mSales = sales;
    }

    private Sale getSales(int position) {
        return mSales.get(position);
    }

    public interface ItemListener {
        void onPostClick(long id);
    }
}

在此处输入图片说明

from the image you can see that i am able to get back the data, but how do I display in it the recyclerview? where am i going wrong with code?

Add a notifyDataSetChanged() call to your adapter after you refresh the list.


Your method should look like:

public void UpdateSales(List<Sale> sales) {
    mSales = sales;
    notifyDataSetChanged();
}

Check out this link to learn more about this method.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM