【问题标题】:Posting JSON file on a PHP file from Android Application, and decoding JSON to local variables on PHP从 Android 应用程序在 PHP 文件上发布 JSON 文件,并将 JSON 解码为 PHP 上的局部变量
【发布时间】:2016-03-02 13:35:59
【问题描述】:

我已经研究了一段时间,但没有得到任何结果。

我要做的是创建一个注册/登录活动,它将所有访问详细信息存储在远程 SQL 数据库中。

我的代码大纲是创建“Registrar”对象,将其转换为 JSON 对象,然后将该 JSON 对象转换为字符串,然后通过 httpclient 将该字符串作为帖子发送到 PHP 页面(位于在我的 XAMPP 上),请注意我正在使用 Android Studio Emulator。

我的问题:

我不知道PHP服务器是否接收到JSON文件。 这是我的代码:

提交函数:

public void goSubmit(View view) throws IOException {

    EditText nameEdit = (EditText) findViewById(R.id.nameEdit);
    EditText idEdit = (EditText) findViewById(R.id.idEdit);
    String name = nameEdit.getText().toString();
    String ID = idEdit.getText().toString();

    //Creating Student (Registrar) Object
    Student registrar = new Student();
    registrar.setMajor(majorEdit);
    registrar.setName(name);
    registrar.setId(ID);

    //Creating JSON String


    String registrarJSON = null;

    try {
    registrarJSON = ObjInJSON(registrar);
        Toast.makeText(this,  registrarJSON, Toast.LENGTH_LONG).show();
    } catch (JSONException e) {
        e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }

    //Posting JSON String on Remote PHP

    String PHPresponse = sendToRegistrationPHP(registrarJSON);
    Toast.makeText(this, PHPresponse, Toast.LENGTH_LONG).show();
    //Receive PIN from PHP as JSON String


    //Parsing JSON string to integer (pin)


    //Set PIN in registrar.getpin()


    //Passing the object to setPassword Activity condition registrar.pin =! null


}

学生班:

 public class Student {

     String Id = "NULL" ;
     String Major = "NULL";
     String Name = "NULL";
     String Password = "NULL";
     String Pin = "NULL";


    public String getPin() {
        return Pin;
    }

    public void setPin(String pin) {
        Pin = pin;
    }

    public String getPassword() {
        return Password;
    }

    public void setPassword(String password) {
        Password = password;
    }

    public String getId() {
        return Id;
    }

    public String setId(String id) {
        Id = id;
        return id;
    }

    public String getName() {
        return Name;
    }

    public void setName(String name) {
        Name = name;
    }

    public String getMajor() {
        return Major;
    }

    public void setMajor(String major) {
        Major = major;
    }



    }

以字符串格式创建 JSON 对象:

    protected String ObjInJSON(Student studentC) throws JSONException, UnsupportedEncodingException {
    String ID = studentC.getId();
    String Pin = studentC.getPin();
    String Major = studentC.getMajor();
    String Password = studentC.getPassword();
    String Name = studentC.getName();


    JSONObject json_obj = new JSONObject();

    json_obj.put("id", ID);
    json_obj.put("password", Password);
    json_obj.put("pin", Pin);
    json_obj.put("major", Major);
    json_obj.put("name", Name);

    return json_obj.toString();
}

发送到 PHP 服务器:

   public static String sendToRegistrationPHP(String jarr) throws IOException {
    StringBuffer response = null;
    try {

        String myurl = "10.0.2.2:8070/StudentaccistancePHP/MySqlTEST.php";
        URL url = new URL(myurl);

        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setReadTimeout(10000);
        conn.setConnectTimeout(15000 /* milliseconds */);
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setDoOutput(true);
        conn.setDoInput(true);
        conn.setRequestMethod("POST");
        OutputStream out = new BufferedOutputStream(conn.getOutputStream());
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out, "UTF-8"));
        writer.write(jarr);
        writer.close();
        out.close();

        BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String inputLine;
        response = new StringBuffer();

        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();

        System.out.println("Response in universal: " + response.toString());
    } catch (Exception exception) {
        System.out.println("Exception: " + exception);
    }

    if (response != null) {
        return response.toString();
    }
    else return "Not WORKING  !";
}

PHP 服务器:

<?php


$json = file_get_contents('php://input');                           

$data = json_decode($json, true);
$ID = $data['id'];
$password = $data['password'];
$pin = "323232";
$major = $data['major'];
$name = $data['name']; 


$servername = "localhost";
$username = "root";
$password = "";
$dbname = "studentassictance";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);

// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";

$sql = "INSERT INTO students (id, major, name, password, pin)
VALUES ('$ID', '$major', '$name', '$password', '$pin')";

if ($conn->query($sql) === TRUE) {
   echo "New record created successfully <br>";
 } else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}




 ?>

但是,没有向数据库中插入任何内容。

【问题讨论】:

    标签: php android mysql json


    【解决方案1】:

    首先,您需要检查以 JSON 形式到达 PHP 端的内容。你可以

    var_dump($json,$data);
    

    json_encode() 调用并观察它是一个有效的 JSON 之后。你可以验证它here

    第二,给你看SHOW CREATE TABLE students

    第三,将所有内容重写为 PDO,因为它支持命名参数,理论上如果需要,您以后可以更轻松地迁移到另一个数据库引擎。所以它会是这样的:

    <?php
    
    
    define('DSN','mysql:dbname=test;host=localhost');
    define('DB_USERNAME','testuser');
    define('DB_PASSWORD','testpassword');
    
    $connect = new PDO(DSN, DB_USERNAME, DB_PASSWORD);
    
    $json = file_get_contents('php://input');
    /*$json = '{
        "id": "111",
        "password": "sfsdfsdf",
        "major": "Math",
        "name": "Test User"
    }';*/
    
    $data = json_decode($json, true);
    
    $ID = $data['id'];
    $password = $data['password'];
    $pin = "323232";
    $major = $data['major'];
    $name = $data['name']; 
    
    $sql = "INSERT INTO `students`(`id`,`major`, `name`, `password`, `pin`) VALUES(:id, :major, :name, :password, :pin)";   
    
    $result = $connect->prepare($sql);
    
    //bind parameter(s) to variable(s)
    $result->bindParam( ':id', $ID, PDO::PARAM_INT );
    $result->bindParam( ':major', $major, PDO::PARAM_STR );
    $result->bindParam( ':name', $name, PDO::PARAM_STR );
    $result->bindParam( ':password', $password, PDO::PARAM_STR );
    $result->bindParam( ':pin', $pin, PDO::PARAM_STR );
    
    $status = $result->execute();
    
    if ($status)
    {
        echo "New record created successfully <br>";
    
    } else
    {
        echo "Error: <br>" . 
        var_dump($connect->errorInfo(),$status);
    }
    
    $connect = null;
    

    【讨论】:

    • 虽然晚了很多年,但非常感谢您的贡献。
    猜你喜欢
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多