尝试与api连接时,onResponse失败

问题描述

我正在尝试从larntech检索图像并将这些图像充气到recyclerview中。 但是,当“经历” onResponse时,它不会成功,它只会带有吐司消息“错误”。因此,它在堆栈跟踪中没有显示任何内容-告诉我是否错误,仍然是初学者。 我希望有人能指出我正确的方向。

  public class MainActivity extends AppCompatActivity {

private List<ImagesResponse> imagesResponseList = new ArrayList<>();
RecyclerView rv;
CustomAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    RecyclerView.LayoutManager layoutManager = new GridLayoutManager(this,2);
    RecyclerView recyclerView = (RecyclerView) findViewById(R.id.grid);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(layoutManager);


    adapter = new CustomAdapter(new ArrayList<ImagesResponse>(),this);
    recyclerView.setAdapter(adapter);



    getAllImages();
}

public void getAllImages() {
    final Call<List<ImagesResponse>> imagesResponse = ApiClient.getInterface().getAllImages();
    imagesResponse.enqueue(new Callback<List<ImagesResponse>>() {
        @Override
        public void onResponse(Call<List<ImagesResponse>> call,Response<List<ImagesResponse>> response) {
            if (response.isSuccessful()) {
                String message = "success";
                Toast.makeText(MainActivity.this,message,Toast.LENGTH_LONG).show();

                imagesResponseList = response.body();
                getAllImages();

            } else {
                String message = "error";
                Toast.makeText(MainActivity.this,Toast.LENGTH_LONG).show();
            }
        }

        @Override
        public void onFailure(Call<List<ImagesResponse>> call,Throwable t) {

            String message = t.getLocalizedMessage();
            Toast.makeText(MainActivity.this,Toast.LENGTH_LONG).show();
        }
    });

}

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {
    private List<ImagesResponse> imagesResponses;
    private Context mContext;
    private LayoutInflater layoutInflater;


    public CustomAdapter(List<ImagesResponse> imagesResponses,Context mContext) {
        this.imagesResponses = imagesResponses;
        this.mContext = mContext;
        this.layoutInflater = (LayoutInflater) mContext.getSystemService(LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        View view = inflater.inflate(R.layout.row_grid_item,parent,false);
        ViewHolder viewHolder = new ViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder,int position) {

        ImagesResponse photoItem = imagesResponses.get(position);
        Glide.with(mContext).load(photoItem.getUrl())
                .error(R.drawable.ic_cloud_off_red)
                .placeholder(R.drawable.ic_cloud_off_red)
                .into(holder.image_view);


    }

    @Override
    public int getItemCount() {
        return ((imagesResponses != null) && (imagesResponses.size() != 0) ? imagesResponses.size() : 0);
    }

    void setImages(ArrayList<ImagesResponse> newImages) {
        imagesResponses = newImages;
        notifyDataSetChanged();
    }


    class ViewHolder extends RecyclerView.ViewHolder {
        ImageView image_view = null;
        RelativeLayout frontLayout;


        public ViewHolder(View itemView) {
            super(itemView);
            this.image_view = itemView.findViewById(R.id.images);

        }
    }



}
 }

 public class ApiClient {

private static Retrofit getRetrofit() {

    HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
    httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

    OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(httpLoggingInterceptor)
            .build();

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("http:/api.larntech.net/")
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    return retrofit;
}

public static ApiInterface getInterface(){
    ApiInterface apiInterface = getRetrofit().create(ApiInterface.class);
return apiInterface;
}

解决方法

在ApiInterface.java类中

@Headers({ "Content-Type: application/json;charset=UTF-8"})
@GET
Call<List<Users>> getUser(
        @Url String url
);

在MainActivity类中

  RecyclerView recyclerView;
  ApiInterface service;
  Retrofit retrofit;
  List<UserModelList> usersList = new ArrayList<>();
  UserListFollowAdapters adapter;

  public MainActivity() {
    // Required empty public constructor
    OkHttpClient client = new OkHttpClient.Builder()
            .connectTimeout(10,TimeUnit.MINUTES)
            .readTimeout(10,TimeUnit.MINUTES)
            .writeTimeout(10,TimeUnit.MINUTES)
            .build();
    retrofit = new Retrofit.Builder()
            .baseUrl(RetrofitGenerator.BASE_URL)
            .client(client)
            .addConverterFactory(GsonConverterFactory.create())
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .build();
    service = retrofit.create(ApiInterface.class);
   this.runOnUiThread(this::getUsers);
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activitymain);
     recyclerView = findViewById(R.id.recycler_userlist);
    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.addItemDecoration(new 
    DividerItemDecoration(this,DividerItemDecoration.VERTICAL));
    recyclerView.setLayoutManager(layoutManager);
    adapter = new UserListFollowAdapters(this,usersList);
    recyclerView.setAdapter(adapter);
}

public void getUsers(){
 Call<List<Users>> call = service.getUser("http://www.example.com/get/users");
        call.enqueue(new Callback<List<Users>>() {
            @Override
            public void onResponse(Call<List<Users>> call,Response<List<Users>> response) {
                List<Users> serverResponse = response.body();
                userslist.addAll(serverResponse);
                adapter.notifyDataSetChanged();
            }

            @Override
            public void onFailure(Call<ResponseModel> call,Throwable t) {
                Toast.make(t.getMessage());

            }
        });

}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...