尝试连接 api 时 onResponse 不成功
onResponse is not succesful when trying to connect with an api
我正在尝试从 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, message, Toast.LENGTH_LONG).show();
}
}
@Override
public void onFailure(Call<List<ImagesResponse>> call, Throwable t) {
String message = t.getLocalizedMessage();
Toast.makeText(MainActivity.this, message, 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 class
@Headers({ "Content-Type: application/json;charset=UTF-8"})
@GET
Call<List<Users>> getUser(
@Url String url
);
在 MainActivity 中 class
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());
}
});
}
我正在尝试从 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, message, Toast.LENGTH_LONG).show();
}
}
@Override
public void onFailure(Call<List<ImagesResponse>> call, Throwable t) {
String message = t.getLocalizedMessage();
Toast.makeText(MainActivity.this, message, 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 class
@Headers({ "Content-Type: application/json;charset=UTF-8"})
@GET
Call<List<Users>> getUser(
@Url String url
);
在 MainActivity 中 class
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());
}
});
}