我正在解析 Ola Cabs API,其响应如下:
{
"categories": [
{
"id": "mini",
"display_name": "Mini",
"currency": "INR",
"distance_unit": "kilometre",
"time_unit": "minute",
"eta": 1,
"distance": "0.2",
"ride_later_enabled": "true",
"image": "http://d1foexe15giopy.cloudfront.net/mini.png",
"fare_breakup": [
{
"type": "flat_rate",
"minimum_distance": "4",
"minimum_time": "0",
"base_fare": "80",
"minimum_fare": "0",
"cost_per_distance": "10",
"waiting_cost_per_minute": "0",
"ride_cost_per_minute": "1",
"rates_higher_than_usual": false,
"surcharge": []
},
{
"type": "airport_rate",
"minimum_distance": "25",
"minimum_time": "0",
"base_fare": "499",
"minimum_fare": "0",
"cost_per_distance": "13",
"waiting_cost_per_minute": "0",
"ride_cost_per_minute": "1",
"rates_higher_than_usual": false,
"surcharge": []
}
],
"cancellation_policy": {
"cancellation_charge": 50,
"currency": "INR",
"cancellation_charge_applies_after_time": 5,
"time_unit": "minute"
}
}
],
"ride_estimate": {}
}
我将模型类创建为:
public class ListOfEstimateTimeForOla() {
List<Categories> categories;
//getter of categories
}
上面的类是我得到所有响应的主要 POJO。下面给出的是另一个 POJO,名为-Categories。
public class Categories() {
List<Fare_breakup>;
//getter of Fare_breakup
}
并且有一个定义为 Fare_breakup 的模型,如下所示:
public class Fare_breakup {
int base_fare;
//getter of fare
}
现在,我在 fragment 中得到了响应,其代码如下:
requestInterface = retrofit.create(RideRequestInterface.class);
if (pickup_lat != 0 && pickup_long != 0 ) {
Call<ListOfEstimateTimeForOla> priceData = requestInterface.getEstimateTimeForOla(pickup_lat, pickup_long);
priceData.enqueue(new Callback<ListOfEstimateTimeForOla>() {
@Override
public void onResponse(@NonNull Call<ListOfEstimateTimeForOla> call, @NonNull Response<ListOfEstimateTimeForOla> response) {
int statusCode = response.code();
ListOfEstimateTimeForOla data = response.body();
assert data != null;
EstimateTimeAdapterForOla adapter = new EstimateTimeAdapterForOla(data.getCategories(), getContext());
estimatePriceForOla.setAdapter(adapter);
progressForOla.setVisibility(View.GONE);
estimatePriceForOla.setVisibility(View.VISIBLE);
Log.d("Estimated Time for Ola", "onResponse: "+ statusCode);
}
@Override
public void onFailure(@NonNull Call<ListOfEstimateTimeForOla> call, @NonNull Throwable t) {
Log.d("Estimated Time for Ola", "onResponse: "+ t.getMessage());
}
});
}
我需要在我的 RecyclerView 中获取票价,其适配器类如下:
public class EstimateTimeAdapterForOla extends RecyclerView.Adapter<EstimateTimeAdapterForOla.EstimateTimeHolder>{
private Context c;
private List<EstimateTimeForOla> estimateTimeForOla;
public EstimateTimeAdapterForOla (List<EstimateTimeForOla> estimateTimeForOla, Context c) {
this.estimateTimeForOla = estimateTimeForOla;
this.c = c;
}
@Override
public EstimateTimeHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.estimate_time_for_ola, parent, false);
EstimateTimeHolder holder = new EstimateTimeHolder(view);
return holder;
}
@Override
public void onBindViewHolder(EstimateTimeHolder holder, int position) {
holder.displayName.setText(estimateTimeForOla.get(position).getDisplay_name());
Picasso.with(c).load(estimateTimeForOla.get(position).getImage()).into(holder.displayIcon);
holder.fare.setText(String.valueOf(estimateTimeForOla.get(position).getFare_breakup().get(0).getBase_fare()));
holder.eta.setText(String.valueOf(estimateTimeForOla.get(position).getEta()));
}
@Override
public int getItemCount() {
return estimateTimeForOla.size();
}
public static class EstimateTimeHolder extends RecyclerView.ViewHolder {
TextView displayName, fare, eta;
ImageView displayIcon;
public EstimateTimeHolder(View itemView) {
super(itemView);
displayName = itemView.findViewById(R.id.display_name_ola_tv);
fare = itemView.findViewById(R.id.actual_fare_tv);
eta = itemView.findViewById(R.id.actual_eta_tv);
displayIcon = itemView.findViewById(R.id.display_icon_ola_iv);
}
}
}
现在,我的问题是如何通过onBindViewHolder获取我的recyclerview中的票价?
下面给出的是运行上述代码后的错误:
07-28 17:27:50.134 330-330/test.android.mobond.tabs.slidingtabs E/AndroidRuntime: FATAL EXCEPTION: main
Process: test.android.mobond.tabs.slidingtabs, PID: 330
java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.List.get(int)' on a null object reference
at test.android.mobond.tabs.slidingtabs.adapters.EstimateTimeAdapterForOla.onBindViewHolder(EstimateTimeAdapterForOla.java:45)
at test.android.mobond.tabs.slidingtabs.adapters.EstimateTimeAdapterForOla.onBindViewHolder(EstimateTimeAdapterForOla.java:22)
at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6400)
at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6433)
at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5377)
at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5640)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5482)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5478)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2215)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1542)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1502)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:595)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3625)
at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:3067)
at android.view.View.measure(View.java:18870)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5908)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at android.view.View.measure(View.java:18870)
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1629)
at android.view.View.measure(View.java:18870)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:728)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:464)
at android.view.View.measure(View.java:18870)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5908)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139)
at android.view.View.measure(View.java:18870)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5908)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1435)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:721)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:612)
at android.view.View.measure(View.java:18870)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5908)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at android.view.View.measure(View.java:18870)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5908)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1435)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:721)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:612)
at android.view.View.measure(View.java:18870)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5908)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:3076)
at android.view.View.measure(View.java:18870)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2392)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1416)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1661)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1301)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7016)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:777)
at android.view.Choreographer.doCallbacks(Choreographer.java:590)
at android.view.Choreog
最佳答案
使用 JSON2POJO 创建 POJO创建足够的 POJO 类并使用 Retrofit
关于java - 如何获取存在于其根 Pojo 中的 List<Pojo1> ,它也作为 List<Pojo> 返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45370312/