2016-05-03 7 views
0

他のアンドロイドデバイスでうまく動作するアンドロイドアプリがありますが、データのアンドロイドバージョン4.0.4を実行しているsamsung s3では失敗します。 Retrofitは404(ページが見つかりませんでしたエラー)がスローされますが、ページが存在し、私がwifiで同じリクエストを行うとうまくいきます。何が起こっているのか考えている人。おかげデータの更新中にsamsung s3 android version 4.0.4に投稿できません

は、スタックトレースの下

retrofit.RetrofitError: 404 Not Found 
    at retrofit.RestAdapter$RestHandler.invokeRequest (RestAdapter.java:388) 
    at retrofit.RestAdapter$RestHandler.access$100 (RestAdapter.java:220) 
    at retrofit.RestAdapter$RestHandler$2.obtainResponse (RestAdapter.java:278) 
    at retrofit.CallbackRunnable.run (CallbackRunnable.java:42) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1076) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:569) 
    at retrofit.Platform$Android$2$1.run (Platform.java:142) 
    at java.lang.Thread.run (Thread.java:856) 

の下に見つけてください、私はデバッグの何日後にコール

val tailorsInterface = RestAdapter.Builder() 
       .setEndpoint(resources.getString(R.string.base_url)) 
       .build().create(TailorsInterface::class.java) 

    tailorsInterface.addTailor(txtName.text.toString(), txtEmail.text.toString(), 
       Utils.parsePhone(txtPhone.text.toString(), "254"), txtAddress.text.toString(), 
       txtLon.text.toString(), txtLat.text.toString(), txtPassword.text.toString(), 
       Common.LOCATIONS!!.get(spTowns.selectedItemPosition).id, object : Callback<DefaultResponse> { 


      override fun success(defaultResponse: DefaultResponse, response: Response) { 
       dialog.hide() 
       if(defaultResponse.success == 1.toLong()){ 
        val alertDialog: AlertDialog 
        val builder = AlertDialog.Builder([email protected]) 
          .setTitle(resources.getString(R.string.app_name)) 
          .setMessage("Tailor successfully registered, click OK to continue to login") 
          .setPositiveButton("OK") { dialog, which -> run{dialog.dismiss() 
           val loginIntent: Intent = Intent([email protected], TailorsLoginActivity::class.java) 
           startActivity(loginIntent) 
          } } 
        alertDialog = builder.create() 
        alertDialog.show() 

       }else{ 
        val alertDialog: AlertDialog 
        val builder = AlertDialog.Builder([email protected]) 
          .setTitle(resources.getString(R.string.app_name)) 
          .setMessage("An Error occurred please try again later") 
          .setPositiveButton("OK") { dialog, which -> run{dialog.dismiss() 
           finish()} } 
        alertDialog = builder.create() 
        alertDialog.show() 
       } 
      } 

    @FormUrlEncoded 
    @POST("/tailors") 
    public fun addTailor(@Field("name") name: String, @Field("email") email: String, 
        @Field("phone") phone: String, @Field("address") address: String, 
        @Field("lon") lon: String, @Field("lat") lat: String, 
        @Field("password") password: String, @Field("town") town: Int, 
        cb: Callback<DefaultResponse>) 

    data class DefaultResponse (
      var success: Long, 
      var message: String 
    ) 
+0

通話方法のコードを追加してください。 –

+0

@RohitArya要求通りにコードを追加しました。 – lemaiyan

答えて

0

を作るために使用していたコードは最終的にどのような問題は、私を理解しようとしています問題は改造されていないが、それは私が使用しているWebサーバーだという解決策を見出した。私は自分のアプリケーションをclojureで行い、私はhttp-kitを私のウェブサーバとルーティングのためのコンポジットとして使用しています。

何らかの理由で、s3からのリクエストがhttp-kitリクエストマップのuriにもホストが含まれているため、デフートのルートにマップされていません。たとえば、私が探しているルートが/loginであるとすれば、s3からのリクエストのhttp-kitリクエストマップのuriにはhttp://example.com/loginが含まれていますが、その他の電話機には/loginが含まれています。したがって、URIは、私がcompojureのDEFROUTEで定義されている私の経路のいずれかにマッチして行くストレート見つからないようにしていないので、404エラー

ソリューション

私は延長していたこの問題を解決するために、 URIが一致しない場合Compojureroutes.cljとは、私は機能other-foundを使用して、それを渡すDEFROUTEでは、以下の機能

(defn other-found 
"if for some reason the route is defined and is not found " 
[body] 
(fn [request] 
    (-> (response/render body request) 
    (status 200) 
    (cond-> (= (:request-method request) :head) (assoc :body nil))))) 

を追加した機能not-found-page(あなたがCにしたいものは何でも、この関数に名前を付けることができますすべてそれ)私は要求パラメータからuriを取得し、それを解析してエンドポイントを取得し、condpを使用してエンドポイントを適切な関数にマップします。

これは、同様の問題を抱えている人に役立ちます。

関連する問題