【android初级】之Android之从网络上获取数据(图片,网页,xml,json等)

简介: 1>从网络上获取数据(图片,网页,xml,json等) A.从网络上获取一张图片,然后显示到手机上这是在java中public class ImageRequest { /**  * @param args  */ public sta...

1>从网络上获取数据(图片,网页,xml,json等)
 
A.从网络上获取一张图片,然后显示到手机上
这是在java中

public class ImageRequest {

 /**
  * @param args
  */
 public static void main(String[] args) throws Exception {
  URL url = new URL("http://i3.itc.cn/20100707/76c_0969b700_d5b4_41cd_8243_9b486be92cc4_0.jpg");
  HttpURLConnection conn = (HttpURLConnection)url.openConnection();
  conn.setRequestMethod("GET");
  conn.setConnectTimeout(5 * 1000);
  InputStream inStream = conn.getInputStream();//通过输入流获取图片数据
  byte[] data = readInputStream(inStream);//得到图片的二进制数据
  File imageFile = new File("itcast.jpg");//保存在项目下
  FileOutputStream outStream = new FileOutputStream(imageFile);
  outStream.write(data);
  outStream.close();
 }

 public static byte[] readInputStream(InputStream inStream) throws Exception{
  ByteArrayOutputStream outStream = new ByteArrayOutputStream();
  byte[] buffer = new byte[1024];//定义一个1k的缓冲区
  int len = 0;
  while( (len=inStream.read(buffer)) != -1 ){//返回的是实际的字节数
   outStream.write(buffer, 0, len);//将缓冲区的数据写入到内存中
  }
  inStream.close();
  return outStream.toByteArray();
 }
}

在手机上
 button.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
    String path = pathText.getText().toString();
    try {
     byte[] data = ImageService.getImage(path);
     Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);//生成位图
     imageView.setImageBitmap(bitmap);//显示图片     
    } catch (Exception e) {
     Toast.makeText(ImageShowActivity.this, R.string.error, 1).show();
     Log.e(TAG, e.toString());
    }
   }});
<!-- 访问网络的权限 -->
<uses-permission android:name="android.permission.INTERNET"/>


public class StreamTool {

 /**
  * 从输入流中获取数据
  * @param inStream 输入流
  * @return
  * @throws Exception
  */
 public static byte[] readInputStream(InputStream inStream) throws Exception{
  ByteArrayOutputStream outStream = new ByteArrayOutputStream();
  byte[] buffer = new byte[1024];
  int len = 0;
  while( (len=inStream.read(buffer)) != -1 ){
   outStream.write(buffer, 0, len);
  }
  inStream.close();
  return outStream.toByteArray();
 }
}
-----------------------------------------------------------------------------------------------------
public class ImageService {
 
 public static byte[] getImage(String path) throws Exception {
  URL url = new URL("http://i3.itc.cn/20100707/76c_0969b700_d5b4_41cd_8243_9b486be92cc4_0.jpg");
  HttpURLConnection conn = (HttpURLConnection)url.openConnection();
  conn.setRequestMethod("GET");
  conn.setConnectTimeout(5 * 1000);
  InputStream inStream = conn.getInputStream();//通过输入流获取图片数据
  return StreamTool.readInputStream(inStream);//得到图片的二进制数据
 }

}
B.从网络上获取网页(用的比较少)
byte[] data = readInputStream(inStream);//得到网页的二进制数据
String html = new String(data,"gb2312");


C.从网络上获取xml数据,然后显示在手机上
 android手机模拟器本身绑定在模拟器上,所以访问web service的时候不能用local host
 或者用127.0.0.1。而应该使用局域网上的ip地址。
