Получение RetrofitError: 500 Внутренняя ошибка сервера

Я проверяю, как работает RetroFit, и пробовал следующее:

RestClient:

public class RestClient {

    private static TaskService REST_CLIENT;
    private static String ROOT =
            "URL";
    static {
        setupRestClient();
    }

    private RestClient() {}

    public static TaskService get() {
        return REST_CLIENT;
    }

    private static void setupRestClient() {
        OkHttpClient OkHttpClient=new OkHttpClient();

        RestAdapter.Builder builder = new RestAdapter.Builder()
                .setEndpoint(ROOT)
                .setClient(new OkClient(new OkHttpClient()))
        .setConverter(new SimpleXmlConverter());
        builder.setLogLevel(RestAdapter.LogLevel.FULL);
        RestAdapter restAdapter = builder.build();
        REST_CLIENT = restAdapter.create(TaskService.class);
    }
}

В действии:

public void testMethod()
    {
        User user=new User("58","345435","4","","0");
        RestClient.get().getWeather(user,new Callback<String>() {

            @Override
            public void success(String s, Response response) {
                Log.d("testret", "success: " + s);
                Log.d("testret", "successu: " + response.getUrl());
                Log.d("testret", "successs: " + response.getStatus());
            }
            @Override
            public void failure(RetrofitError error)
            {
                Log.d("testret", "errore: " + error);
                Log.d("testret", "erroru: " + error.getUrl());
            }
        });
    }

Пользователь:

public class User {



    String FTID,UUID,TYPE,DateTimeStamp,SDFVersionNb;

    public User(String FTID,String UUID,String TYPE,String DateTimeStamp,String SDFVersionNb)
    {
        this.DateTimeStamp=DateTimeStamp;
        this.FTID=FTID;
        this.UUID=UUID;
        this.SDFVersionNb=SDFVersionNb;
        this.TYPE=TYPE;
    }
}

Интерфейс:

public interface TaskService {

    @POST("/GetBulkQueryUpdates")
    void getWeather(@Body User user,
                    Callback<String> callback);
}

вышеуказанный метод веб-службы возвращает следующее:

<ROWS>
<ROW>
<GroupBy>3</GroupBy>
<QUERY>
 Query Statement
</QUERY>
</ROW>
</ROWS>

Итак, я использую метод post для получения вышеуказанных данных, но я продолжаю каждый раз получать внутреннюю ошибку сервера 500, хотя при выполнении метода веб-сервиса из Интернета данные извлекаются. так что проблема с кодом выше, но я не могу понять, что. я попытался добавить .setConverter(new SimpleXmlConverter()); после просмотра следующего URL-адреса: Android Retrofit возвращает статус 500 внутренняя ошибка сервера но это было то же самое.

любая помощь будет оценена.


person Rashad.Z    schedule 04.05.2015    source источник
comment
Вы уверены, что отправляете правильные данные на правильный URL?   -  person EpicPandaForce    schedule 04.05.2015
comment
вы должны убедиться, что в вашем классе User есть геттеры и сеттеры.   -  person EpicPandaForce    schedule 04.05.2015


Ответы (1)


Попробуйте это..... Добавление .xml решит проблему

public interface TaskService {

@POST("/GetBulkQueryUpdates.xml")
void getWeather(@Body User user,
                Callback<String> callback);
}

И ваш класс User должен быть в этом формате

@Root(name = "breakfast_menu")
public class BreakFastMenu
{
@ElementList(inline = true)
List<Food> foodList;
}

@Root(name="food")
public class Food
{
@Element(name = "name")
String name;

@Element(name = "price")
String price;

@Element(name = "description")
String description;

@Element(name = "calories")
String calories;
}

ИЗМЕНИТЬ 1:

@Root — это аннотация, и в нашем случае это должен быть @Root(name = "ROWS"), который является корневым элементом вашего XML.

person Gowtham Raj    schedule 04.05.2015
comment
спасибо, я попробую это сейчас, но просто вопрос, что означает @Root? - person Rashad.Z; 04.05.2015