我正在开发一个使用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)