2025-04-23

 

這一章,我們重點來介紹服務器Mysql數據庫通過PHP將Json數據交給Android來處理,同學們初看一定覺得好多專業術語哦,呵呵,其實,等我講完,大傢應該都能理解,好瞭,首先我們來看數據庫,Mysql數據庫,做過網站的同學應該對Mysql數據庫不陌生,我們先在Mysql數據庫中創建庫表跟數據

接下來就要將Mysql的數據暴露給Android瞭,這裡我用瞭ThinkPHP模板

這裡就不講ThinkPHP的數據庫連接之類的瞭,通過ThinkPHP將數據返回成Json數據

這裡先上圖吧

好,接下來就是如何將網絡Json數據轉入Android中瞭

 

 

import java.util.ArrayList; 

import java.util.HashMap; 

import java.util.List; 

import java.util.Map; 

 

import org.json.JSONArray; 

import org.json.JSONObject; 

 

import android.app.Activity; 

import android.os.Bundle; 

import android.widget.ListView; 

import android.widget.SimpleAdapter; 

 

import com.kang.http.HttpConnectionUtil; 

import com.kang.http.HttpConnectionUtil.HttpConnectionCallback; 

import com.kang.http.HttpConnectionUtil.HttpMethod; 

 

public class JsonFromPHPDemo extends Activity 

    private ListView listView; 

    private SimpleAdapter adapter; 

    protected List<Person> persons; 

    private Person person; 

 

    @Override 

    protected void onCreate(Bundle savedInstanceState) 

    { 

        // TODO Auto-generated method stub 

        super.onCreate(savedInstanceState); 

        setContentView(R.layout.xml_handler); 

 

        listView = (ListView) findViewById(R.id.xml_list); 

        try 

        { 

            // 自完義適配方法 

            getAdapter(); 

 

        } catch (Exception e) 

        { 

            e.printStackTrace(); 

        } 

 

    } 

     

    /**

     * 自定義方法,從網絡取得數據,並將數據放入ListView中

     */ 

    private void getAdapter() 

    { 

        //網址 

        String url = "http://192.168.1.105/PHPDemo/index.php/Index/show"; 

        //上節課講的網絡連接方法 

        HttpConnectionUtil connUtil = new HttpConnectionUtil(); 

        connUtil.asyncConnect(url, HttpMethod.POST, 

                new HttpConnectionCallback() 

                { 

 

                    @Override 

                    public void execute(String response) 

                    { 

 

                        persons = JsonToList(response); 

                        setInAdapter(); 

                        listView.setAdapter(adapter); 

                    } 

                }); 

 

    } 

     

    /**

     * 將數據配入ListView中

     */ 

    protected void setInAdapter() 

    { 

        List<Map<String, String>> lists = new ArrayList<Map<String, String>>(); 

        // 將persons中的數據轉換到ArrayList<Map<String,String>>中 

        // String>>中,因為SimpleAdapter要用這個類型的數據進行適配 

        Map<String, String> map; 

        for (Person p : persons) 

        { 

            map = new HashMap<String, String>(); 

 

            map.put("id", p.getId()); 

            map.put("status", p.getStatus()); 

            map.put("name", p.getName()); 

            map.put("tool", p.getTool()); 

            map.put("number", p.getNumber()); 

 

            lists.add(map); 

        } 

 

        // HashMap<String, String>中的key 

        String[] from = { "id", "status", "name", "tool", "number" }; 

        // list_item.xml中對應的控件ID 

        int[] to = { R.id.item_id, R.id.item_status, R.id.item_name, 

                R.id.item_tool, R.id.item_number }; 

 

        adapter = new SimpleAdapter(this, lists, R.layout.handler_list_item, 

                from, to); 

 

    } 

 

    /**

     * 將Json字符串轉換成List<Person>數據

     * 

     * @param response

     *            輸入的Json字符串

     * @return

     */ 

    protected List<Person> JsonToList(String response) 

    { 

        List<Person> list = new ArrayList<Person>(); 

 

        try 

        { 

            // 將字符串轉換為Json數組 

            JSONArray array = new JSONArray(response); 

            // 數組長度 

            int length = array.length(); 

            for (int i = 0; i < length; i++) 

            { 

                // 將每一個數組再轉換成Json對象 

                JSONObject obj = array.getJSONObject(i); 

 

                person = new Person(); 

                person.setId(obj.getString("id")); 

                person.setStatus(obj.getString("status")); 

                person.setName(obj.getString("name")); 

                person.setTool(obj.getString("tool")); 

                person.setNumber(obj.getString("number")); 

 

                list.add(person); 

 

            }  www.aiwalls.com

 

            return list; 

        } catch (Exception e) 

        { 

            e.printStackTrace(); 

        } 

        return null; 

    } 

 

}   

 

這裡綜合瞭前面幾章的內容,有網絡傳輸數據,有Json處理等,希望同學們認真學習,謝謝。

這裡要特別提醒的是因為服務器是架在自己電腦裡的,這裡的網址是http://192.168.1.105/PHPDemo/index.php/Index/show,千萬不能寫成localhost,需要寫具體的IP地址

源碼下載:Mysql+Json+Android

 

摘自 kangkangz4的專欄

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *