• Android PHP 通过JSON进行数据交互


    一、首先是Android客户端解析PHP返回的JSON数据

    1、PHP代码(这里用到了数据库,如果没有准备数据库的话,可以自定义字符串)

    <?php
    	$link=mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
    	mysql_query("SET NAMES utf8");
    	mysql_select_db(SAE_MYSQL_DB,$link);
    	$sql=mysql_query("select * from users ",$link);
    	while($row=mysql_fetch_assoc($sql))
    		$output[]=$row;
    	echo json_encode($output);
    	mysql_close();
    ?>
    

    2、Android端代码(部分代码)

    private Boolean checkuser(String url, String username, String password) {
    		int res = 0;
    		HttpClient client = new DefaultHttpClient();
    		StringBuilder str =new StringBuilder();
    		HttpGet httpget = new HttpGet(url);
    		BufferedReader buffer = null;
    		try
    		{
    			HttpResponse httpRes = client.execute(httpget);
    			res = httpRes.getStatusLine().getStatusCode();
    			if(res == 200)
    			{
    				buffer = new BufferedReader(new InputStreamReader(httpRes.getEntity().getContent()));
    				for(String s = buffer.readLine();s != null;s = buffer.readLine())
    				{
    					str.append(s);
    				}				
    				buffer.close();
    				JSONArray json = new JSONArray(str.toString());				
    				String struser = "";
    				String strpass = "";
    				for(int i = 0;i < json.length();i++)
    				{
    					JSONObject jsonObject = (JSONObject)json.opt(i);
    					struser = jsonObject.getString("username");
    					strpass = jsonObject.getString("password");
    					if(struser.equals(username)&&strpass.equals(password))
    					{
    						return true;
    					}				
    				}
    				return false;				
    			}
    			else
    			{
    				Log.v(null, "httperror");
    				return false;
    			}
    		}catch(Exception e)
    		{
    			e.printStackTrace();
    			return false;
    		}		
    	}
    

    这不是重点,重点在下面PHP解析Android发送的JSON数据  

    二、PHP解析Android发送的JSON数据

    1、Android端代码(部分)

    Boolean RegUser(String url,String regname, String regpass) {		
    		ArrayList<NameValuePair> arrayList = new ArrayList<NameValuePair>();
    		arrayList.add(new BasicNameValuePair("username", regname));
    		arrayList.add(new BasicNameValuePair("password",regpass));
    		try{
    			HttpClient httpclient = new DefaultHttpClient();
    			HttpPost httppost = new HttpPost(url);
    			httppost.setEntity(new UrlEncodedFormEntity(arrayList));
    			HttpResponse httpres = httpclient.execute(httppost);			
    			return true;
    		}catch(Exception e)
    		{
    			e.printStackTrace();
    			return false;
    		}
    				
    	}  

    整个发送过程尤其重要!!!!!并且容易出错。

    2、PHP端代码

    <?php    
        $name = $_REQUEST['username'];
        $pass = $_REQUEST['password'];
        $link=mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
     	mysql_query("SET NAMES utf8");
    	mysql_select_db(SAE_MYSQL_DB,$link);
        $sql = "insert into users (username,password) values ('$name','$pass')";
        mysql_query($sql,$link);
        mysql_close($link);
    ?>
    

    这里接收客户端JSON数据用的是REQUEST,和POST的区别不是很清楚。

    总结:

    1、找了一下午,最后发现问题应该是客户端发送数据不成功。

    2、也有可能是我之前用的是POST接收。

    3、代码出问题还是不要找我,虽然是我写的,但是它自己长歪了。

    4、如果转载,请注明出处(by 不剃头的一休哥)。  

  • 相关阅读:
    去中心化存储的QoS是什么?
    谈如何真正地做好去中心存储?
    Kowala协议:一组分布式,自我调节,资产跟踪特性的加密货币(二)
    MySQL主从备份
    Java面试总结-基础篇2
    Java面试总结-基础篇1
    锁定网络问题的方法
    我是如何在实际项目中解决MySQL性能问题
    serialVersionUID的作用
    Windows和Linux下如何自动备份MySQL
  • 原文地址:https://www.cnblogs.com/hearzeus/p/4102647.html
Copyright © 2020-2023  润新知