Android-获取网络数据、发送请求
2013-06-28 19:25
796 查看
一、获取网络上的文本数据
页面布局
一个EditText输入网址、一个Button提交、一个 TextView 显示结果,分别添加EditText、TextView的id
让内容横竖滚动:在TextView外套一个ScrollView,再套一个HorizontalScrollView
访问网络
URL url = new URL("输入的网址"); HttpURLConnection conn = url.openConnection();
以流的方式获取数据:conn.getInputStream();
获取数据后,因为是文本数据,直接为TextView赋Text值
权限
清单文件中配置 <uses-permission android:name="android.permission.INTERNET" />
二、获取服务器上的图片数据
布局和以上文本布局基本一样,只需再添加ImageView
获取图片
基本原理和获取文本数据一样,唯一不同的是需要返回的是图片;图片肯定不能以字符串返回,是由Bitmap返回
Bitmap bm = BitmapFactory.decodeByteArray("byte数组",0,"数组长度");
在ImageView中设置setImageBitmap(Bitmap bit);
图片的缓存
将图片缓存在文件中,File cacheFile = new File(context.getCacheDir(),UrlEncoder.encode(address));
判断如果文件存在修改服务器里文件的最后访问时间:conn.setIfM[b][b]o[/b]difiedSince(cacheFile.lastModified());[/b]
如果不存在且响应吗为200,创建Bitmap bm = BitmapFactory.decodeByteArray(data,0,data.length);
并把字节数组解码为Bitmap图片:bm.compress(CompressFormat.JPEG,100,new FileOutputStream(cacheFile)); 返回bm;
如果响应码为304表示需要读取缓存文件:Bitmap bm = BitmapFactory.decodeFile(cacheFile.getAbsolutePath());
响应吗都不正确抛出异常
三、发送请求
1.GET
数据发送之前需要经过URLEncoder进行编码
将要发送的数据拼接在地址后面即可
2.POST
数据同样需要编码
setRequestMethod()设置请求方式
setRequestProperty()设置请求头ContentType和ContentLength
setDoOutput()设置需要写出消息体
getOutputStream()获取输出流写出数据
一.获取网络文本
1.访问网络
创建URL对象封装地址
调用openConnection()方法打开一个HttpURLConnection对象
setConnectionTimeOut()设置超时时间
getResponseCode()获取响应码
getInputStream()获取输入流读取数据
将读取到的字节数据解码为字符串
2.权限
访问网络是需要计费的操作, 需要权限<uses-permission android:name="android.permission.INTERNET"/>
二.获取网络图片
1.获取图片
和获取文本相同, 都是读取服务端数据
不同的是将字节数据解码为Bitmap
2.缓存
第一次访问的时候从网络获取, 得到图片之后用文件的方式保存到本地
下次再访问时判断缓存文件是否存在, 如果存在就把缓存文件的最后修改时间发给服务器
服务器会判断缓存文件和服务端文件的修改时间, 如果服务端文件没修改就会响应304, 如果服务端文件已修改则响应200
客户端根据服务端响应码判断读缓存文件还是重新读取网络
三.发送请求
1.GET
数据发送之前需要经过URLEncoder进行编码
将要发送的数据拼接在地址后面即可
2.POST
数据同样需要编码
setRequestMethod()设置请求方式
setRequestProperty()设置请求头ContentType和ContentLength
setDoOutput()设置需要写出消息体
getOutputStream()获取输出流写出数据
[b]GET发送请求[/b]
[b]对传入的数据进行URLEncoder.encode(username)编码[/b]
[b]设置请求方式 conn.setRequestMethod("GET");[/b]
将path和编码后的数据组拼成一个请求地址:http://localshot:8080/4.1.1WebService?username=xxx&password=ooo
[b]conn.getInputStream()获得服务器的响应码和响应数据返回[/b]
[b]POST发送请求[/b]
[b]同样需要对传入的数据进行编码:username = URLEncoder.encode(username);[/b]
[b]设置请求方式:conn.setRequestMethod("POST");[/b]
设置两个请求头:conn.setRequestPro
4000
perty("Content-Type","...."); conn.setRequestProperty("Content-Length",data.getLength()+"");
将请求发给服务器:conn.setDoOutput(true); conn.getOutputStream().write(data.getBytes());
获取响应吗给浏览器响应:conn==200? conn.getInputStream(); ...
[b]HttpClient发送请求:浏览器的简单包装,就相当于一个简单的浏览器,google提供的开源项目[/b]
[b]HttpClient的GET:[/b]
[b]先对传入的数据进行编码 username = URLEncoder.encode(username); //准备数据[/b]
[b]HttpClient client = new DefaultHttpClient(); // 获取到一个浏览器[/b]
[b]HttpGet httpGet = new HttpGet(path +"?username="+username+"&password="+password);[/b]
HttpResponse response = client.execute(httpGet); //浏览器执行地址栏的请求地址
[b]int code = response.getStatusLine().getStatusCode(); //得到状态行的响应吗[/b]
[b]code==200? 等于的话 InputStream in = response.getEntity().getContent();//获得流,返回数据[/b]
[b]HttpClient的Post:[/b]
HttpClient client = new DefaultHttpClient();
HttpPost httppost = new HttpPost(path);//2. 准备要请求的 数据类型
List< NameValuePair> parameters = new ArrayList<NameValuePair>();// 键值对
parameters.add(new BasicNameValuePair("name", name));
parameters.add(new BasicNameValuePair("password", password));
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(parameters, "utf-8");
httppost.setEntity(entity);//3.设置post请求的数据实体
HttpResponse ressponse = client.execute(httppost);//4. 发送数据给服务器
int code = ressponse.getStatusLine().getStatusCode();
页面布局
一个EditText输入网址、一个Button提交、一个 TextView 显示结果,分别添加EditText、TextView的id
让内容横竖滚动:在TextView外套一个ScrollView,再套一个HorizontalScrollView
访问网络
URL url = new URL("输入的网址"); HttpURLConnection conn = url.openConnection();
以流的方式获取数据:conn.getInputStream();
获取数据后,因为是文本数据,直接为TextView赋Text值
权限
清单文件中配置 <uses-permission android:name="android.permission.INTERNET" />
二、获取服务器上的图片数据
布局和以上文本布局基本一样,只需再添加ImageView
获取图片
基本原理和获取文本数据一样,唯一不同的是需要返回的是图片;图片肯定不能以字符串返回,是由Bitmap返回
Bitmap bm = BitmapFactory.decodeByteArray("byte数组",0,"数组长度");
在ImageView中设置setImageBitmap(Bitmap bit);
图片的缓存
将图片缓存在文件中,File cacheFile = new File(context.getCacheDir(),UrlEncoder.encode(address));
判断如果文件存在修改服务器里文件的最后访问时间:conn.setIfM[b][b]o[/b]difiedSince(cacheFile.lastModified());[/b]
如果不存在且响应吗为200,创建Bitmap bm = BitmapFactory.decodeByteArray(data,0,data.length);
并把字节数组解码为Bitmap图片:bm.compress(CompressFormat.JPEG,100,new FileOutputStream(cacheFile)); 返回bm;
如果响应码为304表示需要读取缓存文件:Bitmap bm = BitmapFactory.decodeFile(cacheFile.getAbsolutePath());
响应吗都不正确抛出异常
三、发送请求
1.GET
数据发送之前需要经过URLEncoder进行编码
将要发送的数据拼接在地址后面即可
2.POST
数据同样需要编码
setRequestMethod()设置请求方式
setRequestProperty()设置请求头ContentType和ContentLength
setDoOutput()设置需要写出消息体
getOutputStream()获取输出流写出数据
一.获取网络文本
1.访问网络
创建URL对象封装地址
调用openConnection()方法打开一个HttpURLConnection对象
setConnectionTimeOut()设置超时时间
getResponseCode()获取响应码
getInputStream()获取输入流读取数据
将读取到的字节数据解码为字符串
2.权限
访问网络是需要计费的操作, 需要权限<uses-permission android:name="android.permission.INTERNET"/>
二.获取网络图片
1.获取图片
和获取文本相同, 都是读取服务端数据
不同的是将字节数据解码为Bitmap
2.缓存
第一次访问的时候从网络获取, 得到图片之后用文件的方式保存到本地
下次再访问时判断缓存文件是否存在, 如果存在就把缓存文件的最后修改时间发给服务器
服务器会判断缓存文件和服务端文件的修改时间, 如果服务端文件没修改就会响应304, 如果服务端文件已修改则响应200
客户端根据服务端响应码判断读缓存文件还是重新读取网络
三.发送请求
1.GET
数据发送之前需要经过URLEncoder进行编码
将要发送的数据拼接在地址后面即可
2.POST
数据同样需要编码
setRequestMethod()设置请求方式
setRequestProperty()设置请求头ContentType和ContentLength
setDoOutput()设置需要写出消息体
getOutputStream()获取输出流写出数据
[b]GET发送请求[/b]
[b]对传入的数据进行URLEncoder.encode(username)编码[/b]
[b]设置请求方式 conn.setRequestMethod("GET");[/b]
将path和编码后的数据组拼成一个请求地址:http://localshot:8080/4.1.1WebService?username=xxx&password=ooo
[b]conn.getInputStream()获得服务器的响应码和响应数据返回[/b]
[b]POST发送请求[/b]
[b]同样需要对传入的数据进行编码:username = URLEncoder.encode(username);[/b]
[b]设置请求方式:conn.setRequestMethod("POST");[/b]
设置两个请求头:conn.setRequestPro
4000
perty("Content-Type","...."); conn.setRequestProperty("Content-Length",data.getLength()+"");
将请求发给服务器:conn.setDoOutput(true); conn.getOutputStream().write(data.getBytes());
获取响应吗给浏览器响应:conn==200? conn.getInputStream(); ...
[b]HttpClient发送请求:浏览器的简单包装,就相当于一个简单的浏览器,google提供的开源项目[/b]
[b]HttpClient的GET:[/b]
[b]先对传入的数据进行编码 username = URLEncoder.encode(username); //准备数据[/b]
[b]HttpClient client = new DefaultHttpClient(); // 获取到一个浏览器[/b]
[b]HttpGet httpGet = new HttpGet(path +"?username="+username+"&password="+password);[/b]
HttpResponse response = client.execute(httpGet); //浏览器执行地址栏的请求地址
[b]int code = response.getStatusLine().getStatusCode(); //得到状态行的响应吗[/b]
[b]code==200? 等于的话 InputStream in = response.getEntity().getContent();//获得流,返回数据[/b]
[b]HttpClient的Post:[/b]
HttpClient client = new DefaultHttpClient();
HttpPost httppost = new HttpPost(path);//2. 准备要请求的 数据类型
List< NameValuePair> parameters = new ArrayList<NameValuePair>();// 键值对
parameters.add(new BasicNameValuePair("name", name));
parameters.add(new BasicNameValuePair("password", password));
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(parameters, "utf-8");
httppost.setEntity(entity);//3.设置post请求的数据实体
HttpResponse ressponse = client.execute(httppost);//4. 发送数据给服务器
int code = ressponse.getStatusLine().getStatusCode();
相关文章推荐
- Android之网络----使用HttpClient发送HTTP请求(通过get方法获取数据)
- Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据)
- Android向EasyN摄像头发送http get请求获取媒体数据响应包
- Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据)
- Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据)
- Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据)
- 第十二篇:Android GET请求获取网络数据以及POST数据(使用HttpURLConnection)
- Android开发之从网络(Intent)获取和发送数据
- Android 利用异步任务AsyncTask发送post请求获取json数据
- Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据)
- Android Studio利用异步任务AsyncTask发送post请求获取json数据
- Android以请求参数来获取网络数据
- Android 发送网络请求 服务器获取验证码并自动填写
- Android用httpURLConnection发送post网络请求并拿到数据
- Android之向中国天气网发送GET请求获取JSON数据实例
- Android Studio利用异步任务AsyncTask发送post请求获取json数据
- Android Studio利用异步任务AsyncTask发送post请求获取json数据
- Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据)
- Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据)
- Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据)