您的位置:首页 > 理论基础 > 计算机网络

Android网络编程

2015-08-09 20:46 585 查看
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 implements
OnClickListener {

EditText et;
TextView tv;

/** Called when the activity is first created. */
@Override
public 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);
}

@Override
public void onClick(View v) {
// TODO Auto-generated method stub

String word = et.getText().toString();
new AsyncTask<String, Void, String>() {

@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub

String 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 block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return explain;
}

@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.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);
}

//解析web
JSONArray 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 block
e.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文件中的数组类型
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: