[英]How to I create Recycler View with Retrofit + Moshi
I am trying to add recycler view to the json response.我正在尝试将回收器视图添加到 json 响应中。
I am able to successfull print the data I get through response in toast but I am not sure how to pass it along the RecyclerView adapter.我能够成功地打印通过 Toast 响应获得的数据,但我不确定如何将它传递给 RecyclerView 适配器。 Most of them talk about is Gson Converter and none on Moshi他们大多谈论的是 Gson Converter 而没有关于 Moshi
I have searched internet for a while but I was helpless.我已经在互联网上搜索了一段时间,但我无能为力。
I am wondering how do I pass the pass the data from the myactivity(OrderHistoryActivity) to the RecyclerViewAdapter(OrderHistoryRecyclerAdapter).我想知道如何将数据从 myactivity(OrderHistoryActivity) 传递到 RecyclerViewAdapter(OrderHistoryRecyclerAdapter)。
Here is my Code这是我的代码
OrderHistoryActivity订单历史活动
package com.tesmachino.saycure;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import com.tesmachino.saycure.Auth.TokenManager;
import com.tesmachino.saycure.entities.OrderHistory.OrderHistoryGet;
import com.tesmachino.saycure.entities.OrderHistory.OrderHistoryResponse;
import com.tesmachino.saycure.network.ApiService;
import com.tesmachino.saycure.network.RetrofitBuilder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class OrderHistoryActivity extends AppCompatActivity {
ApiService service;
TokenManager tokenManager;
Call<OrderHistoryResponse> call;
private static final String TAG = "OrderHistoryActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_order_history);
tokenManager = TokenManager.getInstance(getSharedPreferences("prefs", MODE_PRIVATE));
service = RetrofitBuilder.createServiceWithAuth(ApiService.class, tokenManager);
}
@Override
protected void onResume() {
call = service.orderHistory();
call.enqueue(new Callback<OrderHistoryResponse>() {
@Override
public void onResponse(Call<OrderHistoryResponse> call, Response<OrderHistoryResponse> response) {
Toast.makeText(OrderHistoryActivity.this, "" + response.body().getData(), Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(Call<OrderHistoryResponse> call, Throwable t) {
Log.w(TAG, "onFailure: " + t.getMessage());
Toast.makeText(OrderHistoryActivity.this, "Please Try again after some time", Toast.LENGTH_SHORT).show();
}
});
super.onResume();
}
}
OrderHistoryRecyclerAdapter OrderHistoryRecyclerAdapter
package com.tesmachino.saycure;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.tesmachino.saycure.entities.OrderHistory.OrderHistoryResponse;
import java.util.ArrayList;
import java.util.List;
import retrofit2.Call;
public class OrderHistoryRecyclerAdapter extends RecyclerView.Adapter<OrderHistoryRecyclerAdapter.ViewHolder> {
@NonNull
@Override
public OrderHistoryRecyclerAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_order_history, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull OrderHistoryRecyclerAdapter.ViewHolder holder, int position) {
}
@Override
public int getItemCount() {
return 0;
}
public class ViewHolder extends RecyclerView.ViewHolder {
private TextView order_id;
public ViewHolder(@NonNull View itemView) {
super(itemView);
order_id = (TextView) itemView.findViewById(R.id.order_id);
}
}
}
OrderHistoryResponse订单历史响应
package com.tesmachino.saycure.entities.OrderHistory;
import com.squareup.moshi.Json;
import org.apache.commons.lang3.builder.ToStringBuilder;
import java.util.List;
public class OrderHistoryResponse {
@Json(name = "data")
private List<OrderHistoryGet> data = null;
public List<OrderHistoryGet> getData() {
return data;
}
public void setData(List<OrderHistoryGet> data) {
this.data = data;
}
@Override
public String toString() {
return new ToStringBuilder(this).append("data", data).toString();
}
}
OrderHistoryGet订单历史获取
package com.tesmachino.saycure.entities.OrderHistory;
import com.squareup.moshi.Json;
import org.apache.commons.lang3.builder.ToStringBuilder;
import java.util.List;
public class OrderHistoryGet {
@Json(name = "id")
private Integer id;
@Json(name = "payment_callback_id")
private Integer paymentCallbackId;
@Json(name = "payment_orderid")
private Integer paymentOrderid;
@Json(name = "customer_id")
private Integer customerId;
@Json(name = "service_type_id")
private Integer serviceTypeId;
@Json(name = "number_of_cameras")
private Integer numberOfCameras;
@Json(name = "camera_type")
private Integer cameraType;
@Json(name = "dvr_channel")
private Integer dvrChannel;
@Json(name = "paid_amount")
private Integer paidAmount;
@Json(name = "is_paid")
private Integer isPaid;
@Json(name = "status")
private Integer status;
@Json(name = "deleted_at")
private Object deletedAt;
@Json(name = "created_at")
private String createdAt;
@Json(name = "updated_at")
private String updatedAt;
@Json(name = "service_assign_status")
private List<OrderHistoryServiceAssign> serviceAssignStatus = null;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getPaymentCallbackId() {
return paymentCallbackId;
}
public void setPaymentCallbackId(Integer paymentCallbackId) {
this.paymentCallbackId = paymentCallbackId;
}
public Integer getPaymentOrderid() {
return paymentOrderid;
}
public void setPaymentOrderid(Integer paymentOrderid) {
this.paymentOrderid = paymentOrderid;
}
public Integer getCustomerId() {
return customerId;
}
public void setCustomerId(Integer customerId) {
this.customerId = customerId;
}
public Integer getServiceTypeId() {
return serviceTypeId;
}
public void setServiceTypeId(Integer serviceTypeId) {
this.serviceTypeId = serviceTypeId;
}
public Integer getNumberOfCameras() {
return numberOfCameras;
}
public void setNumberOfCameras(Integer numberOfCameras) {
this.numberOfCameras = numberOfCameras;
}
public Integer getCameraType() {
return cameraType;
}
public void setCameraType(Integer cameraType) {
this.cameraType = cameraType;
}
public Integer getDvrChannel() {
return dvrChannel;
}
public void setDvrChannel(Integer dvrChannel) {
this.dvrChannel = dvrChannel;
}
public Integer getPaidAmount() {
return paidAmount;
}
public void setPaidAmount(Integer paidAmount) {
this.paidAmount = paidAmount;
}
public Integer getIsPaid() {
return isPaid;
}
public void setIsPaid(Integer isPaid) {
this.isPaid = isPaid;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public Object getDeletedAt() {
return deletedAt;
}
public void setDeletedAt(Object deletedAt) {
this.deletedAt = deletedAt;
}
public String getCreatedAt() {
return createdAt;
}
public void setCreatedAt(String createdAt) {
this.createdAt = createdAt;
}
public String getUpdatedAt() {
return updatedAt;
}
public void setUpdatedAt(String updatedAt) {
this.updatedAt = updatedAt;
}
public List<OrderHistoryServiceAssign> getServiceAssignStatus() {
return serviceAssignStatus;
}
public void setServiceAssignStatus(List<OrderHistoryServiceAssign> serviceAssignStatus) {
this.serviceAssignStatus = serviceAssignStatus;
}
@Override
public String toString() {
return new ToStringBuilder(this).append("id", id).append("paymentCallbackId", paymentCallbackId).append("paymentOrderid", paymentOrderid).append("customerId", customerId).append("serviceTypeId", serviceTypeId).append("numberOfCameras", numberOfCameras).append("cameraType", cameraType).append("dvrChannel", dvrChannel).append("paidAmount", paidAmount).append("isPaid", isPaid).append("status", status).append("deletedAt", deletedAt).append("createdAt", createdAt).append("updatedAt", updatedAt).append("serviceAssignStatus", serviceAssignStatus).toString();
}
}
apiService api服务
package com.tesmachino.saycure.network;
import com.tesmachino.saycure.entities.OrderHistory.OrderHistoryResponse;
import java.util.List;
import retrofit2.Call;
import retrofit2.http.GET;
public interface ApiService {
@GET("order-history")
Call<OrderHistoryResponse> orderHistory();
}
RetrofitBuilder改造建造者
package com.tesmachino.saycure.network;
import com.facebook.stetho.okhttp3.StethoInterceptor;
import com.tesmachino.saycure.Auth.TokenManager;
import com.tesmachino.saycure.BuildConfig;
import java.io.IOException;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import retrofit2.Retrofit;
import retrofit2.converter.moshi.MoshiConverterFactory;
public class RetrofitBuilder {
private static final String BASE_URL = "http://192.168.1.11/say-cure-web/public/api/";
// private static final String BASE_URL = "http://saycure.tesmachino.xyz/api/";
private final static OkHttpClient client = buildClient();
private final static Retrofit retrofit = buildRetrofit(client);
private static OkHttpClient buildClient() {
OkHttpClient.Builder builder = new OkHttpClient.Builder()
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Request.Builder builder = request.newBuilder()
.addHeader("Accept", "application/json")
.addHeader("Connection", "close");
request = builder.build();
return chain.proceed(request);
}
});
if (BuildConfig.DEBUG) {
builder.addNetworkInterceptor(new StethoInterceptor());
}
return builder.build();
}
private static Retrofit buildRetrofit(OkHttpClient client) {
return new Retrofit.Builder()
.baseUrl(BASE_URL)
.client(client)
.addConverterFactory(MoshiConverterFactory.create())
.build();
}
public static <T> T createService(Class<T> service) {
return retrofit.create(service);
}
public static <T> T createServiceWithAuth(Class<T> service, TokenManager tokenManager) {
OkHttpClient newClient = client.newBuilder().addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Request.Builder builder = request.newBuilder();
if (tokenManager.getToken().getAccessToken() != null) {
builder.addHeader("Authorization", "Bearer " + tokenManager.getToken().getAccessToken());
}
request = builder.build();
return chain.proceed(request);
}
}).build();
Retrofit newRetroFit = retrofit.newBuilder().client(newClient).build();
return newRetroFit.create(service);
}
public static Retrofit getRetrofit() {
return retrofit;
}
}
Any Help on this would be great appreciation.对此的任何帮助将不胜感激。 If my question is not clear please do let me know, I would be glad to rephrase it.如果我的问题不清楚,请告诉我,我很乐意重新表述。 Please explain me how it worked on the end请向我解释它最后是如何工作的
In your OrderHistoryActivity
activity take RecyclerView in XML and create object in OrderHistoryActivity.java
.在您的OrderHistoryActivity
活动中采用 XML 中的 RecyclerView 并在OrderHistoryActivity.java
创建对象。
create item.xml
file创建item.xml
文件
Note: It is require becuase you are using activity_order_history
(OrderHistoryActivity xml file) for viewHolder which is wrong.注意:这是必需的,因为您正在为 viewHolder 使用activity_order_history
(OrderHistoryActivity xml 文件),这是错误的。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/orderid"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
package com.tesmachino.saycure;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.tesmachino.saycure.entities.OrderHistory.OrderHistoryResponse;
import java.util.ArrayList;
import java.util.List;
import retrofit2.Call;
public class OrderHistoryRecyclerAdapter extends RecyclerView.Adapter<OrderHistoryRecyclerAdapter.ViewHolder> {
private List<OrderHistoryGet> data;
public OrderHistoryRecyclerAdapter(List<OrderHistoryGet> data){
this.data = data;
}
@NonNull
@Override
public OrderHistoryRecyclerAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item.xml, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull OrderHistoryRecyclerAdapter.ViewHolder holder, int position) {
OrderHistoryGet obj = data.get(position);
holder.order_id.setText(obj.getId()+"");
}
@Override
public int getItemCount() {
return data.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private TextView order_id;
public ViewHolder(@NonNull View itemView) {
super(itemView);
order_id = (TextView) itemView.findViewById(R.id.orderid);
}
}
}
Now in onResponse
method do this.现在在onResponse
方法中执行此操作。
....
@Override
public void onResponse(Call<OrderHistoryResponse> call, Response<OrderHistoryResponse> response) {
Toast.makeText(OrderHistoryActivity.this, "" + response.body().getData(), Toast.LENGTH_SHORT).show();
runOnUiThread(new Runnable() {
@Override
public void run() {
OrderHistoryRecyclerAdapter adapter = new OrderHistoryRecyclerAdapter(response.body().getData());
//This recyclerView object should create before, like findViewById(R.id.recyclerViewIdinXML)
RecyclerView.LayoutManager manager=new LinearLayoutManager(getContext());
((LinearLayoutManager) manager).setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(manager);
recyclerView.setAdapter(adapter);
}
});
}
...
Thats it.就是这样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.