前面介紹的幾種存儲都是將數據存儲在本地設備上,除此之外,還有一種存儲(獲取)數據的方式,通過網絡來實現數據的存儲和獲取。我們可以調用WebService返回的數據或是解析HTTP協議實現網絡數據交互。
【以下案例轉載自http://blog.csdn.net/liranke/article/details/7670595】
下面是一個通過地區名稱查詢該地區的天氣預報,以POST發送的方式發送請求到webservicex.net站點,訪問WebService.webservicex.net站點上提供查詢天氣預報的服務。
package com.android.weather;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import android.app.Activity;
import android.os.Bundle;
public class MyAndroidWeatherActivity extends Activity {
//定義需要獲取的內容來源地址
private static final String SERVER_URL =
"http://www.webservicex.net/WeatherForecast.asmx/GetWeatherByPlaceName";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
HttpPost request = new HttpPost(SERVER_URL); //根據內容來源地址創建一個Http請求
// 添加一個變量
List<NameValuePair> params = new ArrayList<NameValuePair>();
// 設置一個地區名稱
params.add(new BasicNameValuePair("PlaceName", "NewYork")); //添加必須的參數
try {
//設置參數的編碼
request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
//發送請求並獲取反饋
HttpResponse httpResponse = new DefaultHttpClient().execute(request);
// 解析返回的內容
if(httpResponse.getStatusLine().getStatusCode() != 404){
String result = EntityUtils.toString(httpResponse.getEntity());
System.out.println(result);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
記得在配置文件中設置訪問網絡權限:
<uses-permission android:name="android.permission.INTERNET" />