在使用Volley进行获取数据时,需要事先准备环境:在libs里面导入一个Volley.jar包,在网上都有,可以下载下来导入,或者自己电脑上有DT的,自己合成一个包也行。

WebActivity.java

  1. package com.hanqi.test5;
  2.  
  3. import android.app.ProgressDialog;
  4. import android.os.Bundle;
  5. import android.support.v7.app.AppCompatActivity;
  6. import android.view.View;
  7. import android.widget.EditText;
  8. import android.widget.Toast;
  9.  
  10. import com.android.volley.AuthFailureError;
  11. import com.android.volley.Request;
  12. import com.android.volley.RequestQueue;
  13. import com.android.volley.Response;
  14. import com.android.volley.VolleyError;
  15. import com.android.volley.toolbox.StringRequest;
  16. import com.android.volley.toolbox.Volley;
  17.  
  18. import java.io.InputStream;
  19. import java.io.OutputStream;
  20. import java.net.HttpURLConnection;
  21. import java.net.URL;
  22. import java.util.HashMap;
  23. import java.util.Map;
  24.  
  25. public class WebActivity extends AppCompatActivity {
  26.  
  27. EditText et_w5;
  28. EditText et_w6;
  29.  
  30. RequestQueue requestQueue;
  31. @Override
  32. protected void onCreate(Bundle savedInstanceState) {
  33. super.onCreate(savedInstanceState);
  34. setContentView(R.layout.activity_web);
  35.  
  36. et_w5 = (EditText)findViewById(R.id.et_w5);
  37. et_w5.setText("http://192.168.0.122:8080/TestWeb/index.jsp");
  38.  
  39. et_w6 = (EditText)findViewById(R.id.et_w6);
  40.  
  41. //获取Volley的请求队列
  42. requestQueue = Volley.newRequestQueue(this);
  43. }
  44. public void getonclick(View view)
  45. {
  46. //1.
  47. /*
  48. * 使用httpUrlConnection提交get请求
  49. */
  50. /*
  51. 1. 显示ProgressDialog
  52. 2. 启动分线程
  53. 3. 在分线程, 发送请求, 得到响应数据
  54. 1). 得到path, 并带上参数name=Tom1&age=11
  55. 2). 创建URL对象
  56. 3). 打开连接, 得到HttpURLConnection对象
  57. 4). 设置请求方式,连接超时, 读取数据超时
  58. 5). 连接服务器
  59. 6). 发请求, 得到响应数据
  60. 得到响应码, 必须是200才读取
  61. 得到InputStream, 并读取成String
  62. 7). 断开连接
  63. 4. 在主线程, 显示得到的结果, 移除dialog
  64. */
  65. //1. 显示ProgressDialog
  66. final ProgressDialog progressDialog = ProgressDialog.show(this,null,"正在请求中...");
  67.  
  68. //2. 访问网络 开启子线程
  69.  
  70. new Thread()
  71. {
  72. @Override
  73. public void run() {
  74.  
  75. try {
  76.  
  77. //1.URl
  78. URL url = new URL(et_w5.getText().toString()+"?name=tom");
  79.  
  80. //2.获取连接
  81. HttpURLConnection huc = (HttpURLConnection)url.openConnection();
  82.  
  83. //3.请求方式
  84. huc.setRequestMethod("GET");
  85. //设置超时
  86. huc.setConnectTimeout(3000);
  87. huc.setReadTimeout(3000);
  88.  
  89. //连接并发送请求
  90. huc.connect();
  91.  
  92. //接收
  93. //判断返回状态 200
  94. int code = huc.getResponseCode();
  95.  
  96. if (code == 200)
  97. {
  98. //接收数据
  99.  
  100. //输入流
  101. InputStream is = huc.getInputStream();
  102. //读取流
  103. //1- byte数组
  104. byte[] b = new byte[1024];
  105. //2- 读到数组的长度
  106. int i=0;
  107. //3.接收到的数据
  108. final StringBuilder sbl = new StringBuilder();
  109.  
  110. //边读边写
  111. while((i=is.read(b))>0)
  112. {
  113. sbl.append(new String(b,0,i));
  114. }
  115. //释放资源
  116. is.close();
  117. huc.disconnect();
  118.  
  119. //通过主线程显示信息和关闭对话框
  120. runOnUiThread(new Runnable() {
  121. @Override
  122. public void run() {
  123. et_w6.setText(sbl);
  124.  
  125. //关闭对话框
  126. progressDialog.dismiss();
  127. }
  128. });
  129.  
  130. }
  131. else
  132. {
  133. Toast.makeText(WebActivity.this, "连接错误,返回的状态码= " + code, Toast.LENGTH_SHORT).show();
  134. }
  135.  
  136. } catch (Exception e) {
  137. e.printStackTrace();
  138. progressDialog.dismiss();
  139. }
  140.  
  141. super.run();
  142. }
  143. }.start();
  144.  
  145. }
  146.  
  147. public void postonclick(View view)
  148. {
  149.  
  150. //1. 显示ProgressDialog 进度对话框
  151. final ProgressDialog dialog = ProgressDialog.show(this, null, "正在加载中,请稍后...");
  152. //2.开启子线程 访问网络
  153. new Thread()
  154. {
  155. public void run()
  156. {
  157. try
  158. {
  159. //1) -URL
  160. URL url = new URL(et_w5.getText().toString());
  161. //2) -URL获取连接
  162. HttpURLConnection huc =(HttpURLConnection)url.openConnection();
  163.  
  164. //请求方式
  165. huc.setRequestMethod("POST");
  166. //设置超时
  167. huc.setConnectTimeout(3000);
  168. huc.setReadTimeout(3000);
  169.  
  170. //连接并发送请求
  171. huc.connect();
  172.  
  173. //用输出流设置请求体
  174. OutputStream os = huc.getOutputStream();
  175.  
  176. String str = "name=rose";
  177. os.write(str.getBytes("UTF-8"));
  178.  
  179. //接收:
  180. //判断返回状态码 200
  181. int code = huc.getResponseCode();
  182.  
  183. if (code == 200)
  184. {
  185. //接收数据
  186.  
  187. //输入流:
  188. InputStream is = huc.getInputStream();
  189.  
  190. //读取流
  191. //1-byte数组
  192. byte[] b = new byte[1024];
  193. //2-读到的长度
  194. int i = 0;
  195. //3-接收到的数据
  196. final StringBuilder sbl = new StringBuilder();
  197.  
  198. while ((i = is.read(b))>0)
  199. {
  200. sbl.append(new String(b,0,i));
  201. }
  202. //释放资源
  203. is.close();
  204. huc.disconnect();
  205.  
  206. //通过主线程显示信息和关闭对话框
  207. runOnUiThread(new Runnable() {
  208. @Override
  209. public void run() {
  210. et_w6.setText(sbl);
  211. //关闭对话框
  212. dialog.dismiss();
  213. }
  214. });
  215.  
  216. }
  217. else {
  218. Toast.makeText(WebActivity.this, "连接错误,返回状态码=" + code, Toast.LENGTH_SHORT).show();
  219. }
  220.  
  221. } catch (Exception e)
  222. {
  223. e.printStackTrace();
  224.  
  225. dialog.dismiss();
  226. }
  227. }
  228.  
  229. }.start();
  230. }
  231.  
  232. public void volleygetonclick(View view)
  233. {
  234. //1.进度对话框
  235. final ProgressDialog progressDialog = ProgressDialog.show(this,null,"正在加载,请稍后。。。");
  236.  
  237. //构造Volley的请求对象 参数:1-地址 2-正常处理监听 3-错误处理监听
  238. StringRequest sr = new StringRequest(et_w5.getText().toString() + "?name=jack", new Response.Listener<String>() {
  239. @Override
  240. public void onResponse(String s) {
  241.  
  242. et_w6.setText(s);
  243.  
  244. progressDialog.dismiss();
  245.  
  246. }
  247. }, new Response.ErrorListener() {
  248. @Override
  249. public void onErrorResponse(VolleyError volleyError) {
  250.  
  251. Toast.makeText(WebActivity.this, "访问异常", Toast.LENGTH_SHORT).show();
  252. //出错也要关闭
  253. progressDialog.dismiss();
  254.  
  255. }
  256. });
  257.  
  258. //把请求对象放入队列
  259. requestQueue.add(sr);
  260. }
  261.  
  262. public void volleypostonclick(View view)
  263. {
  264. //1.进度对话框
  265. final ProgressDialog progressDialog = ProgressDialog.show(this,null,"正在加载,请稍后。。。");
  266.  
  267. //构造Volley的请求对象
  268. StringRequest sr = new StringRequest(Request.Method.POST,et_w5.getText().toString(), new Response.Listener<String>() {
  269. @Override
  270. public void onResponse(String s) {
  271.  
  272. et_w6.setText(s);
  273. progressDialog.dismiss();
  274.  
  275. }
  276. }, new Response.ErrorListener() {
  277. @Override
  278. public void onErrorResponse(VolleyError volleyError) {
  279.  
  280. Toast.makeText(WebActivity.this, "访问异常", Toast.LENGTH_SHORT).show();
  281. progressDialog.dismiss();
  282. }
  283. }){
  284. //重写设置参数的方法
  285. @Override
  286. protected Map<String, String> getParams() throws AuthFailureError {
  287.  
  288. Map<String,String> m = new HashMap<String,String>();
  289. m.put("name","volley");
  290.  
  291. return m;
  292. }
  293. };
  294. //把请求对象放入队列
  295.  
  296. requestQueue.add(sr);
  297.  
  298. }
  299. }

首先得获得权限:

  1. <uses-permission android:name="android.permission.INTERNET" />

activity_web.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:paddingBottom="@dimen/activity_vertical_margin"
  7. android:paddingLeft="@dimen/activity_horizontal_margin"
  8. android:paddingRight="@dimen/activity_horizontal_margin"
  9. android:paddingTop="@dimen/activity_vertical_margin"
  10. tools:context="com.hanqi.test5.WebActivity"
  11. android:orientation="vertical">
  12.  
  13. <EditText
  14. android:layout_width="match_parent"
  15. android:layout_height="wrap_content"
  16. android:id="@+id/et_w5"
  17. android:hint="URL地址"
  18. android:text="http://192.168.0.122:8080/TestWeb/index.jsp"/>
  19. <LinearLayout
  20. android:layout_width="match_parent"
  21. android:layout_height="wrap_content">
  22. <Button
  23. android:layout_width="0dp"
  24. android:layout_height="wrap_content"
  25. android:layout_weight="1"
  26. android:text="JDK_Get方式"
  27. android:onClick="getonclick"/>
  28. <Button
  29. android:layout_width="0dp"
  30. android:layout_height="wrap_content"
  31. android:layout_weight="1"
  32. android:text="JDK_Post方式"
  33. android:onClick="postonclick"/>
  34. </LinearLayout>
  35. <LinearLayout
  36. android:layout_width="match_parent"
  37. android:layout_height="wrap_content">
  38. <Button
  39. android:layout_width="0dp"
  40. android:layout_height="wrap_content"
  41. android:layout_weight="1"
  42. android:text="Android的Get方式"
  43. android:onClick="bt7_OnClick"/>
  44. <Button
  45. android:layout_width="0dp"
  46. android:layout_height="wrap_content"
  47. android:layout_weight="1"
  48. android:text="Android的Post方式"
  49. android:onClick="bt8_OnClick"/>
  50. </LinearLayout>
  51.  
  52. <LinearLayout
  53. android:layout_width="match_parent"
  54. android:layout_height="wrap_content">
  55. <Button
  56. android:layout_width="0dp"
  57. android:layout_height="wrap_content"
  58. android:layout_weight="1"
  59. android:text="Volley的Get方式"
  60. android:onClick="volleygetonclick"/>
  61. <Button
  62. android:layout_width="0dp"
  63. android:layout_height="wrap_content"
  64. android:layout_weight="1"
  65. android:text="Volley的Post方式"
  66. android:onClick="volleypostonclick"/>
  67. </LinearLayout>
  68. <EditText
  69. android:layout_width="match_parent"
  70. android:layout_height="100dp"
  71. android:id="@+id/et_w6"/>
  72.  
  73. </LinearLayout>