public class VideoService {
 /**
  * 获取最新的视频资讯
  * @return
  * @throws Exception
  */
 public static List<Video> getLastVideos() throws Exception{
  String path = "http://192.168.1.100:8080/videoweb/video/list.do";
  URL url = new URL(path);
  HttpURLConnection conn = (HttpURLConnection)url.openConnection();
  conn.setReadTimeout(5*1000);
  conn.setRequestMethod("GET");
  InputStream inStream = conn.getInputStream();
  return parseXML(inStream);
 }
/**
  * 解析服务器返回的协议,得到视频资讯
  * @param inStream
  * @return
  * @throws Exception
  */
 private static List<Video> parseXML(InputStream inStream) throws Exception{
  List<Video> videos = null;
  Video video = null;
  XmlPullParser parser = Xml.newPullParser();
  parser.setInput(inStream, "UTF-8");
  int eventType = parser.getEventType();//产生第一个事件
  while(eventType!=XmlPullParser.END_DOCUMENT){//只要不是文档结束事件
   switch (eventType) {
   case XmlPullParser.START_DOCUMENT:
    videos = new ArrayList<Video>();
    break;
 
   case XmlPullParser.START_TAG:
    String name = parser.getName();//获取解析器当前指向的元素的名称
    if("video".equals(name)){
     video = new Video();
     video.setId(new Integer(parser.getAttributeValue(0)));
    }
    if(video!=null){
     if("title".equals(name)){
      video.setTitle(parser.nextText());//获取解析器当前指向元素的下一个文本节点的值
     }
     if("timelength".equals(name)){
      video.setTime(new Integer(parser.nextText()));
     }
    }
    break;
    
   case XmlPullParser.END_TAG:
    if("video".equals(parser.getName())){
     videos.add(video);
     video = null;
    }
    break;
   }
   eventType = parser.next();
  }
  return videos;
 }
}

D.从网络上获取json数据,然后显示在手机上

public class VideoService {
 /**
  * 获取最新的视频资讯
  * @return
  * @throws Exception
  */
 
