Проводка значений с использованием модернизации - PullRequest
0 голосов
/ 30 января 2020

Я сейчас новичок в android. Я использую этот сайт для практики: http://dummy.restapiexample.com/, я пытаюсь использовать почтовый запрос, вот код, который я использую, я использовал jsonschema2pojo, и я создал два класса, так что это сбило меня с толку зачем нам два класса? и как их использовать? Код не падает. Но я получаю нулевое значение, когда отображаю значения в тосте.

JsonPlaceholer. java

public interface JsonPlaceHolderApi {

@FormUrlEncoded
@POST("create")
Call<Post> createPost(@FieldMap Map<String, String> fields);
}

Mainactivity. java

public class MainActivity extends AppCompatActivity {

TextView textViewResult;

private JsonPlaceHolderApi jsonPlaceHolderApi;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    textViewResult = findViewById(R.id.text_view_result);

    Retrofit retrofit = new Retrofit.Builder()
           // .baseUrl("https://jsonplaceholder.typicode.com/")
            .baseUrl("http://dummy.restapiexample.com/api/v1/")
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    jsonPlaceHolderApi = retrofit.create(JsonPlaceHolderApi.class);

    createPost();
  }

private void createPost() {

    //Post post = new Post(23, "New Title", "New Text");

    Map<String, String> fields = new HashMap<>();
    fields.put("name", "NewName");
    fields.put("salary", "123");
    fields.put("age","12");

    Call<Post> call = jsonPlaceHolderApi.createPost(fields);

    call.enqueue(new Callback<Post>() {
        @Override
        public void onResponse(Call<Post> call, Response<Post> response) {

            if (!response.isSuccessful()) {
                textViewResult.setText("Code: " + response.code());
                return;
            }

            Post postResponse = response.body();

            String content = "";
            content += "Code: " + response.code() + "\n";
            content += "ID: " + postResponse.getId() + "\n";

            content += "Name : " + postResponse.getName() + "\n";
            content += "Salary : " + postResponse.getSalary() + "\n";
            content += "Age :" + postResponse.getAge() + "\n\n";

           // textViewResult2.setText(content);
            Toast.makeText(MainActivity.this, "Ans::"+content, Toast.LENGTH_LONG).show();
        }

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

            //textViewResult.setText(t.getMessage());
            Toast.makeText(MainActivity.this, "Failed "+t.getMessage(), Toast.LENGTH_LONG).show();
        }
    });
}
 }

Post. java

public class Post {

@SerializedName("name")
@Expose
private String name;
@SerializedName("salary")
@Expose
private String salary;
@SerializedName("age")
@Expose
private String age;
@SerializedName("id")
@Expose
private Integer id;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getSalary() {
    return salary;
}

public void setSalary(String salary) {
    this.salary = salary;
}

public String getAge() {
    return age;
}

public void setAge(String age) {
    this.age = age;
}

public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}


}

PostR. java

public class PostR {

@SerializedName("status")
@Expose
private String status;
@SerializedName("data")
@Expose
private Post data;

public String getStatus() {
    return status;
}

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

public Post getData() {
    return data;
}

public void setData(Post data) {
    this.data = data;
}

}

Ответы [ 2 ]

1 голос
/ 30 января 2020

Хорошо, при быстром просмотре, ваш PostR. java - это класс POJO для ответа, полученного от обратного вызова и Post. java - это класс POJO для того, что возвращается в data Так что в вашем MainActivity.java вам нужно заменить все Call<Post> на Call<PostR>, поскольку PostR. java - это ответ, который вы получите с объектом Post в нем.

Попробуйте и посмотрите, поможет ли это.

РЕДАКТИРОВАТЬ: не забудьте заменить Callback<Post> и Response<Post> на Callback<PostR> и Response<PostR> тоже

0 голосов
/ 30 января 2020

2 класса предназначены для DTO (объекта передачи данных), , отображающего ответ от API, с Java объектами и , отображающими данные ответа с Java объектами .

Замените ваш код следующим кодом, он должен работать:

Call<PostR> call = jsonPlaceHolderApi.createPost(fields);
    call.enqueue(new Callback<PostR>() {
        @Override
        public void onResponse(Call<PostR> call, Response<PostR> response) {    
            if (!response.isSuccessful()) {
                textViewResult.setText("Code: " + response.code());
                return;
            }    
            PostR postRResponse = response.body();
            Post postResponse = postRResponse.getData();
            if(postResponse!=null) {
                String content = "";
                content += "Code: " + response.code() + "\n";
                content += "ID: " + postResponse.getId() + "\n";    
                content += "Name : " + postResponse.getName() + "\n";
                content += "Salary : " + postResponse.getSalary() + "\n";
                content += "Age :" + postResponse.getAge() + "\n\n";
            }
           // textViewResult2.setText(content);
            Toast.makeText(MainActivity.this, "Ans::"+content, Toast.LENGTH_LONG).show();
        }

        @Override
        public void onFailure(Call<PostR> call, Throwable t) {    
            //textViewResult.setText(t.getMessage());
            Toast.makeText(MainActivity.this, "Failed "+t.getMessage(), Toast.LENGTH_LONG).show();
        }

PS - Общий процесс, который вы можете выполнить для проверки API:

  1. Проверьте, работает ли Backend (API) или нет Почтальон .
  2. Печать response.code () и response.body () в журнале.
  3. Проверьте, соответствует ли структура (ключи / параметры) ответа PostR. java
  4. Проверьте, соответствует ли структура (ключи / параметры) response.body ( ) аналогичен Post. java class.
  5. Если все вышеперечисленное работает должным образом, тост должен вывести правильные значения.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...