问题描述
我正在尝试从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());
}
});
}