2017-10-06 9 views
0

난 그냥 JSON 데이터를 PHP 스크립트에 값을주고받을 수 JsonRequestObject를 사용하려고했지만 코드 아래패스는 포스트 방법 발리슛을 사용하여 요청 매개 변수로 된 JSONObject

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 스크립트에서 매개 변수를받는 방법. 매개 변수를 전달하지 않거나 stringrequest를 사용하지만 jsonrequestobject를 사용하려고하면 코드가 제대로 작동합니다. 무엇이 잘못되었는지 이해할 수 없습니다.

+1

정말 그 코드만으로는 PHP 스크립트를 디버깅하고 항상 올바르게 구성된 json을 출력해야합니다. 자바 오류는 PHP 응답에서 잘못된 점을 암시합니다. –

+0

정상적인 $ name = "jack"을 사용하면 정상적으로 작동합니다. 적절한 json 데이터를 제공하지만 안드로이드의 매개 변수를 전달하고 PHP에서 수신하는 것에 대해 혼란 스럽습니다. 이름이 제대로 전달되지 않음을 의미합니다. –

+0

길이 기입 파일에서받는 매개 변수, 내가 0 길이를 보여주고 있기 때문에 매개 변수를받지 못하고있는 것으로 나타났습니다 .. 내가 어떻게 매개 변수를 전달하고 PHP 스크립트에서 사용할 수 있습니다 도와주세요 –

답변

0

마지막으로 내 질문에 대답하고, 내 PHP 스크립트를 디버깅 한 후 나는 PHP 스크립트에서 매개 변수를받는 일을 발견했다. jsonobject, No $ _POST 또는 $ _GET 매개 변수를 보내는 중이다. 잘 작동하는지 아래를 참조하십시오. 도움이되기를 바랍니다.

안드로이드 코드 : -

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"])); 
?>