2015-10-06 69 views
0

我在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類 - BaseModelRequestProtobufDTOBaseModelResponseProtobufDTO

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未找到。

我做錯了什麼?請!

+0

這意味着您的網址是錯 – Tauqir

+0

我可以調用服務器通過改造,如果它不是REST API?簡單的服務器 – Gilb007

+0

@ Tauqir,你是對的。 Omg,翻新+ rxjava工程perfetc。 @POST( 「http://77.108.126.41:8080/AAA/endpointshttp/protobuf/baseMethod」)。 Thnx很多 – Gilb007

回答

相關問題