2017-10-06 147 views
0

我只是想用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腳本 –

回答

0

最後回答我的問題的方式,調試我的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"])); 
?> 
相關問題