android retrofit

0

Witam, napisałem kod który otrzymuje odpowiedź z servera. Jak zamienić ją na stringa? funkcja toString zwraca mi opis obiektu jak dostać się do wartości wewnątrz niego?

RestAdapter restAdapter = new RestAdapter.Builder()
                .setEndpoint(ConstantsValues.SERVER_URL)
                .build();
        UserRetrofitService userService = restAdapter.create(UserRetrofitService.class);
        userService.addUser(user,new Callback<User>(){
            @Override
            public void success(User user, Response response){
                //todo  zmienić response
                String token = response.getBody().toString();
                AuthService.setToken(token);
0

Przekształciłem trochę ten kod jednak w momencie call.enqueue aplikacja się wyłącza i dostaję błąd mówiący o tym, że główny wątek nie ma dostępu do funkcji prywatnych

Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(ConstantsValues.SERVER_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        UserRetrofitService userService = retrofit.create(UserRetrofitService.class);
        Call<String> call = userService.getToken(user);
        call.enqueue(new retrofit2.Callback<String>() {
            @Override
            public void onResponse(Call<String> call, retrofit2.Response<String> response) {
                String token = response.body().toString();
                AuthService.setToken(token);
                if(token != null) {
                    Toast.makeText(LoginActivity.this, token, Toast.LENGTH_LONG).show();
                    Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                    startActivity(intent);
                }
                else{
                    TextView errorTV = (TextView)findViewById(R.id.loginErrorMessageField);
                    errorTV.setText("wrong password or login");
                }
            }
0
fredka napisał(a):
            public void onResponse(Call<String> call, retrofit2.Response<String> response) {
                String token = response.body().toString();

Po co call w onResponse? Poza tym reponse.body() zwróci typ t Response<T>, więc toString() imho zbędny. Poza tym naucz się korzystać z debuggera, ponieważ Ty sam możesz najlepiej sprawdzić dlaczego coś nie działa.

0

onResponse zostało automatycznie wygenerowane z takimi parametrami jako funkcja którą mam nadpisać. Użyłem i właśnie doszedłem do tego momentu i nie wiem co jest powodem, ponieważ wszystkie funkcje są publiczne

0
Haskell napisał(a):
fredka napisał(a):
            public void onResponse(Call<String> call, retrofit2.Response<String> response) {
                String token = response.body().toString();

Po co call w onResponse?

https://square.github.io/retrofit/2.x/retrofit/retrofit2/Callback.html#onResponse-retrofit2.Call-retrofit2.Response-

Po co mieszasz, jak nie wiesz?

0

Nawet jeśli o tym nie wiedziałeś, bo używasz starego Retrofita, to i tak twoja uwaga była bez sensu, bo gdyby wstawił tam nadmiarowy parametr call, którego nie ma, to by mu sie w ogóle taki kod nie skompilował.

0
Trzeźwy Szczur napisał(a):

twoja uwaga była bez sensu

Bez sensu jest to, że odkopujesz wątek sprzed dwóch tygodni i jątrzysz. Jeżeli odkopujesz jakiś wątek to umieść w nim konstruktywną odpowiedź na problem autora wątku.

0

2 tygodnie to nie jest tak dużo, tylko punktuję twoje bezsensowne uwagi, które tez nie wniosły nic do tematu. Co do głównego pytania przez autora, to powinien nauczyć się używać debuggera, zamiast pytać tutaj, bo na podstawie tego co napisał ciężko stwierdzić w czym problem

1 użytkowników online, w tym zalogowanych: 0, gości: 1