 public static List<Video> getJSONLastVideos() throws Exception{
  List<Video> videos = new ArrayList<Video>();
  String path = " http://192.168.1.100:8080/videoweb/video/list.do?format=json";
  URL url = new URL(path);
  HttpURLConnection conn = (HttpURLConnection)url.openConnection();
  conn.setReadTimeout(5*1000);
  conn.setRequestMethod("GET");
  InputStream inStream = conn.getInputStream();
  byte[] data = StreamTool.readInputStream(inStream);
  String json = new String(data);
  JSONArray array = new JSONArray(json);
  for(int i=0 ; i < array.length() ; i++){
   JSONObject item = array.getJSONObject(i);
   int id = item.getInt("id");
   String title = item.getString("title");
   int timelength = item.getInt("timelength");
   videos.add(new Video(id, title, timelength));
  }
  return videos;
 }
 
}
相关文章
|
2月前
|
XML 存储 JSON
Twaver-HTML5基础学习(19)数据容器(2)_数据序列化_XML、Json
本文介绍了Twaver HTML5中的数据序列化,包括XML和JSON格式的序列化与反序列化方法。文章通过示例代码展示了如何将DataBox中的数据序列化为XML和JSON字符串,以及如何从这些字符串中反序列化数据,重建DataBox中的对象。此外,还提到了用户自定义属性的序列化注册方法。
44 1
|
3月前
|
XML JSON 前端开发
【Web前端揭秘】XML与JSON:数据界的双雄对决,你的选择将如何改写Web世界的未来?
【8月更文挑战第26天】本文深入探讨了XML和JSON这两种广泛使用的数据交换格式在Web前端开发中的应用。XML采用自定义标签描述数据结构,适用于复杂层次数据的表示,而JSON则以键值对形式呈现数据,更为轻量且易解析。通过对两种格式的示例代码、结构特点及应用场景的分析,本文旨在帮助读者更好地理解它们的差异,并根据实际需求选择最合适的数据交换格式。
57 1
|
2月前
|
XML JSON 数据处理
C# 中的 XML 与 JSON 数据处理
在现代软件开发中,数据交换和存储需求日益增长,XML 和 JSON 成为最常用的数据格式。本文从 C# 角度出发,详细介绍如何处理这两种格式,并提供示例代码。对于 XML,我们介绍了读取、创建和写入 XML 文件的方法;对于 JSON,则展示了如何使用 Newtonsoft.Json 库进行数据解析和序列化。此外,文章还总结了常见问题及其解决方案,帮助开发者更好地应对实际项目中的挑战。
172 61
C# 中的 XML 与 JSON 数据处理
|
24天前
|
XML JSON 数据可视化
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
本文详细介绍了不同数据集格式之间的转换方法,包括YOLO、VOC、COCO、JSON、TXT和PNG等格式,以及如何可视化验证数据集。
31 1
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
|
11天前
|
网络协议 Shell 网络安全
解决两个 Android 模拟器之间无法网络通信的问题
让同一个 PC 上运行的两个 Android 模拟器之间能相互通信,出(qiong)差(ren)的智慧。
18 3
|
2月前
|
存储 缓存 编解码
Android经典面试题之图片Bitmap怎么做优化
本文介绍了图片相关的内存优化方法,包括分辨率适配、图片压缩与缓存。文中详细讲解了如何根据不同分辨率放置图片资源,避免图片拉伸变形;并通过示例代码展示了使用`BitmapFactory.Options`进行图片压缩的具体步骤。此外,还介绍了Glide等第三方库如何利用LRU算法实现高效图片缓存。
61 20
Android经典面试题之图片Bitmap怎么做优化
|
30天前
|
安全 网络安全 Android开发
深度解析:利用Universal Links与Android App Links实现无缝网页至应用跳转的安全考量
【10月更文挑战第2天】在移动互联网时代,用户经常需要从网页无缝跳转到移动应用中。这种跳转不仅需要提供流畅的用户体验,还要确保安全性。本文将深入探讨如何利用Universal Links(仅限于iOS)和Android App Links技术实现这一目标,并分析其安全性。
163 0
|
3月前
|
存储 Java 数据库
基于全志H713 Android 11:给TvSettings添加default.xml默认值
本文介绍了在全志H713 Android 11平台上为TvSettings应用添加HDMI CEC功能的默认设置值的方法,通过修改SettingsProvider的源码和配置文件来实现默认值的设置,并提供了详细的步骤和测试结果。
66 0
基于全志H713 Android 11:给TvSettings添加default.xml默认值
|
3月前
|
Java Spring 容器
彻底改变你的编程人生!揭秘 Spring 框架依赖注入的神奇魔力,让你的代码瞬间焕然一新!
【8月更文挑战第31天】本文介绍 Spring 框架中的依赖注入(DI),一种降低代码耦合度的设计模式。通过 Spring 的 DI 容器,开发者可专注业务逻辑而非依赖管理。文中详细解释了 DI 的基本概念及其实现方式,如构造器注入、字段注入与 setter 方法注入,并提供示例说明如何在实际项目中应用这些技术。通过 Spring 的 @Configuration 和 @Bean 注解,可轻松定义与管理应用中的组件及其依赖关系,实现更简洁、易维护的代码结构。
50 0
|
3月前
|
安全 网络安全 Android开发
探索安卓开发之旅:从新手到专家网络安全与信息安全:防范网络威胁,保护数据安全
【8月更文挑战第29天】在这篇技术性文章中,我们将踏上一段激动人心的旅程,探索安卓开发的世界。无论你是刚开始接触编程的新手,还是希望提升技能的资深开发者,这篇文章都将为你提供宝贵的知识和指导。我们将从基础概念入手,逐步深入到安卓开发的高级主题,包括UI设计、数据存储、网络通信等方面。通过阅读本文,你将获得一个全面的安卓开发知识体系,并学会如何将这些知识应用到实际项目中。让我们一起开启这段探索之旅吧!