通行证的JSONObject作为请求参数使用POST方法凌空

问题描述:

我只是想用JsonRequestObject到值发送到PHP脚本和接收JSON数据,但下面的代码无法正常工作通行证的JSONObject作为请求参数使用POST方法凌空

package com.demo.volleyjsondemo; 

import android.content.Context; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.TextView; 

import com.android.volley.AuthFailureError; 
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.StringRequest; 
import com.demo.volleyjsondemo.Utils.Constants; 
import com.demo.volleyjsondemo.Utils.RequestSingleTone; 

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

import java.util.HashMap; 
import java.util.Map; 

public class MainActivity extends AppCompatActivity { 

    JsonObjectRequest jsonObjectRequest; 
    TextView txtName, txtEmail; 
    JSONObject parameters; 
    Context context; 

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

     init(); 
     try { 
      sendReq(); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

    private void init() { 
     context = MainActivity.this; 
     txtName = (TextView) findViewById(R.id.txtName); 
     txtEmail = (TextView) findViewById(R.id.txtEmail); 
    } 

    private void sendReq() throws JSONException { 

     //just to demonstrate how to send parameters with json request 
     parameters = new JSONObject(); 
     try { 
      parameters.put(Constants.NAME, "jack"); 
      Log.e("paramter",parameters.toString()); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     //jsonobjectrequest to send request and get response in json 
     jsonObjectRequest = new JsonObjectRequest(
       Request.Method.POST //request method 
       , Constants.BASE_URL + Constants.GET_PERSON_DETAILS_URL //URL of php file 
       , new JSONObject(parameters.toString()) //parameters to send to server 
       , new Response.Listener<JSONObject>() { //response will come here in case of success 
      @Override 
      public void onResponse(JSONObject response) { 
       try { 
        Log.e("response", response.getString(Constants.NAME)); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
     }, 
       new Response.ErrorListener() { //response will come here in case of error 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         error.printStackTrace(); 
        } 
       }); 

     //add request to singletone 
     RequestSingleTone.getInstance(context).addRequest(jsonObjectRequest); 
    } 
} 

PHP代码

<?php 
    require_once 'dbconfig.php'; 


    $name = $_POST['name']; 

    //$name="jack"; 

    $singlePersonInfoQuery = "SELECT * FROM test WHERE name='".$name."'"; 

    $result = mysqli_query($con,$singlePersonInfoQuery); 

    if(mysqli_num_rows($result) > 0){ 
     $raw = mysqli_fetch_assoc($result); 

     echo json_encode(array("name"=>$raw['name'],"email"=>$raw['email'])); 
    }else{ 
     echo json_encode(array("name"=>$name,"email"=>"blank")); 
    } 

?> 

我得到以下错误

10-06 14:36:34.943 5256-5256/com.demo.volleyjsondemo W/System.err: com.android.volley.ParseError: org.json.JSONException: Value perfect<br of type java.lang.String cannot be converted to JSONObject 
10-06 14:36:34.943 5256-5256/com.demo.volleyjsondemo W/System.err:  at com.android.volley.toolbox.JsonObjectRequest.parseNetworkResponse(JsonObjectRequest.java:73) 
10-06 14:36:34.943 5256-5256/com.demo.volleyjsondemo W/System.err:  at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:123) 
10-06 14:36:34.943 5256-5256/com.demo.volleyjsondemo W/System.err: Caused by: org.json.JSONException: Value perfect<br of type java.lang.String cannot be converted to JSONObject 
10-06 14:36:34.943 5256-5256/com.demo.volleyjsondemo W/System.err:  at org.json.JSON.typeMismatch(JSON.java:111) 
10-06 14:36:34.943 5256-5256/com.demo.volleyjsondemo W/System.err:  at org.json.JSONObject.<init>(JSONObject.java:160) 
10-06 14:36:34.943 5256-5256/com.demo.volleyjsondemo W/System.err:  at org.json.JSONObject.<init>(JSONObject.java:173) 
10-06 14:36:34.943 5256-5256/com.demo.volleyjsondemo W/System.err:  at com.android.volley.toolbox.JsonObjectRequest.parseNetworkResponse(JsonObjectRequest.java:68) 
10-06 14:36:34.943 5256-5256/com.demo.volleyjsondemo W/System.err: ... 1 more 

我猜想上面的警告是因为错误在PHP代码script..Above接收参数,做工精细,如果我不传递任何参数或使用stringrequest,但我想用jsonrequestobject..I无法理解什么是错

+1

我们真的不能只从代码说,你需要调试PHP脚本,并确保它总是输出形成正确的JSON。在Java错误在PHP响应什么不对劲的提示。 –

+0

当我正常使用$ NAME =“杰克”,它的工作原理fine..It是给我正确的JSON数据,但我很困惑,向Android传递参数和php.That装置接收名称不写的长度适当 –

+0

传递在文件接收参数,我发现我无法接收参数,因为它显示0 length..Please帮助我,我怎么能传递请求参数,并用它在PHP脚本 –

最后回答我的问题的方式,调试我的PHP脚本后,我发现我在接收PHP script..As我发送参数的JSONObject参数来实现,没有$ _ POST或$ _GET将work.Please参考下这是工作fine..I希望这会帮助别人

的Android代码: -

package com.demo.volleyjsondemo; 

import android.content.Context; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.TextView; 

import com.android.volley.AuthFailureError; 
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.StringRequest; 
import com.demo.volleyjsondemo.Utils.Constants; 
import com.demo.volleyjsondemo.Utils.RequestSingleTone; 

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

import java.io.UnsupportedEncodingException; 
import java.util.HashMap; 
import java.util.Map; 

public class MainActivity extends AppCompatActivity { 

    JsonObjectRequest jsonObjectRequest; 
    TextView txtName, txtEmail; 
    Context context; 
    Map<String, String> parametersMap = new HashMap<>(); 

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

     init(); 
     try { 
      sendReq(); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

    private void init() { 
     context = MainActivity.this; 
     txtName = (TextView) findViewById(R.id.txtName); 
     txtEmail = (TextView) findViewById(R.id.txtEmail); 
    } 

    private void sendReq() throws JSONException { 

     //just to demonstrate how to send parameters with json request 
     parametersMap.put(Constants.NAME, "jack"); 

     //jsonobjectrequest to send request and get response in json 
     jsonObjectRequest = new JsonObjectRequest(
       Request.Method.POST //request method 
       , Constants.BASE_URL + Constants.GET_PERSON_DETAILS_URL //URL of php file 
       , new JSONObject(parametersMap) //parameters to send to server 
       , new Response.Listener<JSONObject>() { //response will come here in case of success 
      @Override 
      public void onResponse(JSONObject response) { 
       Log.e("response","received"); 
       try{ 
        txtEmail.setText(response.getString(Constants.EMAIL)); 
        txtName.setText(response.getString(Constants.NAME)); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
     }, 
       new Response.ErrorListener() { //response will come here in case of error 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         error.printStackTrace(); 
        } 
       }); 

     //add request to singletone 
     RequestSingleTone.getInstance(context).addRequest(jsonObjectRequest); 
    } 
} 

PHP代码: -

<?php 
    require_once 'dbconfig.php'; 
    $name = json_decode(file_get_contents("php://input"),true); //sending json object from android..can not receive parameters using $_POST or $_GET 

    $singlePersonInfoQuery = "SELECT * FROM `test` WHERE `name`='".$name['name']."'"; 

    $result = mysqli_query($con,$singlePersonInfoQuery); 

    if(mysqli_num_rows($result) > 0){ 
     $raw = mysqli_fetch_assoc($result); 
    }else{ 

    } 
    echo json_encode(array("name"=>$raw["name"],"email"=>$raw["email"])); 
?>