效果图:

Android课程---远程服务器存储的更多相关文章

  1. android-数据存储之远程服务器存储

    一.如何编码实现客户端与服务器端的交互 <一>JDK内置原生API HttpUrlConnection <二>Android内置的包装API HttpClient浏览器 < ...

  2. Android课程---关于数据存储的学习(2)

    手机外部存储的学习 activity_data2.xml <?xml version="1.0" encoding="utf-8"?> <Li ...

  3. Android课程---关于数据存储的学习

    activity_data1.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout ...

  4. Android课程---关于数据存储的学习(3)之数据库和事务

    DataActivity3.java package com.hanqi.test5; import android.content.ContentValues; import android.dat ...

  5. Android课程---关于数据存储的学习之总结

  6. 远程块存储iSCSI

    /* Border styles */ #table-2 thead, #table-2 tr { border-top-width: 1px; border-top-style: solid; bo ...

  7. 【Android应用开发】 Android 崩溃日志 本地存储 与 远程保存

    示例代码下载 : http://download.csdn.net/detail/han1202012/8638801; 一. 崩溃日志本地存储 1. 保存原理解析 崩溃信息本地保存步骤 : -- 1 ...

  8. Android课程设计——博学谷1.0

    本文讲述了如何应用大三下学期智能移动终端开发技术课程所学知识,完成包含服务器端.客户端程序的应用——博学谷登录模块的开发,结合java语言基本知识,例如:字符串.列表.类.数据库读写等,设计.实现一个 ...

  9. Android和FTP服务器交互,上传下载文件(实例demo)

    今天同学说他备份了联系人的数据放在一个文件里,想把它存到服务器上,以便之后可以进行下载恢复..于是帮他写了个上传,下载文件的demo 主要是 跟FTP服务器打交道-因为这个东东有免费的可以身亲哈 1. ...

