Я работал над проектом Android (Android Studio 1.4). Я хочу подключиться к моему серверу Apache (не REST API), чтобы получать от него данные. important ВНИМАНИЕ. Я сделал те же запросы на мой сервер для проекта SWIFT iOS, я успешно получил запрос POST/GET, поэтому сервер настроен и работает хорошо. Я хочу сделать то же самое для Android. Bellow код:Android: Модернизация + RxJava отправляет запрос POST на локальный сервер. Я получаю - retrofit.HttpException: HTTP 404 не найден.
1) My Service.proto файл. Я использовал protobuf между моим клиентом и сервером.
option java_outer_classname = "Service";
message BaseModelRequestProtobufDTO
{
required string name = 1;
required string model = 2;
}
message BaseModelResponseProtobufDTO
{
required string response = 1;
}
2) Использование библиотеки 'com.squareup.wire: провод-среда: 1.8.0', У меня есть Java-классы - BaseModelRequestProtobufDTO и BaseModelResponseProtobufDTO
3) Мои Переоборудование интерфейс:
public interface RetrofitService {
public interface RetrofitService
{
@Headers({"Cookie: bank=*************", "Content-Type: **************"})
@POST("/baseMethod")
Observable{BaseModelResponseProtobufDTO} baseRequest(@Body BaseModelRequestProtobufDTO baseModelRequestProtobufDTO);
}
4) моя функция Войти взять Логин и пароль, отправить на сервер. Я хочу получить от него ответ.
public static void login(String login, String password){
Log.v("json", "enter in Login = ");
// Prepare data as JSON object
Map<String,String> dictionary = new HashMap<>();
dictionary.put("password", password);
dictionary.put("login", login);
JSONObject JSONData = new JSONObject(dictionary);
String JSONModel = JSONData.toString();
Log.v("json", JSONModel);
UFCRequest loginRequest = new UFCRequest("login", JSONModel);
Log.v("json",loginRequest.baseModel.toString());
Log.v("json",loginRequest.getBaseModel().toString());
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://77.108.126.41:8080/AAA/endpointshttp/protobuf")
.addConverterFactory(WireConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
RetrofitService retrofitService = retrofit.create(RetrofitService.class);
retrofitService.baseRequest(loginRequest.getBaseModel())
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber{BaseModelResponseProtobufDTO}() {
@Override
public void onCompleted() {
Log.v("json", "onCompleted");
}
@Override
public void onError(Throwable e) {
Log.v("json", "onError " + e);
}
@Override
public void onNext(BaseModelResponseProtobufDTO baseModelResponseProtobufDTO) {
Log.v("json", baseModelResponseProtobufDTO.response.toString());
Log.v("json", "onNext");
}
});
}
Я посылаю объект Protobuf на сервер, это содержит два строковых поля Имени и модели. имя - простой струна name. модель - это строка, полученная из объекта json, которая, в свою очередь, была переведена из словаря. Словарь - это логин и пароль.
5) Мой Gradle:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.0.0'
compile 'com.squareup.retrofit:retrofit:2.0.0-beta1'
compile 'com.squareup.wire:wire-runtime:1.8.0'
compile 'com.squareup.retrofit:adapter-rxjava:2.0.0-beta1'
compile 'com.squareup.retrofit:converter-gson:2.0.0-beta1'
compile 'com.squareup.retrofit:adapter-rxjava:2.0.0-beta2'
compile 'com.squareup.retrofit:converter-wire:2.0.0-beta2'
compile 'io.reactivex:rxandroid:1.0.1'
}
6) Мой результат: Я получить - retrofit.HttpException: HTTP 404 Not Found.
Что я делаю неправильно? Пожалуйста!
это означает, что ваш URL неправильно – Tauqir
Могу ли я позвонить серверу через дооснащения, если это не REST API? Простой сервер – Gilb007
@ Tauqir, вы были правы. Omg, retrofit + rxjava works perfetc. @POST ("http://77.108.126.41:8080/AAA/endpointshttp/protobuf/baseMethod"). Thnx много – Gilb007