آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

مشکل با رتروفیت

Muta  7 سال پیش  7 سال پیش
0 0

با سلام

بنده با توجه به کدهای زیر مراحل ساخت رتروفیت و نمایشش در یک لیست ویو را اجرا می کنیم وقتی ارتباط درست نباشه پیغام درست ظاهر میشه اما وقتی درست هست هیچ چیز در لیست نمایش نمیده لوگ کت هم پیغام خطایی نمیده مشکل از کجاست؟

 

public interface APIInterface {

@GET ("users.php")
Call<UserResponse> getUsers();

}
 

public class APIClient {

public final static String BASE_URL = "http://192.168.1.34/Retro/";
private static Retrofit retrofit = null;

public static Retrofit getClient(){
if(retrofit==null){
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}

}
public class MainActivity extends AppCompatActivity {
public RecyclerView recyclerView;
public ItemAdapter adapter;
public List<Item>miitem=new ArrayList<>();



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

userRequest();

}

public void userRequest(){
APIInterface apiInterface = APIClient.getClient().create(APIInterface.class);
Call<UserResponse> call = apiInterface.getUsers();
call.enqueue(new Callback<UserResponse>() {
@Override
public void onResponse(Call<UserResponse> call, Response<UserResponse> response) {
if(response.isSuccessful()){
Log.i("RETROFIT","STATUS IS OK");
List<User> users = response.body().getUsers();
adapter.notifyDataSetChanged();
setupRecyclerView(users);

}
}

@Override
public void onFailure(Call<UserResponse> call, Throwable t) {
if(t instanceof IOException) {
Toast.makeText(MainActivity.this,"Connection Error",Toast.LENGTH_SHORT).show();
}
}
});
}

private void setupRecyclerView(List<User> users){
recyclerView = findViewById(R.id.recyclerView);
adapter= new ItemAdapter(users,this);
recyclerView.setAdapter(adapter);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(layoutManager);
adapter.notifyDataSetChanged();


}
}

 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
Javid  7 سال پیش
0 0

پیغام STATUS_IS_OK توی لاگ کت نشون داده میشه یا نه؟

اگر نشون داده میشه که مشکل از set کردن Recyclerview هست. اگر نه مشکل از پاسخ سرور یا رتروفیت هست.

اروری که شما از جواب رتروفیت دریافت میکنید، ممکنه چند حالت داشته باشه. حالت اول دریافت پاسخ خطا (کد خطای 300 یا بیشتر) از سرور هست که در این صورت مقدار  response.isSuccessful برابر با false میشه. پس کد رو به شکل زیر بازنویسی کنید:

if(response.isSuccessful()){
Log.i("RETROFIT","STATUS IS OK");
List<User> users = response.body().getUsers();
adapter.notifyDataSetChanged();
setupRecyclerView(users);

} else {
Log.i("RETROFIT","Response error: " +response.message());
}

حالت دوم مربوط به رتروفیت هست که وقتی نتونه پاسخ رو به درستی دریافت کنه متود onFailure صدا زده میشه، مثلا وقتی که اتصال اینترنت دستگاه برقرار نباشه. برای لاگ کردن این نوع خطا هم کد زیر رو توی onFailure قرار بدید:

Log.i("RETROFIT","onFailure - Error message: " +t.getMessage());
if(t instanceof IOException) {
Toast.makeText(MainActivity.this,"Connection Error",Toast.LENGTH_SHORT).show();
}

این طوری هر خطایی که از جانب رتروفیت یا سرور رخ بده توی لاگ کت نشون داده میشه.


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .