Android课程---远程服务器存储
在使用Volley进行获取数据时,需要事先准备环境:在libs里面导入一个Volley.jar包,在网上都有,可以下载下来导入,或者自己电脑上有DT的,自己合成一个包也行。
WebActivity.java
package com.hanqi.test5; import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast; import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley; import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map; public class WebActivity extends AppCompatActivity { EditText et_w5;
EditText et_w6; RequestQueue requestQueue;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web); et_w5 = (EditText)findViewById(R.id.et_w5);
et_w5.setText("http://192.168.0.122:8080/TestWeb/index.jsp"); et_w6 = (EditText)findViewById(R.id.et_w6); //获取Volley的请求队列
requestQueue = Volley.newRequestQueue(this);
}
public void getonclick(View view)
{
//1.
/*
* 使用httpUrlConnection提交get请求
*/
/*
1. 显示ProgressDialog
2. 启动分线程
3. 在分线程, 发送请求, 得到响应数据
1). 得到path, 并带上参数name=Tom1&age=11
2). 创建URL对象
3). 打开连接, 得到HttpURLConnection对象
4). 设置请求方式,连接超时, 读取数据超时
5). 连接服务器
6). 发请求, 得到响应数据
得到响应码, 必须是200才读取
得到InputStream, 并读取成String
7). 断开连接
4. 在主线程, 显示得到的结果, 移除dialog
*/
//1. 显示ProgressDialog
final ProgressDialog progressDialog = ProgressDialog.show(this,null,"正在请求中..."); //2. 访问网络 开启子线程 new Thread()
{
@Override
public void run() { try { //1.URl
URL url = new URL(et_w5.getText().toString()+"?name=tom"); //2.获取连接
HttpURLConnection huc = (HttpURLConnection)url.openConnection(); //3.请求方式
huc.setRequestMethod("GET");
//设置超时
huc.setConnectTimeout(3000);
huc.setReadTimeout(3000); //连接并发送请求
huc.connect(); //接收
//判断返回状态 200
int code = huc.getResponseCode(); if (code == 200)
{
//接收数据 //输入流
InputStream is = huc.getInputStream();
//读取流
//1- byte数组
byte[] b = new byte[1024];
//2- 读到数组的长度
int i=0;
//3.接收到的数据
final StringBuilder sbl = new StringBuilder(); //边读边写
while((i=is.read(b))>0)
{
sbl.append(new String(b,0,i));
}
//释放资源
is.close();
huc.disconnect(); //通过主线程显示信息和关闭对话框
runOnUiThread(new Runnable() {
@Override
public void run() {
et_w6.setText(sbl); //关闭对话框
progressDialog.dismiss();
}
}); }
else
{
Toast.makeText(WebActivity.this, "连接错误,返回的状态码= " + code, Toast.LENGTH_SHORT).show();
} } catch (Exception e) {
e.printStackTrace();
progressDialog.dismiss();
} super.run();
}
}.start(); } public void postonclick(View view)
{ //1. 显示ProgressDialog 进度对话框
final ProgressDialog dialog = ProgressDialog.show(this, null, "正在加载中,请稍后...");
//2.开启子线程 访问网络
new Thread()
{
public void run()
{
try
{
//1) -URL
URL url = new URL(et_w5.getText().toString());
//2) -URL获取连接
HttpURLConnection huc =(HttpURLConnection)url.openConnection(); //请求方式
huc.setRequestMethod("POST");
//设置超时
huc.setConnectTimeout(3000);
huc.setReadTimeout(3000); //连接并发送请求
huc.connect(); //用输出流设置请求体
OutputStream os = huc.getOutputStream(); String str = "name=rose";
os.write(str.getBytes("UTF-8")); //接收:
//判断返回状态码 200
int code = huc.getResponseCode(); if (code == 200)
{
//接收数据 //输入流:
InputStream is = huc.getInputStream(); //读取流
//1-byte数组
byte[] b = new byte[1024];
//2-读到的长度
int i = 0;
//3-接收到的数据
final StringBuilder sbl = new StringBuilder(); while ((i = is.read(b))>0)
{
sbl.append(new String(b,0,i));
}
//释放资源
is.close();
huc.disconnect(); //通过主线程显示信息和关闭对话框
runOnUiThread(new Runnable() {
@Override
public void run() {
et_w6.setText(sbl);
//关闭对话框
dialog.dismiss();
}
}); }
else {
Toast.makeText(WebActivity.this, "连接错误,返回状态码=" + code, Toast.LENGTH_SHORT).show();
} } catch (Exception e)
{
e.printStackTrace(); dialog.dismiss();
}
} }.start();
} public void volleygetonclick(View view)
{
//1.进度对话框
final ProgressDialog progressDialog = ProgressDialog.show(this,null,"正在加载,请稍后。。。"); //构造Volley的请求对象 参数:1-地址 2-正常处理监听 3-错误处理监听
StringRequest sr = new StringRequest(et_w5.getText().toString() + "?name=jack", new Response.Listener<String>() {
@Override
public void onResponse(String s) { et_w6.setText(s); progressDialog.dismiss(); }
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) { Toast.makeText(WebActivity.this, "访问异常", Toast.LENGTH_SHORT).show();
//出错也要关闭
progressDialog.dismiss(); }
}); //把请求对象放入队列
requestQueue.add(sr);
} public void volleypostonclick(View view)
{
//1.进度对话框
final ProgressDialog progressDialog = ProgressDialog.show(this,null,"正在加载,请稍后。。。"); //构造Volley的请求对象
StringRequest sr = new StringRequest(Request.Method.POST,et_w5.getText().toString(), new Response.Listener<String>() {
@Override
public void onResponse(String s) { et_w6.setText(s);
progressDialog.dismiss(); }
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) { Toast.makeText(WebActivity.this, "访问异常", Toast.LENGTH_SHORT).show();
progressDialog.dismiss();
}
}){
//重写设置参数的方法
@Override
protected Map<String, String> getParams() throws AuthFailureError { Map<String,String> m = new HashMap<String,String>();
m.put("name","volley"); return m;
}
};
//把请求对象放入队列 requestQueue.add(sr); }
}
首先得获得权限:
<uses-permission android:name="android.permission.INTERNET" />
activity_web.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.hanqi.test5.WebActivity"
android:orientation="vertical"> <EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/et_w5"
android:hint="URL地址"
android:text="http://192.168.0.122:8080/TestWeb/index.jsp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="JDK_Get方式"
android:onClick="getonclick"/>
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="JDK_Post方式"
android:onClick="postonclick"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Android的Get方式"
android:onClick="bt7_OnClick"/>
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Android的Post方式"
android:onClick="bt8_OnClick"/>
</LinearLayout> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Volley的Get方式"
android:onClick="volleygetonclick"/>
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Volley的Post方式"
android:onClick="volleypostonclick"/>
</LinearLayout>
<EditText
android:layout_width="match_parent"
android:layout_height="100dp"
android:id="@+id/et_w6"/> </LinearLayout>
效果图:

