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);
?>

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。