2016-05-14 9 views
4

と呼ばれていません、私はPHPの一部が単独で試験し、それは100%の作業だとアンドロイド:バレーボール文字列要求onresponseが

を想定して、それはJSON文字列を返しているPOSTメソッド

を使用してPHPのためにアンドロイドからのデータを送信しようとしています

アンドロイド一部が、それは誤り 、あるいは必要な応答ここ

を印刷しません が動作していないことは、コードであり、それはトーストを使用して文字列「テスト」を印刷し、テストされていますが、それは中に変更されません。ボレーコード:(

これはPHPコードである:私は方法

setUserData(username); 
    Toast.makeText(LoginActivity.this, test, Toast.LENGTH_SHORT).show(); 
呼び出す場合、これは出力

String test = "none"; 

を表示するテスト文字列を初期化

<?php 
    require_once(__DIR__.'/../dbConnect.php'); 


    $userName=$_POST['username']; 

    $query = "SELECT * FROM users WHERE username='$userName'"; 
    $result = pg_query($con, $query); 
    $rows = pg_num_rows($result); 

    while ($row = pg_fetch_row($result)) 
    { 
     $field = pg_num_fields($result); 

     for ($i = 0; $i < $field; $i++) { 

      $name = pg_field_name($result, $i); 
      $user_arr[$name] = $row[$i]; 
     }    
    } 

    echo json_encode($user_arr); 

    pg_close($con); 

    ?> 

、これはAndroidのコードであります

これは方法です:

private void setUserData(final String username) 
    { 
     StringRequest strReq = new StringRequest(Request.Method.POST, 
       Server.GET_USERDATA_URL, new Response.Listener<String>() { 

      @Override 
      public void onResponse(String response) { 

        test= "test = "+response; 

      } 
     }, new Response.ErrorListener() { 

      @Override 
      public void onErrorResponse(VolleyError volleyError) { 
       Toast.makeText(LoginActivity.this, volleyError.getMessage().toString(), Toast.LENGTH_LONG).show(); 

      } 
     }) 

     { 

      @Override 
      protected Map<String, String> getParams() { 
       // Posting parameters to getData url 
       Map<String, String> params = new HashMap<String, String>(); 
       params.put(Server.KEY_USERNAME, username); 
       return params; 
      } 

     }; 
     //Creating a Request Queue 
     RequestQueue requestQueue = Volley.newRequestQueue(this); 
     //Adding request to the queue 
     requestQueue.add(strReq); 
    } 
+0

あなたはブレークポイントを追加したり、それが – Shubhank

+0

そう呼ばれているかどうかをチェックするために 'onResponse'にログインしなかった............ –

+0

Webrequestが終了するまで5-6秒待って、テスト値が生成されているかどうかを確認しましたか? – Shubhank

答えて

1

でトーストを追加します。 setUserData(username)メソッドを実行すると、Volleyはバックグラウンドスレッドで作業をしています。したがって、Toastに表示する前に応答を待つ必要があります。あなたが呼び出した瞬間に:

Toast.makeText(LoginActivity.this, test, Toast.LENGTH_SHORT).show(); 

サーバーがまだ応答していないとtestはまだnoneになります。あなたはonResponseコールバックからトーストを呼び出す必要があります:

private void setUserData(final String username) { 

    StringRequest strReq = new StringRequest(
     Request.Method.POST, 
     Server.GET_USERDATA_URL, 
     new Response.Listener<String>() { 

      @Override 
      public void onResponse(String response) { 

       test = "test = "+response; 
       showToast(); 

      } 
     }, 
     new Response.ErrorListener() { 

      @Override 
      public void onErrorResponse(VolleyError volleyError) { 
       Toast.makeText(LoginActivity.this, volleyError.getMessage().toString(), Toast.LENGTH_LONG).show(); 

     } 
    }) 

    { 

     @Override 
     protected Map<String, String> getParams() { 
      // Posting parameters to getData url 
      Map<String, String> params = new HashMap<String, String>(); 
      params.put(Server.KEY_USERNAME, username); 
      return params; 
     } 

    }; 
    //Creating a Request Queue 
    RequestQueue requestQueue = Volley.newRequestQueue(this); 
    //Adding request to the queue 
    requestQueue.add(strReq); 
} 

private void showToast() { 

    Toast.makeText(LoginActivity.this, test, Toast.LENGTH_SHORT).show(); 
} 
+0

あなたは私にもっと理解してくれました...ありがとうございました。 –

+0

私は別の質問があります。メソッドがある場合、そのメソッドがバックグラウンドスレッドで作業を完了し、完全に終了した後に実行したいと思っています。 ''Response()で呼び出す以外の方法はありますか? –

+0

残念ながら、ネットワークリクエストが終了した後に起こりたいことは、 'onResponse()'から呼び出さなければなりません – Jahnold

1

インターネットアクセス許可を持っているかどうかを確認してください。

また、あなたは同時実行の問題を持っている

onResponse() 
Toast.makeText(LoginActivity.this, response.toString(), Toast.LENGTH_LONG).show(); 
+0

インターネット許可がマニフェストに追加されました....うまくいきません。テスト変数の初期値が表示されます –

関連する問題