使用HttpURLConnection 与 sae 进行数据交互
2016-03-26 14:37
567 查看
使用android post 数据给服务器有很多种方式,本人第一次使用的是 HttpURLConnection,感兴趣的可以看HttpClient,不过Apache 的 HttpClient 在 安卓 5.0之后已经废弃,当然我们可以通过各种方法继续使用 HttpClient,接下来上代码:
首先是布局,就一个按钮:
接下来是 Activity 类:
客户端的数据 post 给服务器,服务器用什么来接收都是可以的,只要符合规则,即可以成功获取,在做这个测试的时候,我用的是 sae,使用php来接受数据,当然这里的 php 地址也就是上面的 url 啦:
接下来,如果数据传递成功,客户端可以接收来自服务器 的数据:
而想要传递数据给 客户端,php 只需将相应的数据 echo 即可,当然要注意一下json的格式,本次测试使用的是 json,比较麻烦的是需要将一个个输入的数据转换成json格式再传,Android Studio 提供的GsonFormat 可以非常方便地进行 json 与 Java Bean 的转换,同时 谷歌的 OkHttp实现了几乎和java.net.HttpURLConnection一样的API,所以使用 Okhttp 也是非常不错的。
温馨提示:
如果运行遇到 java.net.UnknownHostException: Unable to resolve host ” 这里是你的url地址”: No address associated with hostname ,大部分情况是没有联网,或者url 地 址没有写对。
另外,每次如果你想单独运行 php file 企图得到输出时,获取的数据永远为空,因为数据只有在客户端 post 的时候 通过php传到数据库,php在这里这是中介,如果只是单独运行 php 文件,并没有与客户端有什么联系,得到的结果当然也是空的咯。
首先是布局,就一个按钮:
<Button android:id="@+id/btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="传数据给数据库" />
接下来是 Activity 类:
private final String url = "******"; btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new Thread() { public void run() { try { String s = editText.getText().toString(); JSONObject jsonObject = new JSONObject(); JSONObject jsonObject2 = new JSONObject(); try { jsonObject.put("username", s); jsonObject2.put("person", jsonObject); //Log.v("hlsjfl",jsonObject2.toString()); } catch (JSONException e) { e.printStackTrace(); } String content = String.valueOf(jsonObject2); post(url, content); } catch (Exception e) { e.printStackTrace(); } } }.start(); } }); public static void post(String path2, String content) { try { URL url = new URL(path2); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5000); conn.setDoOutput(true); conn.setRequestMethod("POST"); conn.setRequestProperty("Uer-Agent", "Fiddler"); conn.setRequestProperty("Content-Type", "application/json"); conn.setRequestProperty("Charset", "utf-8"); OutputStream os = conn.getOutputStream(); os.write(content.getBytes()); os.close(); int code = conn.getResponseCode(); if(code == 200) { Log.v("hlkfjlasd","Post成功啦"+code); } } catch (Exception e) { e.printStackTrace(); } } }
客户端的数据 post 给服务器,服务器用什么来接收都是可以的,只要符合规则,即可以成功获取,在做这个测试的时候,我用的是 sae,使用php来接受数据,当然这里的 php 地址也就是上面的 url 啦:
<?php header("Content-type: text/html; charset=utf-8"); // 连主库,这是 sae 要求的 $db = mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS); $post_array = file_get_contents('php://input'); //接收POST数据 if(empty($post_array)) { echo "post过来的数据为空"."<br/>"; } else { echo "post过来的数据不是空的"."<br/>"; $obj=json_decode($post_array,TRUE); $order_id = $obj['person']['username'];//获取用户名 $sql4 = "插入语句"; mysql_query($sql4); }
接下来,如果数据传递成功,客户端可以接收来自服务器 的数据:
InputStream is = conn.getInputStream();//获取输入流 byte [] data = revStream(is);//把输入流转换成字符串组 String json = new String(data);//把字符串组转换成字符串 Log.v("sldkjflkasjf",json);
private static byte[] revStream(InputStream inputStream) throws Exception { ByteArrayOutputStream ba = new ByteArrayOutputStream(); byte[] b = new byte[1024]; int len; while ((len = inputStream.read(b)) != -1) { ba.write(b, 0, len); } ba.close(); inputStream.close(); return ba.toByteArray(); }
而想要传递数据给 客户端,php 只需将相应的数据 echo 即可,当然要注意一下json的格式,本次测试使用的是 json,比较麻烦的是需要将一个个输入的数据转换成json格式再传,Android Studio 提供的GsonFormat 可以非常方便地进行 json 与 Java Bean 的转换,同时 谷歌的 OkHttp实现了几乎和java.net.HttpURLConnection一样的API,所以使用 Okhttp 也是非常不错的。
温馨提示:
如果运行遇到 java.net.UnknownHostException: Unable to resolve host ” 这里是你的url地址”: No address associated with hostname ,大部分情况是没有联网,或者url 地 址没有写对。
另外,每次如果你想单独运行 php file 企图得到输出时,获取的数据永远为空,因为数据只有在客户端 post 的时候 通过php传到数据库,php在这里这是中介,如果只是单独运行 php 文件,并没有与客户端有什么联系,得到的结果当然也是空的咯。
相关文章推荐
- HTTP Servlet 重要的几个方法
- TCP/IP 协议详解
- Kubernetes网络配置方案
- $POST 、$HTTP_RAW_POST_DATA、php://input三者之间的区别
- 最详细的Log4j使用教程-http://www.codeceo.com/article/log4j-usage.html
- Okhttp封装、网络层扩展
- 获取手机网络连接状态
- 【BZOJ3651】网络通信
- 【PA2014】【BZOJ3716】Muzeum
- 如何在你写的应用中跳转到手机系统网络设置页面去,看别人应用代码的时候看到的
- STC89C52单片机串口调试(http://blog.sina.com.cn/s/blog_7cae472801015idp.html)
- Linux网络配置基础篇
- 虚拟机virtualBox 搭建 Keepalived+lvs dr+httpd 负载均衡
- 网络流例题学习
- 深度学习(三十六)二值网络学习笔记-未完待续
- 深度学习(三十五)对抗网络学习笔记-未完待续
- httpclient4.3 工具类
- Node.js之网络小爬虫
- Android中的Http通信(二)
- 【网络文摘】面试感悟:3年工作经验程序员应有的技能