Android應用開發教程之網絡連接

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,在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);
}

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *