• Android网络客户端编程,HttpGet类和HttpPost类使用详解,连接phpmysql服务器


    无论是使用HttpGet,还是使用HttpPost,都必须通过如下3步来访问HTTP资源。

    1.创建HttpGet或HttpPost对象,将要请求的URL通过构造方法传入HttpGet或HttpPost对象。

    2.使用DefaultHttpClient类的execute方法发送HTTP GET或HTTP POST请求,并返回HttpResponse对象。

    3.通过HttpResponse接口的getEntity方法返回响应信息,并进行相应的处理。

    一、使用HttpPost的方式来提交数据。

    稍微有一点不同的就是需要使用BasicNameValuePair来放一些Post的数据.

    在访问web页面的数据

    {“title”:”未输入”,”id”:1,”value”:”7030ff64701a938becbc5aa67ddb86e8″}

    服务器端php代码login.php(注意编码格式为UTF-8):

    <?php
        header("Content-Type: text/html; charset=UTF-8");
        if(isset($_POST['username']) && isset($_POST['password']))
        {
            $username= $_POST['username'];
            $password= $_POST['password'];
            if($username== "huzhangyou"&& $password== "windows")
            {
                $array= array( 'title'=>urlencode('登陆成功'), 'id'=>1, 'value'=>md5(md5($username. $password)));
                echo urldecode(json_encode($array));
            }
            else
            {
                $array= array( 'title'=>urlencode('登陆失败'), 'id'=>1, 'value'=>md5("错误"));
                echo urldecode(json_encode($array));
            }
            break;
        }
        else
        {
            $array= array( 'title'=>urlencode('未输入'), 'id'=>1, 'value'=>md5("错误"));
            echo urldecode(json_encode($array));
        }
    ?>


    Java核心代码:

                        HttpPost httpPost = new HttpPost("http://10.0.2.2/login.php");
                        HttpClient client = new DefaultHttpClient();
                        StringBuilder str = new StringBuilder();
                        ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
                        params.add(new BasicNameValuePair("username","huzhangyou"));
                        params.add(new BasicNameValuePair("password","windows"));   
                        BufferedReader buffer = null;
                        try
                        {
                            httpPost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
                            HttpResponse httpRes = client.execute(httpPost);
                            if(httpRes.getStatusLine().getStatusCode() == 200)
                            {
                                buffer = new BufferedReader(new InputStreamReader(httpRes.getEntity().getContent()));
                                for(String s = buffer.readLine(); s != null; s = buffer.readLine())
                                {
                                    str.append(s);
                                }    
                                JSONObject json = new JSONObject(str.toString());              
                                String title = json.getString("title");    
                                Log.i("tag",title);
                                int id = json.getInt("id");             
                                String value = json.getString("value");        
                                EditText editText = (EditText)findViewById(R.id.editText1);
                                Log.i("tag",value);
                                editText .setText("Title:"+ title + " ID:"+ id + " Value:"+ value);     
                                }
                            }   
                        catch(Exception e)      
                        {
                            if(buffer != null)
                            {
                                try
                                {
                                    buffer.close();
                                } catch(IOException e1) 
                                {  
                                    // TODO Auto-generated catch block
                                    e1.printStackTrace();
                                }
                            }
                        }

     二、使用HttpGet的方式来获取数据。

    使用PHP作为中间介来实现android链接远程数据库。

    服务器端phph代码:

    <?php
     
    $link=mysql_connect("127.0.0.1","数据库用户名","数据库密码");
     
    mysql_query("SET NAMES utf8");
     
    mysql_select_db("phpmps",$link);
     
    $sql=mysql_query("select * from phpmps_category",$link);
     
    while($row=mysql_fetch_assoc($sql))
     
    $output[]=$row;
     
    print(json_encode($output));
     
    mysql_close();
     
    ?>

    Java核心代码:

    //http get(获取数据库包)
            try{
                 HttpClient httpclient = new DefaultHttpClient();
                 String ip = ct_Server_IP + "android/phpmps_category.php";
                 HttpGet httpget = new HttpGet(ip);
                 HttpResponse response = httpclient.execute(httpget);
                 HttpEntity entity = response.getEntity();
                 is = entity.getContent();
            }catch(Exception e){
                 Log.e("tag_http", "Error in http connection"+e.toString());
                 return MYDIALOG_HTTPGET_ERROR;
            }
            
            //convert response to string(转换响应字符串)
            try{
                 BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                 sb = new StringBuilder();
                 sb.append(reader.readLine() + "\n");
        
                 String line="0";
                 while ((line = reader.readLine()) != null) {
                      sb.append(line + "\n");
                 }
                 is.close();
                 result=sb.toString();
            }catch(Exception e){
                 Log.e("tag_convert", "Error converting result "+e.toString());
                 return MYDIALOG_CONVET_ERROR;
            }
    
            //创建或者打开数据库phpmps
            DatabaseHelper dbHelper = new DatabaseHelper (context, "phpmps");
            SQLiteDatabase phpmps = dbHelper.getWritableDatabase();
            
            //paring data(缩减数据),并将数据写入数据库
            int ct_catid;
            String ct_catname;
            String ct_keywords;
            String ct_description;
            int ct_parentid;
            int ct_catorder;
            String ct_cattplname;
            String ct_viewtplname;
            try{
                 jArray = new JSONArray(result);
                 JSONObject json_data=null;
                 for(int i=0;i<jArray.length();i++){
                      json_data = jArray.getJSONObject(i);
                      
                      ct_catid = json_data.getInt("catid");
                      ct_catname = json_data.getString("catname");
                      ct_keywords = json_data.getString("keywords");
                      ct_description = json_data.getString("description");
                      ct_parentid = json_data.getInt("parentid");
                      ct_catorder = json_data.getInt("catorder");
                      ct_cattplname = json_data.getString("cattplname");
                      ct_viewtplname = json_data.getString("viewtplname");
                      
                      //生成ContentValue对象
                      ContentValues values = new ContentValues ();
                      //向该对象当中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须与数据库类型匹配
                      values.put("catid", ct_catid);
                      values.put("catname", ct_catname);
                      values.put("keywords", ct_keywords);
                      values.put("description", ct_description);
                      values.put("parentid", ct_parentid);
                      values.put("catorder", ct_catorder);
                      values.put("cattplname", ct_cattplname);
                      values.put("viewtplname", ct_viewtplname);
                      
                      phpmps.insert("phpmps_category", null, values);
                 }
            }catch(JSONException e1){
            } catch (ParseException e1) {
                 e1.printStackTrace();
                 return MYDIALOG_PARING_ERROR;
            }
            finally {
            dbHelper.close();
            }

     当然了如果时间很多的话还可以自己尝试直接使用Socket建立连接来写,不过这样需要与服务器一直保持连接对服务器资源消耗比较多,想研究的可以参考:http://wenku.baidu.com/view/674f120ff78a6529647d53bd.html

  • 相关阅读:
    k-近邻算法
    配置nginx 高并发 php
    ubuntu上安装mysql 编译安装
    Webpack探索【1】--- 基础知识
    【JavaScript专题】--- 立即执行函数表达式
    Eslint使用指南
    Maven学习笔记【2】 -- 安装和配置
    Maven学习笔记【1】 -- Maven简介
    Git中如何将代码恢复到之前某个节点
    密码硬编码(Password Management: Hardcoded Password)
  • 原文地址:https://www.cnblogs.com/libao/p/2771000.html
Copyright © 2020-2023  润新知