Android课程---远程服务器存储的更多相关文章
- android-数据存储之远程服务器存储
一.如何编码实现客户端与服务器端的交互 <一>JDK内置原生API HttpUrlConnection <二>Android内置的包装API HttpClient浏览器 < ...
- Android课程---关于数据存储的学习(2)
手机外部存储的学习 activity_data2.xml <?xml version="1.0" encoding="utf-8"?> <Li ...
- Android课程---关于数据存储的学习
activity_data1.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout ...
- Android课程---关于数据存储的学习(3)之数据库和事务
DataActivity3.java package com.hanqi.test5; import android.content.ContentValues; import android.dat ...
- Android课程---关于数据存储的学习之总结
- 远程块存储iSCSI
/* Border styles */ #table-2 thead, #table-2 tr { border-top-width: 1px; border-top-style: solid; bo ...
- 【Android应用开发】 Android 崩溃日志 本地存储 与 远程保存
示例代码下载 : http://download.csdn.net/detail/han1202012/8638801; 一. 崩溃日志本地存储 1. 保存原理解析 崩溃信息本地保存步骤 : -- 1 ...
- Android课程设计——博学谷1.0
本文讲述了如何应用大三下学期智能移动终端开发技术课程所学知识,完成包含服务器端.客户端程序的应用——博学谷登录模块的开发,结合java语言基本知识,例如:字符串.列表.类.数据库读写等,设计.实现一个 ...
- Android和FTP服务器交互,上传下载文件(实例demo)
今天同学说他备份了联系人的数据放在一个文件里,想把它存到服务器上,以便之后可以进行下载恢复..于是帮他写了个上传,下载文件的demo 主要是 跟FTP服务器打交道-因为这个东东有免费的可以身亲哈 1. ...
随机推荐
- UILabel 根据文本内容设置frame
CGRect senderFrame = cell.senderLabel.frame; CGRect creatAtFrame = cell.creatAtLabel.frame; CG ...
- wamp2.5 配置多端口虚拟主机
1.保证httpd.conf下 Include conf/extra/httpd-vhosts.conf LoadModule php5_module "D:/E/php/wamp/bin/ ...
- Dark Mobile Bank之移动银行应用仿冒攻击威胁分析报告
一.背景 据“第十五次全国信息网络安全状况暨计算机和移动终端病毒疫情调查”调查结果显示,2015年移动终端的病毒感染比例为50.46%,相对于2014年增长了18.96%,移动终端病毒感染率涨幅较大, ...
- 使用Fiddler关于“由于目标计算机积极拒绝,无法连接。”的解决方案
今天使用Fiddler的时候遇到下面这个问题:在地址栏想打开个一般处理程序,出现连接本机失败的提示,如下图: 而这在我没打开Fiddler的时候是显示正常的. 查看Fiddler,在嗅探 -> ...
- Particle System(粒子系统)
粒子系统应用:Unity的粒子系统可以制作烟雾,气流,火焰和各种大气效果. 粒子系统模块介绍: 大部分的属性可以通过曲线控制(见曲线编辑器),颜色属性可以被定义了颜色动画的渐变器控 ...
- Ajax:一种网页开发技术(Asynchronous Javascript + XML)
创建新的 XMLHttpRequest 对象(Ajax 应用程序的核心): <script language="javascript" type="text/jav ...
- UWP学习记录3-设计和UI之样式
UWP学习记录3-设计和UI之样式 1.颜色 在系统的“设置”>“个性化”>“颜色”里,提供了主题色选择.选定主题色后,会根据颜色亮度的 HSB 值创建浅色和深色的主题色. 应用可使用阴影 ...
- ORACLE中常见SET指令
1 SET TIMING ON 说明:显示SQL语句的运行时间.默认值为OFF. 在SQLPLUS中使用,时间精确到0.01秒.也就是10毫秒. 在PL/SQL DEVELOPER 中 ...
- 【vuejs小项目】一、脚手架搭建工作
一.关于vuejs 这是一个MVVM的前端开发框架,model(数据).viewmode(通讯).view(视图),它吸取了reactjs和angularjs的长处,核心重点在于组件化的设计原则. 我 ...
- PDA手持机 移动开单进销存系统 现场出打印凭据和扫码 新的亮点
传统车销模式弊端:1.手写开单,效率低,动作慢2.现场手写开单明细不能打印,产品明细不规范3.电脑办公人员及车销人员对车上的库存情况掌握不清楚,销售人员对每种产品销售价格不清楚4.老板对员工工作的管控 ...