標籤

2015年11月7日 星期六

Ubuntu install on virtualbox

最近想學習一些PHP,但既然是網站又不想只是架在windows下,所以這次就開始學習如何使用virtualbox這個虛擬機器來架設個沒玩過的Ubuntu,因為先前有學習過VMWare跟這個相當類似想必有使用過的人都可以輕鬆上手。

安裝來源在google上應該很快就找到且上手這裡就直接開始灌Ubuntu

Ubuntu的iso檔可以在這裡下載
http://www.ubuntu-tw.org/modules/tinyd0/

首先要建立虛擬機器並輸入名稱以及類型和版本

選取立刻建立




這裡如果沒有要攜帶到別的應用軟體上就用預設即可

這裡如果硬碟容量足的話就選動態配制吧

這裡給他8G以上即可,但是我還是很阿撒立的給他30G

這裡比較要說明一下,這裡上面建立完要選曲你建立的虛擬機器
找到他的設定值選取他的存放裝置
接下來這個動做你可以把他想成你正在放入你的重灌光碟進去你的電腦

選擇你下載的iso的位址開啟你的虛擬電腦就會進去重灌軟體了,以下為安裝畫面

跟著下面做應該不會太難







輸入你要設定的帳密


完成後就像這樣就可以使用這精美的畫面

2015年11月6日 星期五

SQLite基本應用--寫入、讀取

Android系統內建「SQLite」資料庫,它是一個開放的小型資料庫,儲存資料的數量是根據裝置的儲存空間決定的,今天來撰寫個基本的小程式來熟悉資料庫的讀寫。

這次也順便嘗試button事件另一種寫法,先前在button基礎練習篇有看到那時的寫法是用一個Listener來偵測button有沒有被按下,但有些書上還會要我們在mail主檔上的button加入

android:onClick=這個描述既然都有Listener來偵測那幹嘛還要加入這個描述就算拿掉指令也OK,其實這是兩種寫法

1.用Listener去偵測事件
2.直接用button的佈局檔來描述


其實兩種都能達成我們的目的
這一次我們就用第二種我認為比較簡單的方法寫看看


上圖為這次的佈局兩個button和一個Textview




這次我們在布局檔中加上onclick描述


然後我們要先來學習如何創建資料庫(以下稱為DB),在oncreate的階段我們就必須把DB創建完成,
創建一個資料表(以下稱為TB),欄位為name、phone、mail


db=openOrCreateDatabase(dbname, Context.MODE_PRIVATE,null);
//建立資料庫名稱模式為私人模式String createTable="CREATE TABLE IF NOT EXISTS "+
 tbname+
 "(name VARCHAR(32),"+
 "phone VARCHAR(16),"+
 "mail VARCHAR(64))";
db.execSQL(createTable);//創建並定義資料表架構


public void readData(View view){//負責讀取
 String str="";
 displayData("I am read data");
 Cursor cursor=db.rawQuery("SELECT * FROM "+tbname,null);
 if(cursor.getCount()==0){
 displayData("tb is null");
 return;
 }
 if(cursor.moveToFirst()){
 do{
 str+="name:"+ cursor.getString(0)+"\n";
 str+="phone:"+ cursor.getString(1)+"\n";
 str+="mail:"+ cursor.getString(2)+"\n";
 str +="\n";
 }while (cursor.moveToNext());//逐行讀取
 }
 displayData(str);//顯示資料
 }

public void writeData(View view){
 displayData("I am write data");
 addData("linrichard", "0980416449", "linrichard@yahoo.com.tw");
}

private void displayData(String message) {
 TextView print=(TextView) findViewById(R.id.textView);
 print.setText(message);
}

private void addData(String name, String phone, String mail) {
 ContentValues hm =new ContentValues();
 hm.put("name",name);
 hm.put("phone",phone);
 hm.put("mail",mail);

 db.insert(tbname,null,hm);


}




上面可以看到writeData和readData的傳入參數都是設為view這樣就能完成事件連結,這裡分成讀取跟寫入


讀取:用cursor物件下達查詢指令如果裡面有資料則移動到第一筆用do-while逐行讀出並在display函數負責顯示

寫入:用ContentValues("key",value)將資料insert進資料庫中


以下為結果畫面

資料表為空則顯示tb is null
寫入




讀取




































如果要清理資料庫資料可在App管理中clear data


2015年11月2日 星期一

Notification通知訊息基本應用-以簡易登入訊息實作

Notification通知訊息

通知訊息幾乎是每個App都有的功能這一次我們就以登入訊息實作的方式來練習,首先登入畫面的部份我們可以使用android studio內建的模板來用


























建立畫面如下





























用這個範例的原因是因為google有許多的模板可以使用可藉由這個練習來閱讀原始碼並學習怎麼串接別人的程式

在主程序中通常都是以oncreate起頭所以從這開始找會比省事
在這之中可以看到這一行
Button mEmailSignInButton = (Button) findViewById(R.id.email_sign_in_button);mEmailSignInButton.setOnClickListener(new OnClickListener() {
    @Override    public void onClick(View view) {
        attemptLogin();    }
});

根據前一篇Button介紹-以BMI計算實作中我們可以知道這就是button的啟動listener
可以在這直接寫入Notification語法又或者可以繼續追蹤下去

直到追蹤到符合流程的所在地
照理來說應該事先判斷帳密有無錯誤完後才發送訊息
 if (cancel) {

// There was an error; don't attempt login and focus the first

// form field with an error.

focusView.requestFocus();

} else {

// Show a progress spinner, and kick off a background task to

// perform the user login attempt.

showProgress(true);

mAuthTask = new UserLoginTask(email, password);\\驗證帳密

mAuthTask.execute((Void) null);
}



所以寫在else中應該是符合邏輯的
final int notifyID = 1; // 通知的識別號碼

final Notification.InboxStyle inboxStyle = new Notification.InboxStyle(); // 建立InboxStyle

final EditText emmsg=(EditText) findViewById(R.id.email);

final String[] lines = new String[] { "您剛登入了"+emmsg.getText() }; // InboxStyle要顯示的字串內容

inboxStyle.setBigContentTitle("Welcome to login :"); // 當InboxStyle顯示時,用InboxStyle的setBigContentTitle覆蓋setContentTitle的設定

inboxStyle.setSummaryText("更多新訊息"); // InboxStyle的底部訊息

for (int i = 0; i < lines.length; i++) {

inboxStyle.addLine(String.format("%d: %s", i + 1, lines[i])); // 將字串加入InboxStyle

}



final NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); // 取得系統的通知服務

final Notification notification = new Notification.Builder(getApplicationContext()).setSmallIcon(R.mipmap.ic_launcher).setContentTitle("內容標題").setContentText("內容文字").setStyle(inboxStyle).build(); // 建立通知

notificationManager.notify(notifyID, notification); // 發送通知



如果說要照這樣解讀的話應該就能寫的出來

Notification主要要先給予他一組識別編號ID,接著建立inboxstyle物件,這裡emmsg變數是用來接收email欄位的所以登入後會產生登入帳號etBigContentTitle則是可以對內容標題做修改,在用一個for迴圈做字串加入,最後取得服務通知、建立通知並發送及可



最後的效果如下,但是點下通知是沒有效果的,下一回在來寫如何點下通知會產生效過