Android网络编程

来源:互联网 发布:网络电子游戏官网 编辑:程序博客网 时间:2024/04/30 14:38
1.服务器和游览器遵循http协议。(http是对socket的再次封装)


2.基于http开发的网络通讯。


3.Android访问网络和Java访问网络的区别,java更底层,android做了更高的封装。


4.Android客户端访问本地的服务器地址为10.0.2.2。


5.使用webView视图显示网页


6.get和post请求,获取数据方式不一样。
  get请求,将请求数据放在url中。使用baidu搜索做测试。   不安全
  post请求,将请求数据放在socket中进行传输。登录邮箱。  安全




安卓HTTP请求分为两种:
[1]HttpUrlConnection (官方推荐使用)
[2]HttpClient       (功能很多,但不方便操作)


安卓和JAVA应用开发少不了要提交HTTP请求,而基本上目前有两个实现方式:HttpUrlConnection(即URL.openConnection)和HttpClient。


1.HttpClient是apache的开源实现,而HttpUrlConnection是安卓标准实现,安卓SDK虽然集成了HttpClinet,但官方支持的却是HttpUrlConnection。
2.HttpUrlConnection直接在系统层面做了缓存策略处理,加快重复请求的速度。
3.安卓开发博客上也强调,2.2以后的安卓都应该用HttpUrlConnection。
4.HttpUrlConnention速度快。


package com.farsight.httpget;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.MalformedURLException;import java.net.URL;import java.net.URLConnection;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import android.app.Activity;import android.os.AsyncTask;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.EditText;import android.widget.TextView;public class Android_35_HttpGetActivity extends Activity implementsOnClickListener {EditText et;TextView tv;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);findViewById(R.id.button1).setOnClickListener(this);et = (EditText) findViewById(R.id.editText1);tv = (TextView) findViewById(R.id.textView1);}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubString word = et.getText().toString();new AsyncTask<String, Void, String>() {@Overrideprotected String doInBackground(String... params) {// TODO Auto-generated method stubString explain = "";try {//网址URL url = new URL(params[0]);//打开网址,获取URLConnection对象URLConnection conn = url.openConnection();//读取从服务器请求的数据InputStream is = conn.getInputStream();InputStreamReader isr = new InputStreamReader(is);BufferedReader br = new BufferedReader(isr);//字符串缓冲   StringBuffer sb = new StringBuffer();String s = null;while((s = br.readLine()) != null){sb.append(s);}Log.e("Test", sb.toString());explain = readJson(sb.toString());} catch (MalformedURLException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return explain;}@Overrideprotected void onPostExecute(String result) {// TODO Auto-generated method stubsuper.onPostExecute(result);tv.setText(result);}}.execute("http://fanyi.youdao.com/openapi.do?keyfrom=sdfsdfs3333&key=1799477203&type=data&doctype=json&version=1.1&q="+word);}private String readJson(String json){StringBuffer sb = new StringBuffer();try {JSONObject rootObject = new JSONObject(json);JSONObject basicObject = rootObject.getJSONObject("basic");JSONArray explainsArray = basicObject.getJSONArray("explains");for (int i = 0; i < explainsArray.length(); i++) {String explains = explainsArray.getString(i);sb.append(explains+"。\n");Log.e("Test", explains);}//解析webJSONArray webArray = rootObject.getJSONArray("web");for (int i = 0; i < webArray.length(); i++) {JSONObject webOject = webArray.getJSONObject(i);JSONArray valueArray = webOject.getJSONArray("value");for (int j = 0; j < valueArray.length(); j++) {String explains = valueArray.getString(j);sb.append(explains+",");}sb.replace(sb.length()-1, sb.length(), "。\n");//sb.delete(sb.length()-1, sb.length());//sb.append("\n");}} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();}return sb.toString();}}





1.HttpGet
  [1]联网属于耗时操作,使用异步任务读取互联网数据。
  [2]定义URL对象 (注意是URL,存放网址的对象)
  [3]URLConnection c = url.openConnection()方法得到互联网连接
  [4]InputStream is = connection.getInputStream();
  [5]InputStreamReader isr = new InputStreamReader(is, "utf-8");
  [6]BufferdeReader br = new BufferedReader(isr);


2.HttpPost
  [1]Post和Get的区别,Post请求的数据内容不放在地址中。Get方式通过URL传递数据。
  [2]使用HttpURLConnection 得到输出流,将请求的内容写入。
  [3]setDoOutput(true) 打开写的权限
  [4]setRequestMethod("POST") 设定请求方式为POST


有道词典
http://fanyi.youdao.com/




{


"translation":["中国"],
"basic":{"us-phonetic":"'tʃaɪnə","phonetic":"'tʃaɪnə","uk-phonetic":"'tʃaɪnə","explains":["n. 瓷器","adj. 瓷制的"]},
"query":"china",
"errorCode":0,
"web":[{"value":["中国","中华人民共和国","瓷器"],"key":"China"},{"value":["中国国际航空公司","中国国际航空","中国国航"],"key":"Air China"},{"value":["中国大陆","大陆中国","大陆地区"],"key":"Mainland China"}]


}


Json文件
   key-value
   key类型:  String
   value类型:{  } Object类型
              [  ] 数组类型 
                   String类型
                   数值类型(int, float)
                   
[1]JSON文件格式:{"info": {"name":"jack", "age":20, "salary":1000, "爱好":["看电影", "打代码","跑步"]}}


  <info>
        <name>jack</name>
        <age>20<age>
        <salary>1000</salary>
        <爱好>
              <String>看电影</string>
              <String>打代码</string>
              <String>跑步 </string>
        </爱好>
  </info>




[2]JSON概念: javaScript对象表示法(JavaScript Object Notation) JSON属于轻量级文本数据交换格式
              JSON独立于平台和语言 JSON具有自我描述性,更易理解
              类似xml,比xml更小,更快,更易解析


[3]JSON语法: 数据保存在key:value(键值对)


[4]JSON数据类型:JSON的值(value)可以是: 数字(整型和浮点型) 字符串(用双引号) 对象(在花括号中) 数组(在方括号中) 


[5]使用java解析JSON文件
   JSONObject    --- json文件中的Object类型
   JSONArray     --- json文件中的数组类型
0 0