Android面试题:网络访问


1. Android中如何访问网络

Android提供了org.apache.http.HttpClientConnection和java.net.HttpURLConnection两个连接网络对象。使用哪个都行,具体要看企业领导的要求了。 除此之外一般我比较喜欢使用xUtils中的HttpUtils功能,该模块底层使用的就是org.apache.http.client.HttpClient,使用起来非常方便。

2. 如何解析服务器传来的JSON文件

在Android中内置了JSON的解析API,在org.json包中包含了如下几个类:JSONArray、JSONObject、JSONStringer、JSONTokener和一个异常类JSONException。

JSON解析步骤

  1. 读取网络文件数据并转为一个json字符串
InputStream in = conn.getInputStream();       
String jsonStr = DataUtil.Stream2String(in);//将流转换成字符串的工具类
  1. 将字符串传入相应的JSON构造函数中

  2. 通过构造函数将json字符串转换成json对象

JSONObject  jsonObject = new JSONObject(jsonStr)
  • 通过构造函数将json字符串转换成json数组:
JSONArray array = new JSONArray(jsonStr);
  1. 解析出JSON中的数据信息:

  2. 从json对象中获取你所需要的键所对应的值

JSONObject json=jsonObject.getJSONObject("weatherinfo");       
Stringcity = json.getString("city");       
Stringtemp = json.getString("temp")
  • 遍历JSON数组,获取数组中每一个json对象,同时可以获取json对象中键对应的值
for(int i = 0; i < array.length(); i++) {              
    JSONObject obj = array.getJSONObject(i);              
    Stringtitle=obj.getString("title");              
    Stringdescription=obj.getString("description");       
}

3. 生成JSON对象和数组

生成JSON

方法1、创建一个map,通过构造方法将map转换成json对象

Map<String,Object> map = new HashMap<String, Object>();       
map.put("name","zhangsan");       
map.put("age",24);       
JSONObjectjson = new JSONObject(map);

方法2、创建一个json对象,通过put方法添加数据

JSONObjectjson=new JSONObject();       
json.put("name","zhangsan");       
json.put("age",24);

生成JSON数组

创建一个list,通过构造方法将list转换成json对象

Map<String,Object> map1 = new HashMap<String, Object>();       
map1.put("name","zhangsan");       
map1.put("age",24);       
Map<String,Object> map2 = new HashMap<String, Object>();       
map2.put("name","lisi");       
map2.put("age",25);       
List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();       
list.add(map1);       
list.add(map2);       
JSONArrayarray=new JSONArray(list);       
System.out.println(array.toString());

4. 如何解析服务器传来的XML格式数据

Android为我们提供了原生的XML解析和生成支持。

XML解析

  • 获取解析器: Xml.newPullParser()
  • 设置输入流: setInput()
  • 获取当前事件类型: getEventType()
  • 解析下一个事件, 获取类型: next()
  • 获取标签名: getName()
  • 获取属性值: getAttributeValue()
  • 获取下一个文本: nextText()
  • 获取当前文本: getText()

5种事件类型: START_DOCUMENT, END_DOCUMENT, START_TAG,END_TAG, TEXT

示例代码:

public List<Person>getPersons(InuptStream in){  
       XmlPullParserparser=Xml.newPullParser();//获取解析器
       parser.setInput(in,"utf-8");
       for(inttype=){   //循环解析
       }      
}

XML生成

  • 获取生成工具: Xml.newSerializer()
  • 设置输出流: setOutput()
  • 开始文档: startDocument()
  • 结束文档: endDocument()
  • 开始标签: startTag()
  • 结束标签: endTag()
  • 属性: attribute()
  • 文本: text()

示例代码:

XmlSerializer serial=Xml.newSerializer();//获取xml序列化工具
serial.setOuput(put,"utf-8");
serial.startDocument("utf-8",true);
serial.startTag(null,"persons");
for(Person p:persons){
    serial.startTag(null,"persons");      
    serial.attribute(null,"id",p.getId().toString());
    serial.startTag(null,"name");   
    serial.attribute(null,"name",p.getName().toString());
    serial.endTag(null,"name");
    serial.startTag(null,"age");      
    serial.attribute(null,"age",p.getAge().toString());
    serial.endTag(null,"age");
    serial.endTag(null,"persons");      
}

5. 如何从网络上加载一个图片显示到界面

可以通过BitmapFactory.decodeStream(inputStream);方法将图片转换为bitmap,然后通过imageView.setImageBitmap(bitmap);将该图片设置到ImageView中。这是原生的方法,还可以使用第三方开源的工具来实现,比如使用SmartImageView作为ImageView控件,然后直接设置一个url地址即可。也可以使用xUtils中的BitmapUtils工具。

6. 如何播放网络视频

除了使用Android提供的MediaPlayer和VideoView外通常还可以使用第三方开源万能播放器,VitamioPlayer。该播放器兼容性好,支持几乎所有主流视频格式。

results matching ""

    No results matching ""