我在Android項目(Android Studio 1.4)上工作。 我想連接到我的Apache服務器(而不是REST API)來接收他的數據。重要提示:我已經向SWIFT iOS項目的服務器進行了相同的查詢,我成功地獲得了POST/GET請求,因此服務器已建立並運行良好。我想爲Android做同樣的事情。 貝婁代碼:Android:Retrofit + 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的對象服務器,它包含兩個字符串字段名和模式。 名稱是簡單的字符串名稱。 模型是從json對象獲得的字符串,而json對象又是從字典中提取的。 Dictionary是登錄名和密碼。
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未找到。
我做錯了什麼?請!
這意味着您的網址是錯 – Tauqir
我可以調用服務器通過改造,如果它不是REST API?簡單的服務器 – Gilb007
@ Tauqir,你是對的。 Omg,翻新+ rxjava工程perfetc。 @POST( 「http://77.108.126.41:8080/AAA/endpointshttp/protobuf/baseMethod」)。 Thnx很多 – Gilb007