首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用post方法volley将jsonobject作为请求参数传递

使用post方法volley将jsonobject作为请求参数传递
EN

Stack Overflow用户
提问于 2017-10-07 02:44:49
回答 1查看 774关注 0票数 0

我只是尝试使用JsonRequestObject将值发送到php脚本并接收json数据,但下面的代码不起作用。

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代码中接收参数的错误方式,如果我不传递任何参数或者使用字符串请求,但是我想使用jsonrequestobject..我不能理解出了什么问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-08 13:11:16

最后回答我自己的问题,在调试我的php脚本后,我发现我在接收php script..As中的参数时,我正在发送参数作为jsonobject,没有$_POST或$_GET会在下面work.Please引用,它工作得很好..我希望它能帮助一些人

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"]));
?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46612072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档