【问题标题】:using JSON with variable in PHP在 PHP 中使用带有变量的 JSON
【发布时间】:2013-11-30 12:10:46
【问题描述】:

我一直在寻找一种方法来从数据库中获取“值”并将它们插入 JSON 响应到从 PHP 文件接收 ID、名称和电子邮件的 android 应用程序 ID、名称、电子邮件需要从数据库中获取,然后作为 JSON 响应发送到 Android 应用程序这里是我的代码和 PHP 文件,如果你告诉我如何编辑 PHP 文件,以便它发送带有从数据库中获取的变量的 JSON

主活动

package learn2crack.asynctask;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import learn2crack.asynctask.library.JSONParser;

public class MainActivity extends Activity {
    TextView uid;
    TextView name1;
    TextView email1;
    Button Btngetdata;

    //URL to get JSON Array
    private static String url = "http://10.0.2.2/JSON/";

    //JSON Node Names 
    private static final String TAG_USER = "user";
    private static final String TAG_ID = "id";
    private static final String TAG_NAME = "name";
    private static final String TAG_EMAIL = "email";

    JSONArray user = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);
        Btngetdata = (Button)findViewById(R.id.getdata);
        Btngetdata.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                 new JSONParse().execute();

            }
        });

    }

    private class JSONParse extends AsyncTask<String, String, JSONObject> {
         private ProgressDialog pDialog;
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
             uid = (TextView)findViewById(R.id.uid);
             name1 = (TextView)findViewById(R.id.name);
             email1 = (TextView)findViewById(R.id.email);
            pDialog = new ProgressDialog(MainActivity.this);
            pDialog.setMessage("Getting Data ...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(true);
            pDialog.show();

        }

        @Override
        protected JSONObject doInBackground(String... args) {
            JSONParser jParser = new JSONParser();

            // Getting JSON from URL
            JSONObject json = jParser.getJSONFromUrl(url);
            return json;
        }
         @Override
         protected void onPostExecute(JSONObject json) {
             pDialog.dismiss();
             try {
                    // Getting JSON Array
                    user = json.getJSONArray(TAG_USER);
                    JSONObject c = user.getJSONObject(0);

                    // Storing  JSON item in a Variable
                    String id = c.getString(TAG_ID);
                    String name = c.getString(TAG_NAME);
                    String email = c.getString(TAG_EMAIL);

                    //Set JSON Data in TextView
                    uid.setText(id);
                    name1.setText(name);
                    email1.setText(email);

            } catch (JSONException e) {
                e.printStackTrace();
            }

         }
    }

}

和 PHP 文件

{
"user": [
{
"id": "001",
"name": "Raj Amal",
"email": "raj.amalw@gmail.com"
}
]
}

我希望它像这样获取所有内容并将它们分配给我稍后将在 android 应用程序中调用它们的变量

 <?php

    $con=mysqli_connect("localhost","root","123","pet_home");
    if (mysqli_connect_errno())
      {
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
      }

   $result = mysqli_query($con,"SELECT * FROM users WHERE username='test' AND password='123'");
    $row_cnt = mysqli_num_rows($result);

     if($row_cnt>0){     
         $row = mysqli_fetch_array($result); 
         $data = array('success'=>true, 'user'=>array("TAG_ID" => $row['id'], "TAG_NAME"=> $row['name'], "TAG_EMAIL" =>$row['email'])); 
     }else{
         $data = array('success'=>false);
     }

header('Content-Type: application/json');
   echo json_encode($data);



    mysqli_close($con);


    ?>

执行此操作后,Android 应用程序没有响应 这里是stacktrace 好像有异常

11-30 13:02:20.066: W/System.err(2854): org.json.JSONException: Value {"id":"OFF","TAG_EMAIL":"OFF","name":"OFF"} at user of type org.json.JSONObject cannot be converted to JSONArray
11-30 13:02:20.066: W/System.err(2854):     at org.json.JSON.typeMismatch(JSON.java:100)

【问题讨论】:

  • 您可能需要在 php 输出之前将内容类型标头设置为 'application/json',例如 header(....),您可以使用 echo json_encode($user)

标签: javascript php android json encode


【解决方案1】:

你能试试这个吗,根据success真或假你检查用户是否存在

    $result = mysqli_query($con,"SELECT * FROM users WHERE username='test' AND password='123'");
    $row_cnt = mysqli_num_rows($result);

     if($row_cnt>0){     
         $row = mysqli_fetch_array($result); 
         $data = array('success'=>true, 'user'=>array("TAG_ID" => $row['id'], "TAG_NAME"=> $row['name'], "TAG_EMAIL" =>$row['email'])); 
     }else{
         $data = array('success'=>false);
     }
   echo json_encode($data);

【讨论】:

  • 并设置HTTP头
  • 提前谢谢我试过了,但没有回复,请 hRoved 告诉你设置 HTTP 标头是什么意思?
  • 你能在浏览器中运行这个 PHP 文件并检查你从浏览器得到的响应是什么
  • users表中没有数据,你的表中可以吗
  • 刚刚检查用户名存在且密码匹配
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-14
  • 2020-04-01
  • 2016-04-19
  • 1970-01-01
  • 2014-07-13
相关资源
最近更新 更多