随机推荐

  1. 基于AgileEAS.NET SOA 中间件领域模型数据器快速打造自己的代码生成器

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...

  2. 【leetcode】Compare Version Numbers

    题目描述: Compare two version numbers version1 and version2. If version1 > version2 return 1, if vers ...

  3. F#之旅9 - 正则表达式

    今天,cozy群有个群友发了条正则,问正则匹配相关的问题.虽然他的问题用html selector去处理可能更好,但是我也再一次发现:我忘了正则怎么写的了! 忘掉正则是有原因的,这篇文章会简单记录下F ...

  4. C语言的一些小知识

    注:本文讨论的"C语言"为GNU C,而非ANSI C 标准库 语法 switch语句中的case关键词可以放在任何地方 switch (a) { case 1:; if (b== ...

  5. 在IIS8.5的环境下配置WCF的Restful Service

    今天在客户的环境中(Windows Server 2012 R2 + IIS 8.5)搭建Call WCF Restful Service的功能,发现了几个环境配置的问题,记录如下: 1):此环境先安 ...

  6. Beginning Scala study note(6) Scala Collections

    Scala's object-oriented collections support mutable and immutable type hierarchies. Also support fun ...

  7. POJ 3347 Kadj Squares (计算几何+线段相交)

    题意:从左至右给你n个正方形的边长,接着这些正方形都按照旋转45度以一角为底放置坐标轴上,最左边的正方形左端点抵住y轴,后面的正方形依次紧贴前面所有正方形放置,问从上方向下看去,有哪些正方形是可以被看 ...

  8. 《UML大战需求分析》阅读随笔(六)

    在我们做的代码设计中分为系统设计和程序设计.程序设计是系统设计中模拟程序的执行逻辑,定义客户机服务器对象合作的框架的那个部分.程序和事务设计中,作者讲述到程序和事务设计将系统设计制品放在一起,并作为系 ...

  9. iOS图片拉伸技巧

    纵观移动市场,一款移动app,要想长期在移动市场立足,最起码要包含以下几个要素:实用的功能.极强的用户体验.华丽简洁的外观.华丽外观的背后,少不了美工的辛苦设计,但如果开发人员不懂得怎么合理展示这些设 ...

  10. three.js全景

    <!DOCTYPE html> <html lang="en"> <head> <title>three.js webgl - eq ...