2017-12-27 8 views
0

PHPコードから正しい応答を取得できない理由がわかりません。私のPHPコードでは、それは本当に簡単です。それはPOST引数を返すだけです。しかし、私のAndroidプロジェクトでは、すべての引数に対してnullを返します。私は自分のiOSプロジェクトでPHPコードをテストしようとしました。すべてが完璧に動作します。それは["target": zh, "arrayString": <__NSSingleObjectArrayI 0x6000000192a0>(hello world), "source": en]を返す私はおそらく私のAndroidプロジェクトにいくつかの問題があると思うし、私は新しいプロジェクトを作成しようとし、再びそれを行うが、同じ問題を打つ。以下は私の新しいAndroidプロジェクトの手順です。JsonObjectRequest - 引数を送信できません

ビルドのGradle

dependencies { 
    compile 'com.android.volley:volley:1.1.0' 
} 

AndroidManifest

<uses-permission android:name="android.permission.INTERNET" /> 

MainActivity

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 

import com.android.volley.Request; 
import com.android.volley.Response; 
import com.android.volley.VolleyError; 
import com.android.volley.toolbox.JsonObjectRequest; 
import com.android.volley.toolbox.Volley; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     String requestString = "http://ddoommaaiinn.com/testPost.php"; 
     JSONObject parameters = new JSONObject(); 
     try { 
      parameters.put("source", "en"); 
      parameters.put("target", "zh"); 
      JSONArray jsonArray = new JSONArray(); 
      jsonArray.put("hello world"); 
      parameters.put("stringArray", jsonArray); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     Log.d("JSONParams", parameters.toString()); 

     JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.POST, requestString, parameters, new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject response) { 
       //TODO: handle success 
       Log.d("successful", response.toString()); 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       error.printStackTrace(); 
       //TODO: handle failure 
      } 
     }); 

     Volley.newRequestQueue(this).add(jsonRequest); 
    } 
} 

デバッグ

12-27 08:47:19.994 4363-4363/com.pakhocheung.testjsonobjectrequest D/JSONParams: {"source":"en","target":"zh","stringArray":["hello world"]} 
12-27 08:47:20.050 4363-4395/com.pakhocheung.testjsonobjectrequest D/NetworkSecurityConfig: No Network Security Config specified, using platform default 
12-27 08:47:20.079 4363-4397/com.pakhocheung.testjsonobjectrequest D/OpenGLRenderer: HWUI GL Pipeline 
12-27 08:47:20.885 4363-4397/com.pakhocheung.testjsonobjectrequest I/zygote: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasWideColorDisplay retrieved: 0 
12-27 08:47:20.886 4363-4397/com.pakhocheung.testjsonobjectrequest I/OpenGLRenderer: Initialized EGL, version 1.4 
12-27 08:47:20.886 4363-4397/com.pakhocheung.testjsonobjectrequest D/OpenGLRenderer: Swap behavior 1 
12-27 08:47:20.886 4363-4397/com.pakhocheung.testjsonobjectrequest W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without... 
12-27 08:47:20.886 4363-4397/com.pakhocheung.testjsonobjectrequest D/OpenGLRenderer: Swap behavior 0 
12-27 08:47:20.892 4363-4397/com.pakhocheung.testjsonobjectrequest D/EGL_emulation: eglCreateContext: 0xa6f859e0: maj 2 min 0 rcv 2 
12-27 08:47:20.895 4363-4397/com.pakhocheung.testjsonobjectrequest D/EGL_emulation: eglMakeCurrent: 0xa6f859e0: ver 2 0 (tinfo 0xb050d880) 
12-27 08:47:20.998 4363-4397/com.pakhocheung.testjsonobjectrequest D/EGL_emulation: eglMakeCurrent: 0xa6f859e0: ver 2 0 (tinfo 0xb050d880) 
12-27 08:47:21.279 4363-4363/com.pakhocheung.testjsonobjectrequest D/successful: {"source":null,"target":null,"arrayString":null} 

PHPコード

<?php 
$source = $_POST['source']; 
$target = $_POST['target']; 
$arrayString = $_POST['stringArray']; 
echo json_encode(array('source'=>$source,'target'=>$target,'arrayString'=>$arrayString)); 
?> 
+0

試し '$ postArray = json_decode(のfile_get_contents( 'PHP://入力')、真の);'、そして '$元= $ postArray [ 'ソース']'などに。あるいは、最初の行の後に 'var_dump($ postArray)'を行うのがよいでしょう。 – Jeff

+0

'' '$ postArray = json_decode(file_get_contents( 'php:// input')、true);を使用すると、$ source = $ postArray ['source']' ''正しい結果が得られます。ありがとうたくさん –

+0

私は答えとしてこれを追加します!それを受け入れることは自由にできます... – Jeff

答えて

1

JsonObjectRequestを使用する場合、希望のデータはphp://inputに(json)文字列として格納されます。データが行うことを取得するには:

<?php 
$postArray = json_decode(file_get_contents('php://input'), true); 

// now you access the values nearly as before: 
$source = $postArray['source']; 
$target = $postArray['target']; 
$arrayString = $postArray['arrayString']; 

echo json_encode(array('source'=>$source,'target'=>$target,'arrayString'=>$arrayString)); 
?> 
0

あなたは$ _POSTテストトライため

が動作していないように見えるがハードコードされる値

$source = 'test'; 
$target = 'test-target'; 
$arrayString = 'test-arrayString'; 

echo json_encode(array('source'=>$source,'target'=>$target,'arrayString'=>$arrayString)); 

それは次のようなJSONに

{"source":"test","target":"test-target","arrayString":"test-arrayString"} 

を与える必要があります追加してください何かが欠けている場合

+0

これはコメントではなく、回答でなければなりません。 – Jeff

+0

私はそれを削除することができます。コメントを書くことは難しいです。(何をすべきか教えてください。 –

+0

あなたの大切な貢献がすでに回答であれば、次回はそれを考えてください! – Jeff

関連する問題