Android應用開發教程之網絡連接。
網絡連接
在Android的應用中,需要進行網絡連接的時候,需要首先設置網絡的權限。
// AndroidManifest.xml
進行網絡訪問,需要創建一個URL對象,並使用
Http協議將其發送出去。構建一個
URL對象可以借助
Android的
Uri對象。
將base URL傳入到
URI對象中 之後使用
appendQueryParameter添加query的選項 使用
build方法,得到最終的
URI對象 將
URI對象傳入
URL對象中,得到最終的
URL對象
Uri uri = Uri.parse(FORECAST_BASE_URL).buildUpon()
.appendQueryParameter(QUERY_PARAM, locationQuery)
.appendQueryParameter(FORMAT_PARAM, format)
.appendQueryParameter(UNITS_PARAM, units)
.appendQueryParameter(DAYS_PARAM, Integer.toString(numDays))
.build();
URL url = null;
try {
url = new URL(uri.toString());
} catch (MalformedURLException e) {
e.printStackTrace();
}
進行網絡訪問的操作,必須要在子線程中進行,因為Android的主線程隻負責頁面的更新,相應用戶的操作,需要在17ms內完成一個更新操作,如果一個操作時間過長,例如,網絡操作,就會被認為是應用沒有響應,會被Android強制關閉。
這裡就需要一個新的類AsyncTask。
AsyncTask隻有doInBackground和
publicProgress方法是在新線程中執行,其他的方法還是在主線程中調用。
Menu
Menu
添加menu,在res文件夾下,添加一個menu文件夾,並添加menu的資源文件。所有的menu資源使用Java進行訪問的時候,通過R.menu.xxx進行訪問。
添加menu資源以後,就需要將其放入到activity之中。需要重寫onCreateOptionsMenu方法,這個方法返回一個
bool值,用來控制menu是否展示在界面上。使用
getMenuInflater().inflate(menu's id, menu)將
menu資源放到activity中。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// the resourse of menu is in R.menu
getMenuInflater().inflate(R.menu.forecast, menu);
return true;
}
之後需要將
menu的選擇事件。通過傳入的
Item的
id來確定當前的處理事件。
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId() == R.id.action_refresh){
mWeatherTextView.setText("");
loadWeatherData();
}
return super.onOptionsItemSelected(item);
}