收到200 OK响应,但没有数据显示

时间:2019-08-08 15:40:42

标签: android retrofit

我正在开发一个使用Retrofit请求WebService的应用程序。我调试了该应用,结果响应为空,即使我得到200 OK响应,并且LoggingInterceptor返回所有可用的产品。

我调试了应用程序,并且响应为空,即使得到200 OK响应,并且LoggingInterceptor返回了所有可用产品。

这是我的产品POJO班


    private Integer productid;
    private Sring productImage;
    private double productPrice;


    public Booking(Integer booking_id, Sring productImage, double productPrice) {
        this.booking_id = booking_id;
        this.productImage = productImage;
        this.productPrice = productPrice;

    }

    public Integer getproductid() {
        return productid;
    }

    public void setproductid(Integer productid) {
        this.productid = productid;
    }

    public Sring getproductImage() {
        return productImage;
    }

    public void setDriver(Sring productImage) {
        this.productImage = productImage;
    }

    public double getproductPrice() {
        return productPrice;
    }

    public void setproductPrice(double productPrice) {
        this.productPrice = productPrice;
    }

这是我的班级,我得到答复

public class ProductResponse {
    private Product[] products;



    public Product[] getProducts() {
        return products;
    }
}

和我试图显示数据的片段类

public class ProductFragment extends Fragment {

    private OnFragmentInteractionListener mListener;
    RecyclerView productInformation;
    LinearLayout productInfo;
    private productInformationAdapter adapter;
    private ArrayList<Product> data;

    public ProductFragment() {
        // Required empty public constructor
    }

    public static ProductFragment newInstance(String param1, String param2) {
        ProductFragment fragment = new ProductFragment();
        Bundle args = new Bundle();
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        return  inflater.inflate(R.layout.fragment_Product, container, false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        productInformation = view.findViewById(R.id.productInformation);
        productInformation.setLayoutManager(new LinearLayoutManager(getContext()));
        productInformation.setItemAnimator(new DefaultItemAnimator());
        loadProducts();



    private void loadProducts() {
        HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
        interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build();

        Gson gson = new GsonBuilder()
                .setLenient()
                .create();
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("" + GlobalVariables.BASE_URL)
                .client(client)
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        BaseRestInterface request = retrofit.create(BaseRestInterface.class);
        Call<ProductResponse> call = request.getProducts();
        call.enqueue(new Callback<ProductResponse>() {
            @Override
            public void onResponse(Call<ProductResponse> call, Response<ProductResponse> response) {

                ProductResponse ProductResponse = response.body();
                data = new ArrayList<>(Arrays.asList(ProductResponse.getProducts()));
                adapter = new productInformationAdapter(data,getContext(), getFragmentManager());
                productInformation.setHasFixedSize(true);
                productInformation.setAdapter(adapter);
            }

            @Override
            public void onFailure(Call<ProductResponse> call, Throwable t) {
                Log.d("Error", t.getMessage());
            }
        });
    }

    // TODO: Rename method, update argument and hook method into UI event
    public void onButtonPressed(Uri uri) {
        if (mListener != null) {
            mListener.onFragmentInteraction(uri);
        }
    }

    public interface OnFragmentInteractionListener {
        // TODO: Update argument type and name
        void onFragmentInteraction(Uri uri);
    }
}

这是我得到的错误

{
    "products": [
        {
                    "productid": 4,
                    "productImage": "products\/product1.png",
                    "productPrice": "34.95",

         },
         {
                    "productid": 6,
                    "productImage": "products\/product6.png",
                    "productPrice": "46.54",

         }


     ]
}
D/OkHttp: <-- END HTTP (13194-byte body)
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: orderfreak.com.orderaway, PID: 18875
    java.lang.NullPointerException
        at java.util.Objects.requireNonNull(Objects.java:203)
        at java.util.Arrays$ArrayList.<init>(Arrays.java:3741)
        at java.util.Arrays.asList(Arrays.java:3728)
        at orderfreak.com.orderaway.FragmentsManager.ProductFragment$3.onResponse(ProductFragment.java:172)
        at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:70)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:7000)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)

0 个答案:

没有答案