2013-07-04 8 views
7

loopjのasync http libraryを使用してPOSTをサーバーに送信しようとしています。次のコードはかなり標準ですが、私はそれを動作させることはできません。AsyncHttpRequest POSTがコールバックを起動していません(loopjによるandroid-async-http)

私はかなりデバッグしているし、次のことを確認しています

  • URLが正しいです。
  • paramsは正しく、params変数に正しく格納されます。

HttpResponse response = client.execute(request, context);AsyncHttpRequest.makeRequest()に呼び出されたときに、要求がどんなのparamsが含まれていないことが表示されます:

EDIT:もう少しコードを見た後、POSTのparamsが含まれるかもしれないようですエンティティまたはヘッドグループ。

enter image description here

しかし、本当の問題は、私はコールバックのいずれかを取得しないということである(以下のコードを参照してください)。 client.execute()呼び出しの後のifステートメントは、決して呼び出されません(ブレークポイントはトリガーされません)。

RequestParams params = new RequestParams(); 
params.put("loginid", "user"); 
params.put("password", "pass"); 
params.put("deviceid", "deviceid"); 

AsyncHttpClient client = new AsyncHttpClient(); 
client.post(MDSettings.BASE_URL + "/user/login", params, new AsyncHttpResponseHandler() { 
    @Override 
    public void onSuccess(String response) { 
     Log.d(MDSettings.TAG, "MDConnectionManager - login - response: " + response); 
     singleton.connectionSuccessful(response, returnIndex); 
    } 

    @Override 
    public void onFailure(Throwable error, String content) { 
     Log.d(MDSettings.TAG, "MDConnectionManager - login - content: " + content); 
     singleton.connectionFailed("Login Failed", error.getMessage(), returnIndex); 
    } 
}); 

私はこのプロジェクトに後で必要とするファイルを送信できるので、このライブラリを使用しています。同じ事をしている(そして実際に働く)別のライブラリがあれば、それは私とうまくいくでしょう。

私の質問は次のとおりです。なぜコールバックを取得できないのですか?これをどのように修正できますか?何かが明確でない時に私に教えてください。私はもっと深く説明しようとします。

+0

このユーザー/ログインファイルに関していくつか議論することは可能ですか? –

+0

あなたは何を知りたいですか?私は 'onSuccess()'と 'onFailure()'コールバックが呼び出されていないことを意味する 'Log.d()'メッセージが表示されないので、何も表示する必要はないと思います。 – Manuel

+0

私はあなたに尋ねるので、無効なパラメータのために何回かjson応答が生成されないからです。 –

答えて

3

それは私のandroid.permission.INTERNETエントリがマニフェストファイルから削除されたようです。それを再び追加した後、すべてが期待通りに機能しました。何かがうまくいかなくなるたびに、私はアクセス許可をチェックします。

+0

ありがとう、私はちょうど1年後にAndroidに戻って、この許可を忘れる:) –

0

私はこのライブラリについて何も知りませんが、AsyncTasksを使用して、これに似たものを作ってみませんか?たとえば、AsyncTaskをサブクラス化し、ロードするURLを指定できます。 AsyncTaskをサブクラス化し、それにCallableオブジェクトを提供する方法もあります。この方法では、このクラスを一般化することで、ネットワーク要求だけでなく、さまざまな長時間のタスクを実行するのに適しています。どちらのメソッドも、コールバック(onSuccess、onFailure)とのインタフェースを利用できます。また、onPostExecuteMethodでは、タスクの実行中にエラーがあったかどうかを判断し、必要なコールバックを提供することができます。

+0

私は通常のPOSTをする必要がある場合は、あなたが言ったことを正確に行っていたでしょうが、プロジェクトの後半に(かなり大きな)ファイルを送る必要があります。可能であれば、ライブラリを使用したいと思います。 – Manuel

0

あなたのコードではpostメソッドからresponsehanlderを直接呼び出しています。最初 :次の行で

client.post(MDSettings.BASE_URL + "/user/login", params, responseHandler); 

はちょうどそれが

+0

私はGETからではなくPOSTからの応答を得る必要があります(これは私にエラーXMLを与えます)。 – Manuel

1

この単純なスニペットを試してみてくださいから、次にuは、応答を取得するgetメソッド

client.get(MDSettings.BASE_URL + "/user/login", new AsyncHttpResponseHandler() { 
     @Override 
     public void onSuccess(String response) { 
      System.out.println(response); 
     } 
    }); 

を追加します。

これは自分の端末で機能します。

それは、POSTが許可されていないとして "失敗" 印刷します(HTTPステータス:405)

AsyncHttpClient client = new AsyncHttpClient(); 
RequestParams params = new RequestParams(); 
params.put("q", "google"); 

client.post("http://google.com", params, new AsyncHttpResponseHandler(){ 
    public void onSuccess(String arg0) { 
     Log.d("TAG", "Success");   
    };          

    public void onFailure(Throwable arg0, String arg1) { 
     Log.d("TAG", "Failure");   
    }; 
}); 
+0

私はこのコードを試しましたが、何もしません(自分のコードのように)。私はインターネットに接続できないようです。 – Manuel

+0

賞金のためにこの回答を選んだのは、問題を見つけるのを助けたからです(削除されたアクセス許可のためにインターネットに接続できません)。 – Manuel