如何从PHP返回JSON对象以从Android应用程序读取

如何从PHP返回JSON对象以从Android应用程序读取,php,android,mysql,json,Php,Android,Mysql,Json,我有下面的MySQL表 我需要从android应用程序发送经销商名称,并将所有匹配行发送到该应用程序。我不知道如何设置php输出。我知道我应该使用json_encode(数组('stuff'))进行编码 但是我不知道如何格式化数据。我一直在检查它显示了一个例子 {"employees":[ {"firstName":"John", "lastName":"Doe"}, {"firstName":"Anna", "lastName":"Smith"}, {"firstN

我有下面的
MySQL

我需要从
android
应用程序发送经销商名称,并将所有匹配行发送到该应用程序。我不知道如何设置
php
输出。我知道我应该使用
json_encode(数组('stuff'))进行编码

但是我不知道如何格式化数据。我一直在检查它显示了一个例子

{"employees":[
    {"firstName":"John", "lastName":"Doe"}, 
    {"firstName":"Anna", "lastName":"Smith"},
    {"firstName":"Peter", "lastName":"Jones"}
]}
我应该使用相同的格式吗?如何从android中读取此内容?我指的是

编辑:

清单


您必须使用JSONParser类。它将有助于从webBrowser获取json值。在此之后,您可以这样使用:

JSONObjcet object=getJSONObject("result");
JSONArray arr=object.getJSONArray("employees");
for(int i=0;i<arr.length;i++){
JSONObject obj1=arr.getJSONObject(i);
String firstName=obj1.getString("firstName");
String lastName=obj1.getString("lastName");
}
jsonobject=getJSONObject(“结果”);
JSONArray arr=object.getJSONArray(“员工”);

对于(inti=0;i这是一个如何使用Volley.jar(lib)解析JSON的示例

private void makeJsonArrayRequest() {

showpDialog();

JsonArrayRequest req = new JsonArrayRequest(urlJsonArry,
        new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {
                Log.d(TAG, response.toString());

                try {
                    // Parsing json array response
                    // loop through each json object
                    jsonResponse = "";
                    for (int i = 0; i < response.length(); i++) {

                        JSONObject person = (JSONObject) response
                                .get(i);

                        String name = person.getString("name");
                        String email = person.getString("email");
                        JSONObject phone = person
                                .getJSONObject("phone");
                        String home = phone.getString("home");
                        String mobile = phone.getString("mobile");

                        jsonResponse += "Name: " + name + "\n\n";
                        jsonResponse += "Email: " + email + "\n\n";
                        jsonResponse += "Home: " + home + "\n\n";
                        jsonResponse += "Mobile: " + mobile + "\n\n\n";

                    }

                    txtResponse.setText(jsonResponse);

                } catch (JSONException e) {
                    e.printStackTrace();
                    Toast.makeText(getApplicationContext(),
                            "Error: " + e.getMessage(),
                            Toast.LENGTH_LONG).show();
                }

                hidepDialog();
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d(TAG, "Error: " + error.getMessage());
                Toast.makeText(getApplicationContext(),
                        error.getMessage(), Toast.LENGTH_SHORT).show();
                hidepDialog();
            }
        });

// Adding request to request queue
AppController.getInstance().addToRequestQueue(req);
private void makeJsonArrayRequest(){
showpDialog();
JsonArrayRequest req=新的JsonArrayRequest(urlJsonArry,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONArray响应){
Log.d(TAG,response.toString());
试一试{
//解析json数组响应
//循环遍历每个json对象
jsonResponse=“”;
对于(int i=0;i
}


发件人:

由于您的帖子没有提到一个可用的PHP文件,为了完整起见,我将包含它。这可能是一篇很长的帖子

因此,首先,这是一个PHP文件的示例,该文件名为my_test.PHP,存储在以下位置:
c:\wamp\www\some_folder\u name\my_test.PHP
(请查看代码的编辑历史记录)

现在,让我解释一下PHP的重要部分。这些参数应该配置为使用您的设置:

$DB_HOST = 'YOUR_IP_ADDRESS';
$DB_UNAME = 'MYSQL_USERNAME';
$DB_PWD = 'MYSQL_USER'S_PASSWORD';
$DB_DATABASE = 'DATABASE_NAME';
IP地址应该是本地主机或承载MySQL数据库的计算机的IP地址。最好是IP地址,以便您可以在物理设备上进行测试。使用localhost只能在虚拟设备上工作

下一步是将列添加到数组中,该数组将在JSON响应中构造单个记录(行)

$stuff["id"] = $row['id'];
$stuff[“id”]
基本上将成为生成的JSON对象中的标记,而
$row['id']
则表示数据库表中的列名。因此
$row[“…”]
必须与数据库表中的列名相同。而
$stuff[…”]
可以是任何东西。只要对您有意义

这一行
echo(json_encode($response));
将响应转换为json格式

现在让我们看一下Java代码。首先是一个类,它将帮助您解析结果。它是从一个网站的教程中摘取的(我不记得是哪个)。只需在Java类中复制粘贴以下代码。无需更改此文件中的任何内容。请仔细阅读以了解其工作原理。我将其命名为JSONParser(请参阅代码的编辑历史记录):

最后,如何实际获取生成的JSON并在
活动中解析它
/
片段

我解析
异步任务
中的数据,考虑到您将执行网络操作,这是必需的。(请参阅代码的编辑历史记录)

此Java中需要注意的要点:

  • 这个
    字符串URL\u TO\u PHP=”http://IP_ADDRESS/some_folder_name/my_test.php“;
    需要一个IP地址,如192.168.0.x,或者如果您在虚拟设备上测试,它应该是10.0.2.2。较早的(192…)在模拟器上不起作用,较晚的(10.0…)在物理设备上不起作用
  • 在这个:
    String TAG_STUFF=“STUFF”
    中,
    “STUFF”
    与PHP文件中的以下内容相对应:
    $response[“STUFF”]=array();
    TAG_STUFF
    基本上应该使用
    $response[“STUFF”]
    中的内容
  • 希望以上所有内容都有意义。如果需要帮助,请发表评论。;-)

    使用工作解决方案更新:

    这确实很奇怪。但是,我有一个有效的解决方案。当使用OP的代码时,应用程序确实崩溃了。对于
    {"stuff":[{"pname":"Advocates"},{"pname":"Notaries"},{"pname":"Agriculture \/ Fertilizer"},{"pname":"Airconditioners"},{"pname":"Animation"},{"pname":"Airline Companies"},{"pname":"Aluminium Fabricators"},{"pname":"Amusement Parks"},{"pname":"Pets shop"},{"pname":"Association \/ Societies"},{"pname":"Astrology"},{"pname":"Attestation Service"},{"pname":"Auditorium"},{"pname":"Automobiles Accessories"},{"pname":"Automobile Dealers"},{"pname":"Ayurveda"},{"pname":"Gifts Articles"},{"pname":"Bags"},{"pname":"Batteries"},{"pname":"Bearings"},{"pname":"Beauty Parlours \/ Spa"},{"pname":"Magazine Dealers"},{"pname":"Building Contractors"},{"pname":"Building Materials"},{"pname":"Cameras"},{"pname":"Cast Iron Products"},{"pname":"Home Delivery"},{"pname":"Cements Wholesale \/ Retail"},{"pname":"Chemicals"},{"pname":"Contractors"},{"pname":"Consultants"},{"pname":"Parcel Services"},{"pname":"Crockery"},{"pname":"Dental Clinics"},{"pname":"Cyber Parks"},{"pname":"Dance School\/Costumes"},{"pname":"Diagnostics Labs& X-Rays"},{"pname":"Distance Education"},{"pname":"Driving Schools"},{"pname":"Dry Cleaners"},{"pname":"DTH Services"},{"pname":"DTP Centers"},{"pname":"Electrical Contractors \/ Services"},{"pname":"Electronics Equipment \/ Servicing"},{"pname":"Coaching Centre"},{"pname":"Event Management"},{"pname":"Fancy \/ Stationery"},{"pname":"Pooja stores"},{"pname":"Food Products"},{"pname":"Foot Wear"},{"pname":"Foreign Exchange"},{"pname":"Furniture shop"},{"pname":"Granites \/ Marbles"},{"pname":"Hospitals \/ Clinics"},{"pname":"Computer Accessories"},{"pname":"Kitchen Cabinets"},{"pname":"Library"},{"pname":"Lights \/ Fittings"},{"pname":"Mobile Phone Accesseries"},{"pname":"Machinery \/ Tools"},{"pname":"Timber Manufacturer"},{"pname":"Real Estate Agents"},{"pname":"Security Services"},{"pname":"Solar Products"},{"pname":"Health & Fitness"},{"pname":"Travel Agencies"},{"pname":"Used Car \/ Bikes"},{"pname":"Waste Management"},{"pname":"Watches & Clocks"},{"pname":"Handicrafts"},{"pname":"Doors & Windows"}],"success":1}
    
    JSONObjcet object=getJSONObject("result");
    JSONArray arr=object.getJSONArray("employees");
    for(int i=0;i<arr.length;i++){
    JSONObject obj1=arr.getJSONObject(i);
    String firstName=obj1.getString("firstName");
    String lastName=obj1.getString("lastName");
    }
    
    private void makeJsonArrayRequest() {
    
    showpDialog();
    
    JsonArrayRequest req = new JsonArrayRequest(urlJsonArry,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    Log.d(TAG, response.toString());
    
                    try {
                        // Parsing json array response
                        // loop through each json object
                        jsonResponse = "";
                        for (int i = 0; i < response.length(); i++) {
    
                            JSONObject person = (JSONObject) response
                                    .get(i);
    
                            String name = person.getString("name");
                            String email = person.getString("email");
                            JSONObject phone = person
                                    .getJSONObject("phone");
                            String home = phone.getString("home");
                            String mobile = phone.getString("mobile");
    
                            jsonResponse += "Name: " + name + "\n\n";
                            jsonResponse += "Email: " + email + "\n\n";
                            jsonResponse += "Home: " + home + "\n\n";
                            jsonResponse += "Mobile: " + mobile + "\n\n\n";
    
                        }
    
                        txtResponse.setText(jsonResponse);
    
                    } catch (JSONException e) {
                        e.printStackTrace();
                        Toast.makeText(getApplicationContext(),
                                "Error: " + e.getMessage(),
                                Toast.LENGTH_LONG).show();
                    }
    
                    hidepDialog();
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    VolleyLog.d(TAG, "Error: " + error.getMessage());
                    Toast.makeText(getApplicationContext(),
                            error.getMessage(), Toast.LENGTH_SHORT).show();
                    hidepDialog();
                }
            });
    
    // Adding request to request queue
    AppController.getInstance().addToRequestQueue(req);
    
    $DB_HOST = 'YOUR_IP_ADDRESS';
    $DB_UNAME = 'MYSQL_USERNAME';
    $DB_PWD = 'MYSQL_USER'S_PASSWORD';
    $DB_DATABASE = 'DATABASE_NAME';
    
    $stuff["id"] = $row['id'];
    
    class testing extends AsyncTask<Void, Void, Void>   {
    ....
    }
    
    public class MainActivity extends Activity {
    
        JSONParser jParser;
        String URL_TO_PHP = "http://testbox.site50.net/test.php";
        String TAG_SUCCESS = "success";
        String TAG_STUFF = "stuff";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        ....
    
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.button1:
                    new testing().execute();
                    break;
                default:
                    break;
            }
    
        }
    
        private class testing extends AsyncTask<Void, Void, Void> {
    
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
            }
    
            @Override
            protected Void doInBackground(Void... args) {
    
                /* Building Parameters */
                List<NameValuePair> params = new ArrayList<>();
    
                /* getting JSON string from URL */
                JSONObject json = jParser.makeHttpRequest(URL_TO_PHP, "GET", params);
    
                try {
                    /* Checking for SUCCESS TAG */
                    int success = json.getInt(TAG_SUCCESS);
                    if (success == 1) {
                        JSONArray JAStuff = json.getJSONArray(TAG_STUFF);
    
                        /** CHECK THE NUMBER OF RECORDS **/
                        int intStuff = JAStuff.length();
    
                        if (intStuff != 0) {
    
                            for (int i = 0; i < JAStuff.length(); i++) {
                                JSONObject JOStuff = JAStuff.getJSONObject(i);
                                Log.e("ALL THE STUFF", JOStuff.toString());
                            }
                        }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return null;
            }
    
            @Override
            protected void onPostExecute(Void aVoid) {
                super.onPostExecute(aVoid);
            }
        }
    }