У меня проблемы с получением ответа при модернизации - PullRequest
1 голос
/ 03 июня 2019

У меня проблемы с получением ответа при модернизации. Мой ответ не удался, и я не знаю почему. Я опубликую здесь мой массив JSON, моя основная деятельность называется Education_Classes, и я тоже опубликую свои уроки.

{
  "classes": [
    {
      "class_id": "1",
      "class_name": "class1",
      "class_description": "des1"
    },
    {
      "class_id": "2",
      "class_name": "class2",
      "class_description": "des2"
    },
    {
      "class_id": "3",
      "class_name": "class3",
      "class_description": "des3"
    }
  ],
  "status": "1"
}

Главный класс :

public class Education_Classes extends AppCompatActivity {


    private List < Classes > classesList = new ArrayList <>();
    private RecyclerView recyclerView;
    private ClassesAdapter mAdapter;

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

        recyclerView = (RecyclerView) findViewById( R.id.recyclerClasses );

        Retrofit.Builder builder = new Retrofit.Builder().baseUrl( "http://bimehsan.ir/api-v1/" ).addConverterFactory( GsonConverterFactory.create() );
        Retrofit retrofit = builder.build();
        final WebService webService = retrofit.create( WebService.class );


        SharedPreferences shareToken = getSharedPreferences( "userdetails", MODE_PRIVATE );


        String getToken = shareToken.getString( "token", "no name" );

        String tokeyWhittokenType = "Bearer" + " " + getToken;


        Call < ClassesResponse > call = webService.getClasses( tokeyWhittokenType );

        call.enqueue( new Callback < ClassesResponse >() {

            @Override
            public void onResponse(Call < ClassesResponse > call, Response < ClassesResponse > response) {


                if ( response.isSuccessful() ) {

                    Toast.makeText( Education_Classes.this, "Sucsess", Toast.LENGTH_SHORT ).show();

                    classesList = response.body().getClasses();
                    mAdapter = new ClassesAdapter( classesList );
                    RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager( getApplicationContext() );
                    recyclerView.setLayoutManager( mLayoutManager );
                    recyclerView.setItemAnimator( new DefaultItemAnimator() );
                    recyclerView.setAdapter( mAdapter );

                } else {

                    Toast.makeText( Education_Classes.this, "خطا در گرفتن اطلاعات", Toast.LENGTH_SHORT ).show();


                }


            }

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

                Toast.makeText( Education_Classes.this, "اتصال خود را به اینتریت بررسی نمایید.", Toast.LENGTH_SHORT ).show();

            }


        } );

    }
}

ClassesResponse :

public class ClassesResponse {

    private List<Classes> classes;
    private String status;


    public ClassesResponse(List<Classes> classes, String status) {
        this.classes = classes;
        this.status = status;
    }

    public List<Classes> getClasses() {
        return classes;
    }

    public void setClasses(List<Classes> classes) {
        this.classes = classes;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }
}


public class Classes {

    private String class_id;
    private String class_name;
    private String class_description;


    public Classes(String class_id, String class_name, String class_description) {
        this.class_id = class_id;
        this.class_name = class_name;
        this.class_description = class_description;
    }

    public String getClass_id() {
        return class_id;
    }

    public void setClass_id(String class_id) {
        this.class_id = class_id;
    }

    public String getClass_name() {
        return class_name;
    }

    public void setClass_name(String class_name) {
        this.class_name = class_name;
    }

    public String getClass_description() {
        return class_description;
    }

    public void setClass_description(String class_description) {
        this.class_description = class_description;
    }
}

И мой веб-сервис :

public interface WebService {

    @POST("login")
    @FormUrlEncoded
    Call<User> login(@Field("national_code") String national_code, @Field("password") String password);


    @GET("all-classes")
    Call<ClassesResponse> getClasses(@Header("Authorization") String tokeyWhittokenType);

}

Я ожидаю, что мой response.isSuccessful() должен быть верным, но это неверно!

Ответы [ 3 ]

2 голосов
/ 03 июня 2019

Ваша проблема вызывает Api

API всех классов POST Запрос, но вы отправляете GET Запрос:

изменить:

@GET("all-classes")

до:

@POST("all-classes")
0 голосов
/ 03 июня 2019

У меня была такая же проблема. Запрос возвращал нулевой объект. Но код андроида был прав. Проблема была в коде сервера. проверьте код сервера. Может быть, это поможет

0 голосов
/ 03 июня 2019

Вы не используете аннотацию @SerializedName("response_key") к переменным вашего ответа:

public class ClassesResponse {

    @SerializedName("classes")
    private List<Classes> classes;
    @SerializedName("status")
    private String status;


    public ClassesResponse(List<Classes> classes, String status) {
        this.classes = classes;
        this.status = status;
    }

    public List<Classes> getClasses() {
        return classes;
    }

    public void setClasses(List<Classes> classes) {
        this.classes = classes;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }
}


public class Classes {

    @SerializedName("class_id")
    private String class_id;
    @SerializedName("class_name")
    private String class_name;
    @SerializedName("class_description")
    private String class_description;


    public Classes(String class_id, String class_name, String class_description) {
        this.class_id = class_id;
        this.class_name = class_name;
        this.class_description = class_description;
    }

    public String getClass_id() {
        return class_id;
    }

    public void setClass_id(String class_id) {
        this.class_id = class_id;
    }

    public String getClass_name() {
        return class_name;
    }

    public void setClass_name(String class_name) {
        this.class_name = class_name;
    }

    public String getClass_description() {
        return class_description;
    }

    public void setClass_description(String class_description) {
        this.class_description = class_description;
    }
}

Плюс я проверил это на Postman. Это POST-запрос, а не GET, поэтому вам нужно изменить @GET("all-classes") на @POST("all_classes")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...