2012年1月29日 星期日

【Android】Activity間的切換


Intent 類別的介紹,Intent可以幫助我們在不同的Activity中切換以及資料的傳遞。

Intent你可以把它當作是一個信件,它告訴了目前這個Activity它的下一個Activity是誰

以及它所包含要傳遞的資料。以下就來做一個簡單的Activity之間的切換:

以下範例以一個FirstActivity.java 以及SecondActivity.java 為例

他們所對應的 layout main.xml以及second.xml

main.xml中有一個按鈕,按下去會前往SecondActivity,而在second.xml也有一個按鈕,

按下去會返回FirstActivity,以這樣的動作來解釋Activity間的切換。
首先是 FirstActivity.java


package org.sample.android;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

/**
 * @author allen
 *
 */
public class FirstActivity extends Activity 
{
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  Button button = (Button)findViewById(R.id.button_id_first);
  button.setOnClickListener(new OnClickListener(){

   public void onClick(View v) {
    // TODO Auto-generated method stub
    
    Intent intent = new Intent();
    intent.setClass(FirstActivity.this, SecondActivity.class);
    /* 以上兩行可以寫成 Intent intent = new Intent(FirstActivity.this, SecondActivity.class)
     * 第一個參數是目前的Activity, 第二個參數是要前進的下一個Activity 
     * */
    startActivity(intent);
    finish(); //這行等於FirstActivity.this.finish();
   }
   
  });
  
 }
 
}

2012年1月28日 星期六

【Android】CREATE TABLE android_metadata failed

關於 CREATE TABLE android_metadata failed 這一連串的例外

首先  一開始每支程式都好好的,莫名的出現這個例外

但是並不是錯誤 每個 Project 的 Activity 都可以正常啟動

但是一進去 AVD 畫面並載入成功後  會一直跳出例外訊息

去 DDMS 裡面看  大約的訊息類似如下


01-28 15:51:20.502: E/SqliteDatabaseCpp(139): CREATE TABLE android_metadata failed
01-28 15:51:20.622: D/PowerManagerService(78): bootCompleted
01-28 15:51:20.672: E/SQLiteDatabase(139): Failed to open the database. closing it.
01-28 15:51:20.672: E/SQLiteDatabase(139): android.database.sqlite.SQLiteCantOpenDatabaseException: unable to open database file
.......

一長串的問題  好像都是關於一個 android_metadata 這個 Table 所造成的

不過我都還沒用到 SqlLite 就出現這種問題  也不太合理

不解決還不行  因為每次在AVD中關掉錯誤警告的視窗後,沒幾秒就會一直跳出來。。。

最後我的解決辦法是

在 Eclipse 中上方工具列 > Window > AVD manager > 點選你目前使用的虛擬機
                                          > 按下右下方的 Start > 勾選 Wipe user data 這個選項
                                          > 最後 AVD跑出來的結果  果真沒那個煩死人的錯誤訊息了

最後 在作一次上述動作  這次取消勾選 Wipe user data 這個選項

就大功告成了




2012年1月26日 星期四

【Android】Activity的生命週期

可以用上面這張圖簡單解釋 Activity 的四個主要狀態

這對開發者而言,我們可以決定在什麼狀態作什麼事情,注意我們所撰寫的每一個Activity有繼承(extends)一個Activity類別,也因此我們可覆寫很多狀態的方法,例如以下:

publc void onCreate(Bundle savedInstanceState);  //initial > onStart()
publc void onStart();   //stop > active
publc void onResume();   //pause > active
publc void onPause();   //active > pause
publc void onStop();   //active > stop
publc void onDestroy();  //active > killed

2012年1月25日 星期三

【Android】Activity介紹


Activity Android的基本處理單元,絕大多數的Activity都會有一個對應的頁面

在這裡所謂的頁面就是User在行動裝置上所看到的畫面(View)

回顧上一章的 Hello World程式:【Android】Hello World 範例  



我們在 /src org.sample.android.activity目錄下有一個Activity HelloWorldActivity.java 

它所對應的View即是 /res/layout/main.xml

AndroidManifest.xml 中可以看到如下這一段的XML標籤
<activity
        android:name=".HelloWorldActivity"
        android:label="@string/app_name" > <!— app_name 會註冊在 /res/values/strings.xml -->
        <intent-filter
            <action android:name="android.intent.action.MAIN" />
           <!— 以下這行指定此Activity為預設執行的主要Activity
  所以當你啟動虛擬機的時候一定會看到這支Activity所對應的View-->
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
</activity>


接著來稍微改寫 HelloWorldActivity以及它所對應的 main.xml,如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <!- 如果要在此ViewActivity中找到該元件,需要給它一個id
         android:id=”@+id/<name>” 如此會在R.java中產生一個對應的程式
         R.id.<name> 透過這行程式就可以找到你要的元件-->
    <TextView android:id="@+id/TextView01"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />
    
    <Button android:id="@+id/Button01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button_text" />
</LinearLayout>

fill_parent:意指將該元件填滿它的父元件
wrap_content:意指該元件會完全包住它的所有內容(元件)

接著來看看 HelloWorldActivity.java 

2012年1月24日 星期二

【Android】Hello World 範例


*   開啟Eclipse > 上方功能列 > File > Project > 選擇Android Project > Next

Project Name 欄為內輸入Hello_World > Next > 勾選SDK > Next


2012年1月23日 星期一

【Android】環境配置


        1.    開發環境檢查
*   Microsoft Windows XP(32 bits) /Microsoft Window 7 (32/64 bits) OS
*   Mac OS X 10.5.8 或更新版本(x86)
*   Linux Ubuntu
*   JDK 6.0 以上
*   Eclipse IDE 3.7 (Indigo)

2.    安裝Android 3.2Eclipse IDEAndroid Plugin
*   下載並安裝 Android SDK and AVD manager (http://developer.android.com/sdk/index.html)

*   上一步驟,我是選擇installer_r16-windows.exe (Recommended) 由執行檔來安裝在執行安裝過程中,他會先檢查你的電腦內是否有安裝JDK,如果電腦裡沒JDK則務必先安裝JDK。之後你只要選擇你要安裝的路徑即可。

*   安裝完成後可以開啟SDK Manager,並找到Android 3.2(API13) 這個項目並勾選 SDK PlatformSamples for SDKGoogle APIs by Google Inc.。並按右下方的 Install packages…



  *   安裝成功之後應該如下圖所示: