android与sea服务器通信

今天做了个android与sea服务器相互通信的小项目,发现并不是很困难,只有几行代码就可以实现了。

第一步:

在android主页,一定要在onCreate函数里面的super.onCreate(savedInstanceState);之前加上下面两句

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());

,对应的头文件是  import android.os.StrictMode; (并不用导入什么包的)。

通过下面的按钮来调用与服务器相连并获取数据:

(记得设置权限 <uses-permission android:name="android.permission.INTERNET" /> 并且<uses-sdk android:minSdkVersion="8" />)

button = (Button)findViewById(R.id.button);
button.setOnClickListener(new OnClickListener(){

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String url = "URL(服务器地址)";
String name = "220202051011";
String pwd = "123456";
String flag = xin.save_pw(url, name, pwd);(调用下面的类的函数)
if(!flag.equals("no")){
Toast.makeText(LinkActivity.this, flag, Toast.LENGTH_LONG).show();
}else{
Toast.makeText(LinkActivity.this, flag, Toast.LENGTH_LONG).show();
}
}

});

第二步:

设置数据,并通过ArrayList来传输数据(post方式),

public ArrayList<NameValuePair> init(String Name, String pw) {//这个函数用来初始化数组列表ArrayList
  ArrayList<NameValuePair> name = new ArrayList<NameValuePair>();//定义一个键值对来行的数组容器
  if(Name!=null){
  name.add(new BasicNameValuePair("name", Name));//这里设置php文件接收的Order,例如 $_REQUEST["Order"],根据你的php自己定义的来写
  }
  if(pw!=null){
  name.add(new BasicNameValuePair("pw", pw));//上面我定义了一个mysql命令,这里是数据库名字,两个由参数传入,增加了灵活性
  }

  return name;//返回设置好了容器
}  

public String save_pw(String url,String name, String pw) {
  String k = "no";
  InputStream GetContentFromDb = null;//定义一个保存输入流的变量
  try {
    HttpClient http = new DefaultHttpClient();//开启http服务
    HttpPost post = new HttpPost(url);//传入url,初始化要post数据的url
    post.setEntity(new UrlEncodedFormEntity(init(name, pw)));//这里发送数据,看到init()函数的调用没
    HttpResponse response = http.execute(post);//这里才正真地进行访问,带着上面设置的数据
    HttpEntity responseFromDb = response.getEntity();//接受返回的实体
    GetContentFromDb = responseFromDb.getContent();//接受实体内容,并保存到输入流对象中

    Log.i("aaaaaaa","STATA");
  if(GetContentFromDb!=null){
  try {
    BufferedReader reader = new BufferedReader(new InputStreamReader(GetContentFromDb, "UTF-8"), 8);
    //上面的这句作用是把输入流里面的内容进行编码,第二个最好设置UTF-8,要和你的mysql表的一样,如果用iso-8859-1可能会抛出乱码错误
    StringBuilder info = new StringBuilder();//定义字符容器
    String line = null;//用来保存提取出的每行数据
    while ((line = reader.readLine()) != null) {//保证读到的每行数据不为null
      info.append(line + "\n");//每行相加
    }
    GetContentFromDb.close();//关闭
    result = info.toString();//数据转化
    System.out.println(result);
    } catch (Exception e) {
      Log.i("second exception",e.toString());
    }
    try {
      k = "";

      //把数据php的json数据放回到这里,记住,你php最后输出的一定要是json数据,否则,这里会抛出异常
      JSONArray jArray = new JSONArray(result);
      if (jArray.length() > 0) {//是否有数据
        rowNum = jArray.length();//获取行数,并保存
        // k = rowNum+"";
        for (int i = 0; i < jArray.length(); i++) {
          JSONObject json_data = jArray.getJSONObject(i);//逐行获取接受回来的json数据
          k += json_data.getString("id")+" ";
          k += json_data.getString("username")+" ";
          Log.i("xxxxxxxxxxxx",k);
         }
        }
      } catch (Exception e) {
        Log.i("three exception",e.toString());
      }
      //k = "yes";
      return k;
    }
  } catch (Exception e) {
    Log.i("tag", e.toString());
  }
  return k;
}

第三步:

PHP服务器上的代码:

<?php

$conn=mysql_connect(SAE_MYSQL_HOST_M.‘:‘.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);  //配置数据库
if (!$conn)
{
die("Connect Server Failed:".mysql_error());
}
if(!mysql_select_db(SAE_MYSQL_DB,$conn))
{
die("Select Database Failed:".mysql_error());
}

$Information=$_REQUEST["name"];  //通过$_REQUEST获得
$Information2=$_REQUEST["pw"];

}

//将传入的数据插到数据库中

$sql="insert into wechat(username,password) values (‘$Information‘,‘$Information2‘)";
$flag = mysql_query($sql,$conn);

if($flag){
$sql1 = "select * from wechat;";
$a = array();
$list = mysql_query($sql1,$conn);
while($s = mysql_fetch_assoc($list))
{
$a[] = $s;
}

//返回数组数据给android,返回的数据是JSON格式:[{"":""}]
print(json_encode($a));  
}
mysql_close($conn);
?>

时间: 2024-09-29 08:29:15

android与sea服务器通信的相关文章

客户端(android,ios)与服务器通信

android,ios客户端与服务器通信为了便于理解,直接用PHP作为服务器端语言 其实就是一个 http请求响应的过程序,先从 B/S模式说起浏览器发起http请求,服务器响应请求,并把数据返回给浏览器,经过浏览器的渲染,即为我们所看到的效果 客户端(android,ios)android通过 httpClient或urlconnection等网络请求去实现http请求,(相当于浏览器,发送 url请求),即访问服务器,服务器响应请求,并把结果返回给客户端,经过客户端渲染,即为我们看到的效果.

Android Socket与服务器通信通用Demo

在Android中通过Socket来来连接服务器,是一种比较简单的网络连接方式,虽然现在使用的不多,但某些场合还是很方便的,这里总结一下基本的写法. 客户端: try { Socket socket = new Socket(host, port); socket.setSoTimeout(6 * 1000); PrintWriter printWriter = new PrintWriter( socket.getOutputStream(), true); printWriter.print

Socket 通信原理(Android客户端和服务器以TCP&amp;&amp;UDP方式互通)

ZERO.前言 有关通信原理内容是在网上或百科整理得到,代码部分为本人所写,如果不当,还望指教. 一.Socket通信简介 Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务器端才能向客户端返回数据.而Socket通信则是在双方建立起连接后就可以直接进行数据的传输,在连接时可实现信息的主动推送,而不需要每次由客户端想服务器发送请求. 那么,什么是s

【Android笔记】Android操作HTTP实现与服务器通信

本示例以Servlet为例,演示Android与Servlet的通信. 众所周知,Android与服务器通信通常采用HTTP通信方式和Socket通信方式,而HTTP通信方式又分get和post两种方式.至于Socket通信会在以后的博文中介绍. HTTP协议简介: HTTP (Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种协议. HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响

Android操作HTTP实现与服务器通信

本示例以Servlet为例,演示Android与Servlet的通信. 众所周知,Android与服务器通信通常采用HTTP通信方式和Socket通信方式,而HTTP通信方式又分get和post两种方式.至于Socket通信会在以后的博文中介绍. HTTP协议简介: HTTP (Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种协议. HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响

Android操作HTTP实现和服务器通信

众所周知,Android与服务器通信通常采用HTTP通信方式和Socket通信方式,而HTTP通信方式又分get和post两种方式.至于Socket通信会在以后的博文中介绍. HTTP协议简介: HTTP (Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种协议. HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接.从建立连接到关闭连接的过程称为“一次连

Android与服务器通信的方法之一(json)效率不高安全性不好

http通信,以xml或者json为载体,相互通信数据. Android对于http的网络通信,提供了标准的java接口--httpURLConnection接口,以及apache的接口--httpclient接口.其中我自己用的比较多的而是httpclient这个接口,因为它的功能更为丰富很有效. 同时http通信也分为post方式和get的方式,两个相比较的话,post传送的数据量比较大,安全性也比较高.因此在做数据查询时,我会用get方式:而在做数据添加.修改或删除时,我就用Post方式

android中非阻塞socket通信

1.什么是同步与异步,阻塞与非阻塞 首先我们要明白搞明白:同步就等于阻塞?异步就等于非阻塞?这是不对的,同步不等于阻 塞,而异步也不等于非阻塞. 1)那什么是同步编程? 什么是同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回.根据这个定义,android中绝大多数函数都是同步调用.但是一般而言,我们在谈论同步.异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务.在android中,由于主线程(UI线程的不安全性),我们经常会用到handler的SendMessage

Android客户端与服务器交互方式-小结

最近的Android项目开发过程中一个问题困扰自己很长时间,Android客户端与服务器交互有几种方式,最常见的就是webservices和json.要在Android手机客户端与pc服务器交互,需要满足下面几种条件:跨平台.传输数据格式标准.交互方便. 为了与服务器通讯其实无非就两种协议HTTP和TCP,TCP的学习Socket,HTTP的话熟悉一下HTTP协议和相关Java API.而下面的几种方式就是从这两种协议扩展出来的:webservices soap.SSH的JSON(可参考:该链接