2017-03-05 6 views
1

少し助けが必要です:)2回のクリックでVolley onResponseの仕事

私はAndroidアプリでvolleyを使用していますが、私はこのコードを書いています。

public String validateCredentials(final String email, final String password) { 

    StringRequest strReq = new StringRequest(com.android.volley.Request.Method.POST, 
      LOGIN_URL, new com.android.volley.Response.Listener<String>() { 

     @Override 
     public void onResponse(String response) { 
      try { 
       JSONObject serverResponse = new JSONObject(response); 
       Log.d("Result: ", serverResponse.getString("result")); 
       responseServ = serverResponse.getString("result"); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
    }, new com.android.volley.Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
     } 
    }) { 
     @Override 
     protected Map<String, String> getParams() { 
      Map<String, String> params = new HashMap<String, String>(); 
      params.put(email, password); 
      return params; 
     } 
    }; 
    AppController.getInstance().addToRequestQueue(strReq); 
    return responseServ; 
} 

私はボタンLog.d("Result: ", serverResponse.getString("result"));をクリックすると、このコードは仕事ですが、return responseServ;は、最初のクリックで任意のデータを送信できません。

マイボタンのonClickコードは、どのように私はこの問題を解決するのです

Toast.makeText(activity, authModel.validateCredentials(email, password), Toast.LENGTH_SHORT).show(); 

のですか?事前に

おかげ

答えて

2

バレーボールは、別名あなたが呼び出し、その後、コールバックが実行される(Log.d()の部分)を作る非同期です。しかし、最初に空の値を同期的に返し、2回目の値だけを返すようにしています。 2回目に最初の結果が返ってくることに注意してください。

何がしなければならないことはonResponse()

PSですべての作業を行うことである:あなたがMVPパターンを維持したいとあなたはコールバックInterfaceを定義し、validateCredentials(final String email, final String password, final OnLoginComplete callback)に渡し、その後onResponse() callback.loginComplete(中CAN-)

+0

私は理解していますが、私はmvpシステムを使用しようとしています。そしてこのコードは私のloginModelクラスにあります。私はpresenterImplentsでモデルからデータを取得し、結果が成功すればユーザーはログインできます。 onResponse()ですべての作業を行うだけなら、これはMVPシステムではありません。私は正しい? –

+0

@AhmetTalutTasgiran iveさんは私の答えを編集しました。これが役立つかどうかを確認してください – X3Btel

+0

ありがとうございます。私はついにそれをやった:D時間前に私はどのようにコールバックインターフェイスシステムを使用するのか分からないので:D(私の英語のために申し訳ありません) –

関連する問題