Ответ от запроса retrofit2 GET возвращает неправильные данные, но я не знаю почему

#java #android #retrofit2

#java #Android #retrofit2

Вопрос:

У меня есть приложение для Android, которое извлекает данные из базы данных с использованием токена доступа. Я успешно настроил сторону приложения OAuth2 и могу войти в систему с учетными данными и сохранить токен доступа для использования с запросами GET. Теперь я пытаюсь извлечь некоторые данные клиента из базы данных, но ответ возвращает имя пакета, а не данные клиента.

Ниже вы можете найти мои классы:

CustomerResponse.java

 package com.example.helper.retrofit.oauth2.response;

public class CustomerResponse {

    private Integer id;
    private String name;
    private String tel;
    private String email;
    private String address1;
    private String address2;
    private String address3;
    private String town;
    private String county;
    private String postcode;


    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public String getTel() {
        return tel;
    }

    public void setTel(String tel) {
        this.tel = tel;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getAddress1() {
        return address1;
    }

    public void setAddress1(String address1) {
        this.address1 = address1;
    }

    public String getAddress2() {
        return address2;
    }

    public void setAddress2(String address2) {
        this.address2 = address2;
    }

    public String getAddress3() {
        return address3;
    }

    public void setAddress3(String address3) {
        this.address3 = address3;
    }

    public String getTown() {
        return town;
    }

    public void setTown(String town) {
        this.town = town;
    }

    public String getCounty() {
        return county;
    }

    public void setCounty(String county) {
        this.county = county;
    }

    public String getPostcode() {
        return postcode;
    }

    public void setPostcode(String postcode) {
        this.postcode = postcode;
    }
}
  

ViewCustomers.java

 package com.example.packagename;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.Toast;

import com.example.helper.retrofit.oauth2.OauthConstant;
import com.example.helper.retrofit.oauth2.response.CustomerResponse;
import com.example.helper.retrofit.oauth2.service.CustomerService;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;



public class ViewCustomers extends AppCompatActivity {


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

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(OauthConstant.DATA_SERVER_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        CustomerService customerService = retrofit.create(CustomerService.class);

        Call<CustomerResponse> call = customerService.getCustomers();
        call.enqueue(new Callback<CustomerResponse>() {
            @Override
            public void onResponse(Call<CustomerResponse> call, retrofit2.Response<CustomerResponse> response) {
                if (response.isSuccessful()) {
                    Toast.makeText(ViewCustomers.this, response.body().toString(), Toast.LENGTH_LONG).show();
                } else {
                    Toast.makeText(ViewCustomers.this, "Not successful!", Toast.LENGTH_LONG).show();
                }

            }

            @Override
            public void onFailure(Call<CustomerResponse> call, Throwable t) {
                Toast.makeText(ViewCustomers.this, "Failed!", Toast.LENGTH_LONG).show();
            }
        });

    }
}
  

cCustomerService.java

 package com.example.packagename.helper.retrofit.oauth2.client;

import android.content.Context;
import android.content.SharedPreferences;

import java.io.IOException;

import okhttp3.FormBody;
import okhttp3.Interceptor;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okio.Buffer;

import static com.example.MainActivity.access;
import static com.example.MainActivity.mypreference;

public class cCustomerService {

    private Context mContext;
    SharedPreferences sharedPreferences;

    OkHttpClient client = new OkHttpClient.Builder()
            .addInterceptor(new Interceptor() {

                @Override
                public Response intercept(Chain chain) throws IOException {
                    Request request = chain.request();
                    Request.Builder requestBuilder = request.newBuilder();
                    mContext.getSharedPreferences(mypreference, Context.MODE_PRIVATE);

                    RequestBody formBody = new FormBody.Builder()
                            .add("access_token", sharedPreferences.getString(access, ""))
                            .build();

                    String postBodyToString = bodyToString(request.body());
                    postBodyToString  = ((postBodyToString.length() > 0) ? "amp;" : "")   bodyToString(formBody);
                    request = requestBuilder.post(RequestBody.create(MediaType.parse("application/x-www-form-urlencoded;charset=UTF-8"), postBodyToString))
                            .build();

                    return chain.proceed(request);
                }
            }).build();


    public static String bodyToString(final RequestBody requestBody) {
        try {
            final RequestBody copy = requestBody;
            final Buffer buffer = new Buffer();
            if (copy != null) {
                copy.writeTo(buffer);
            } else {
                return "";
            }
            return buffer.readUtf8();
        } catch (IOException e) {
            return "didn't work";
        }
    }

}
  

Customerservice.java

 package com.example.helper.retrofit.oauth2.service;

import com.example.helper.retrofit.oauth2.response.CustomerResponse;

import retrofit2.Call;
import retrofit2.http.GET;

public interface CustomerService {

    @GET("customer/")
    Call<CustomerResponse> getCustomers();
}
  

Возвращаемое значение com.example.packagename.helper.retrofit.oauth2.response.CustomerResponse@a6bc5ca каждый раз, когда я запускаю запрос, он возвращает несколько разных цифр в конце, я не уверен, имеет ли это какое-либо отношение.

Я что-то делаю не так?

Комментарии:

1. Переопределите toString() метод в CustomerResponse классе, чтобы получить значимый вывод с помощью response.body().toString() .

2. @MarkusKauppinen ах, это то, чего мне не хватало, спасибо! Теперь он возвращает объект. К сожалению, все мои возвращенные значения равны нулю, поэтому я возвращаюсь к чертежной доске!