java - 如何获取存在于其根 Pojo 中的 List<Pojo1> ,它也作为 List<Pojo> 返回

标签 java android retrofit

我正在解析 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/

相关文章:

Java-为什么打印 null?

android - 为什么底部导航状态不保存在撰写中?

java - Android 应用程序可在 AVD 上运行但不能在手机上运行?

java - Androidfragment选项卡式布局,重新选择选项卡3,listview消失

android - 无法将从相机点击的图像上传到服务器

java - 改造 - 尝试获取 response.body 时出现 JsonSyntaxException

java - 如何在没有 EventListener 的情况下从 Firebase 检索数据?

javascript - 如何从前端向 Spring 发出 HTTP POST 请求?

java - 有没有什么有效的方法可以从动态更新的java ConcurrentHashMap中获取随机值?

android - viewModel和MainActivity之间如何通过Databinding进行通信?