2017-02-01 7 views
0

私のアプリと私のPHPスクリプトの間の接続を処理するGoogle Volley APIを使ってアンドロイドアプリを作成しています。 何らかの理由で、アプリは私のサーバーにデータを送信しません。Androidのボレーのポストリクエストが機能しない

私のgetParams()メソッドは正しく呼び出されますが、印刷しようとするとnullが返されます。すべては実際にそのデータが私のPHPスクリプトがnullである変数

public class Server_interaction 
{ 
    String server_url = "http://xxxxxx/update_location.php"; //hidden from you ;) 
String response_string; 
RequestQueue queue; 
Context context; 

public Server_interaction(Context context) 
{ 
    this.context = context; 
    queue = Server_singleton.getInstance(context).getRequestQueue(); 
} 


public static final String TAG = Server_interaction.class.getSimpleName(); 

public void post_request(final VolleyCallback callback) 
{ 
    StringRequest stringRequest = new StringRequest(Request.Method.POST, server_url, 
      new Response.Listener<String>() 
      { 
       @Override 
       public void onResponse(String response) 
       { 
        response_string = response; 
        callback.onSuccess(response_string); 
        //requestQueue.stop(); 
        Log.i(TAG, "the response is: "+ response_string); 

       } 
      } 
      , new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error){ 
        response_string = "Something went wrong"; 
        //error.printstacktrace() 
        //requestQueue.stop(); 
        Log.i(TAG, "something went wrong. Is the server up and running?"); 
       } 

      }) 
    { 
     @Override 
     protected Map<String, String> getParams() throws AuthFailureError { 

      String the_name = "olaf"; 
      String the_mail = "lalalal"; 
      String the_country = "Norway"; 
      String the_latitude = "33"; 
      String the_longitude = "99"; 


      Map<String, String> params = new HashMap<String, String>(); 
      params.put("name", the_name); 
      params.put("email", the_mail); 
      params.put("country", the_country); 
      params.put("latitude", String.valueOf(the_latitude)); 
      params.put("longitude", String.valueOf(the_longitude)); 

      Log.i(TAG, "inside getparams : "+ super.getParams()); 
      return super.getParams(); 
     } 
    };//stringrequest parameter end 

    //add request to requestqueue 
    Server_singleton.getInstance(context).addToRequestQueue(stringRequest); 
    Log.i(TAG, "the response again:: "+ response_string); 


} 

} 
+0

元の質問でのgetParamsのような重要な情報を入れてください。これがなければ、リクエストキューが実行されていない、つまりstart()を呼び出すことができなかったように思えます。 –

+0

私はシングルトンクラスを呼び出し、私はそのすべてのcorrectyが完了したと信じています。しかし、私のPHPサーバー側のスクリプトは空(null)の値を取得し、getparams.putメソッドは防ぐ必要がありますか?彼らはしないべきですか? – p3ob2lem

+0

アイデアガベ? – p3ob2lem

答えて

1
Map<String, String> params = new HashMap<String, String>(); 
    params.put("name", the_name); 
    params.put("email", the_mail); 
    params.put("country", the_country); 
    params.put("latitude", String.valueOf(the_latitude)); 
    params.put("longitude", String.valueOf(the_longitude)); 

    Log.i(TAG, "inside getparams : "+ super.getParams()); 
    return super.getParams(); 

文句を言うので、あなたは、あなたがそれらを無視している、すべてのあなたのparamsを追加している、私は信じて正しく渡されていないため除いて、働いていますsuper.getParamsを呼び出します。 super.getParams()の代わりにparamsを返すか、2つの結果をマージします。あなたの親はStringRequestなので、ここでparamsを返すことができます(StringRequestは単独では追加しません)。

+0

ありがとうございますが、今は大きなエラーが発生し、アプリがクラッシュします。私のparamsメソッドがクラッシュする前に何千回も呼ばれているようです。巨大なスタックトレースを生成します。これは最初のビットです:致命的な例外:スレッド-136 プロセス:com.example.koenraad.Exigentia、PID:7288 java.lang.StackOverflowError: – p3ob2lem

+0

それを混乱させ、無限の再帰的ループ。しかし、あなたは新しいコードや完全なエラーを投稿していないので、修正する方法を教えてもらえません。しかし、私の推測では、return paramsの代わりにreturn getParams()を書いています。 –

+0

私はそんなにばかです。正しい。奇妙なことに、私のPHPサーバー側はまだデータを受け取っていないと不満を抱いています。データはnull/falseです。私は文字列が.putメソッドで使用する直前にハードコーディングされているので、非常に奇妙です。今paramsには正しい値が含まれていますが、まだ正しくポスティングされていませんか? – p3ob2lem

0

これにあなたのコードを変更しよう:

StringRequest stringRequest = new StringRequest(Request.Method.POST, REGISTER_URL, new Response.Listener<String>() { 
      @Override 
      public void onResponse(String s) { 
       Toast.makeText(ReserveProperty.this, s, Toast.LENGTH_SHORT); 



      } 
     }, new Response.ErrorListener(){ 

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

      } 
     }){ 
      protected Map<String,String> getParams() 
      { 
        String the_name = "olaf"; 
     String the_mail = "lalalal"; 
     String the_country = "Norway"; 
     String the_latitude = "33"; 
     String the_longitude = "99"; 


     Map<String, String> params = new HashMap<String, String>(); 
     params.put("name", the_name); 
     params.put("email", the_mail); 
     params.put("country", the_country); 
     params.put("latitude", String.valueOf(the_latitude)); 
     params.put("longitude", String.valueOf(the_longitude)); 

       return params; 


      } 
     }; 


     Volley.newRequestQueue(this).add(stringRequest); 



    } 
+0

ありがとう、しかし、これを行った後、それでも私のPHPスクリプトに正しいデータを送信しません。 PHPは何も受け取らない(またはnull?)。 – p3ob2lem

+0

多分私はあなたに私のPHPのmscriptを与え、あなたはabitを変更する –

+0

本当ですか?あなたはどこにそれを与えることができますか? – p3ob2lem

関連する問題