由於研究的關係,平日在摸索vmware主要都在win下的作業系統去執行不同的作業環境,若要練習在ubuntu下去裝vm相信有些許人根本就沒用過,反而會覺得我用的好好的,用win就可以vm了不是嗎?
不過基於網路上評價ubuntu在當server時較為穩定,若以該環境下vm其他作業系統,應該有較佳的穩定性吧?
因此,在這樣的想法下,試了一下!!!!
當中,不免俗有許多的困難啦。畢竟不太熟ubuntu!!!
不過,最後還是有把過程弄下來,並且成功了~~在此分享過程,以供自己以後不要再忘記嚕~
1.請至vmware上,下載VMware-Player-4.0.3-703057.i386.bundle,並將下載後的檔案放至home/username folder 資料夾下
2.開啟命令輸入字窗輸入 sudo ./VMware-Player-4.0.3-703057.i386.bundle
3.安裝完成啟動VMware
參考資料來源:ubuntu安裝資訊
2012年6月10日 星期日
2012年5月7日 星期一
2012年5月5日 星期六
利用jsp與資料庫連線demo-環境佈署
學習重點:
(1)利用jsp來與Microsoft SQL Server進行連線設定
(2)JDBC的語法使用方式
(3)基本的新增、刪除、修改功能介紹
1.首先,先下載jdbc
2.將該專案放在eclipse開發專案的jsp中的lib下
3.環境佈署完成
4.示範
index-demo
(1)利用jsp來與Microsoft SQL Server進行連線設定
(2)JDBC的語法使用方式
(3)基本的新增、刪除、修改功能介紹
1.首先,先下載jdbc
2.將該專案放在eclipse開發專案的jsp中的lib下
3.環境佈署完成
4.示範
index-demo
2012年4月27日 星期五
教你使用FeedBurner並製作個人RSS
FeedBurner網址: http://feedburner.google.com
用途: 讓你的RSS具有更多功能
影音說明: http://www.youtube.com/watch?v=m6eiuPMk5Ug
步驟一
至:「http://feedburner.google.com/fb/a/switchlang?forward=http%3A%2F%2Ffeedburner.google.com%2Ffb%2Fa%2Fmyfeeds&locale=zh_tw」
步驟二
步驟三
獲得個人專屬RSS,例如
「http://feeds.feedburner.com/pixnet/lin-knowledge」
步驟四
以Pixnet為例
新增版位 後 寫入語法
步驟五
語法觀念:
步驟六
完成
用途: 讓你的RSS具有更多功能
影音說明: http://www.youtube.com/watch?v=m6eiuPMk5Ug
步驟一
至:「http://feedburner.google.com/fb/a/switchlang?forward=http%3A%2F%2Ffeedburner.google.com%2Ffb%2Fa%2Fmyfeeds&locale=zh_tw」
步驟二
步驟三
獲得個人專屬RSS,例如
「http://feeds.feedburner.com/pixnet/lin-knowledge」
步驟四
以Pixnet為例
新增版位 後 寫入語法
步驟五
語法觀念:
步驟六
完成
2012年4月20日 星期五
利用google webmasters來查看流量
利用google網路工具-google webmasters
得知google處理你網站的狀況
並了解網站、部落格的文章、內容流量的吸引程度
和得知整個網站流量的紀錄
未來對於搜尋引擎的行銷的觀念,可說是基礎的學習工具之一
可利用其中 google Sitemap的工具,去進行網站或blog地圖提交的動作
讓google可以更順利的抓取你網站的內容
主動的提交你網站的地圖供google爬取,比呆呆的等google來抓取你的網站還要有效率
得知google處理你網站的狀況
並了解網站、部落格的文章、內容流量的吸引程度
和得知整個網站流量的紀錄
未來對於搜尋引擎的行銷的觀念,可說是基礎的學習工具之一
可利用其中 google Sitemap的工具,去進行網站或blog地圖提交的動作
讓google可以更順利的抓取你網站的內容
主動的提交你網站的地圖供google爬取,比呆呆的等google來抓取你的網站還要有效率
學習使用google analytics
利用google analytics來幫助你觀看網路流量
對於偵測搜尋引擎的抓取與使用人數的造訪提供一個信任的工具
網路上有許多介紹關於google analytics的介紹
不妨有興趣的朋友可以去google一下,相信有很多資訊可以供參考
google analytics簡單畫面呈現如下:
從造訪量、人數訪問上我們可以先進行簡單的了解,並且得知你部落格或相關網頁的一些流量
以作為未來調整網站架設、blog寫作相關方向
不妨學習一下google analytics操作工具!
對於偵測搜尋引擎的抓取與使用人數的造訪提供一個信任的工具
網路上有許多介紹關於google analytics的介紹
不妨有興趣的朋友可以去google一下,相信有很多資訊可以供參考
google analytics簡單畫面呈現如下:
從造訪量、人數訪問上我們可以先進行簡單的了解,並且得知你部落格或相關網頁的一些流量
以作為未來調整網站架設、blog寫作相關方向
不妨學習一下google analytics操作工具!
2012年4月18日 星期三
android範列程式-密碼認證清除按鈕
學習重點:
(1)利用button清除字串的方式
(2)
可以自動抓取該java程式名稱,而不用自動寫入該程式名稱
程式範列如下:
(1)利用button清除字串的方式
(2)
Toast toast=Toast.makeText(ATMToast1Activity.this, "提示文字內容", Toast.LENGTH_LONG);效果等同
Toast toast=Toast.makeText(getApplicationContext(), "提示文字內容", Toast.LENGTH_LONG);利用getApplicationContext()
可以自動抓取該java程式名稱,而不用自動寫入該程式名稱
程式範列如下:
package ATMToast1.com; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class ATMToast1Activity extends Activity { //建立全域變數 private EditText edtATM; private Button btnN1, btnN2, btnN3, btnBack; private Button btnN4, btnN5, btnN6, btnOK; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //取得介面元件 edtATM=(EditText)findViewById(R.id.edtATM); btnN1=(Button)findViewById(R.id.btnN1); btnN2=(Button)findViewById(R.id.btnN2); btnN3=(Button)findViewById(R.id.btnN3); btnN4=(Button)findViewById(R.id.btnN4); btnN5=(Button)findViewById(R.id.btnN5); btnN6=(Button)findViewById(R.id.btnN6); btnBack=(Button)findViewById(R.id.btnBack); btnOK=(Button)findViewById(R.id.btnOK); //設定共用事件 btnN1.setOnClickListener(listener); btnN2.setOnClickListener(listener); btnN3.setOnClickListener(listener); btnN4.setOnClickListener(listener); btnN5.setOnClickListener(listener); btnN6.setOnClickListener(listener); btnBack.setOnClickListener(listener); btnOK.setOnClickListener(listener); } private Button.OnClickListener listener=new Button.OnClickListener() { @Override public void onClick(View v) { switch(v.getId()) { case R.id.btnN1: //按 1 鈕 displayATM("1"); break; case R.id.btnN2: //按 2 鈕 displayATM("2"); break; case R.id.btnN3: //按 3 鈕 displayATM("3"); break; case R.id.btnN4: //按 4 鈕 displayATM("4"); break; case R.id.btnN5: //按 5 鈕 displayATM("5"); break; case R.id.btnN6: //按 6 鈕 displayATM("6"); break; case R.id.btnBack: //按 清除 鈕 String str=edtATM.getText().toString(); if(str.length()>0) { str=str.substring(0, str.length()-1); edtATM.setText(str); } break; case R.id.btnOK: //按 確定 鈕 str=edtATM.getText().toString(); if(str.equals("123456")) { Toast toast=Toast.makeText(ATMToast1Activity.this, "密碼正確,歡迎使用提款功能!", Toast.LENGTH_LONG); toast.show(); } else { Toast toast=Toast.makeText(getApplicationContext(), "密碼錯誤,請重新輸入。", Toast.LENGTH_LONG); toast.show(); edtATM.setText(""); } break; } } }; private void displayATM(String s) { String str=edtATM.getText().toString(); edtATM.setText(str + s); } }
android範列程式-數字按鈕事件
學習重點:
(1)利用TableLayout進行版面配置,優點是簡潔有序。
(2)android:layout_span進行main.xml排版跨欄方式。
TableLayout版面配置
畫面呈現結果
額外補充版面排置方式(1)
額外補充版面排置方式(2)
(1)利用TableLayout進行版面配置,優點是簡潔有序。
(2)android:layout_span進行main.xml排版跨欄方式。
TableLayout版面配置
畫面呈現結果
package ATMInput.com; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; public class ATMInputActivity extends Activity { //建立全域變數 private EditText edtATM; private Button btnN1, btnN2, btnN3; private Button btnN4, btnN5, btnN6; private Button btnN7, btnN8, btnN9; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //取得介面元件 edtATM=(EditText)findViewById(R.id.edtATM); btnN1=(Button)findViewById(R.id.btnN1); btnN2=(Button)findViewById(R.id.btnN2); btnN3=(Button)findViewById(R.id.btnN3); btnN4=(Button)findViewById(R.id.btnN4); btnN5=(Button)findViewById(R.id.btnN5); btnN6=(Button)findViewById(R.id.btnN6); btnN7=(Button)findViewById(R.id.btnN7); btnN8=(Button)findViewById(R.id.btnN8); btnN9=(Button)findViewById(R.id.btnN9); //設定共用事件 btnN1.setOnClickListener(listener); btnN2.setOnClickListener(listener); btnN3.setOnClickListener(listener); btnN4.setOnClickListener(listener); btnN5.setOnClickListener(listener); btnN6.setOnClickListener(listener); btnN7.setOnClickListener(listener); btnN8.setOnClickListener(listener); btnN9.setOnClickListener(listener); } private Button.OnClickListener listener=new Button.OnClickListener() { @Override public void onClick(View v) { switch(v.getId()) { case R.id.btnN1: //按 1 鈕 displayATM("1"); break; case R.id.btnN2: //按 2 鈕 displayATM("2"); break; case R.id.btnN3: //按 3 鈕 displayATM("3"); break; case R.id.btnN4: //按 4 鈕 displayATM("4"); break; case R.id.btnN5: //按 5 鈕 displayATM("5"); break; case R.id.btnN6: //按 6 鈕 displayATM("6"); break; case R.id.btnN7: //按 7 鈕 displayATM("7"); break; case R.id.btnN8: //按 8 鈕 displayATM("8"); break; case R.id.btnN9: //按 9 鈕 displayATM("9"); break; } } }; private void displayATM(String s) { String str=edtATM.getText().toString(); edtATM.setText(str + s); } }
額外補充版面排置方式(1)
額外補充版面排置方式(2)
android範列程式-共用相同的「監聽事件」的使用
學習重點:
(1)設定 button 元件 Click 事件共用相同的「監聽事件」
(2)在相同的共用監聽事件下,利用switch...case break;進行判斷
(1)設定 button 元件 Click 事件共用相同的「監聽事件」
(2)在相同的共用監聽事件下,利用switch...case break;進行判斷
package MultiButton.com; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MultiButtonActivity extends Activity { // 宣告全域變數 private TextView txtShow; private Button btnZero,btnOne,btnTwo; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 取得資源類別檔中的介面元件 txtShow=(TextView)findViewById(R.id.txtShow); btnZero=(Button)findViewById(R.id.btnZero); btnOne=(Button)findViewById(R.id.btnOne); btnTwo=(Button)findViewById(R.id.btnTwo); // 設定 button 元件 Click 事件共用 myListner btnZero.setOnClickListener(myListner); btnOne.setOnClickListener(myListner); btnTwo.setOnClickListener(myListner); } // 定義 onClick() 方法 private Button.OnClickListener myListner=new Button.OnClickListener(){ @Override public void onClick(View v) { String s=txtShow.getText().toString(); switch (v.getId()) { case R.id.btnZero: { txtShow.setText(s + "0"); break; } case R.id.btnOne: { txtShow.setText(s + "1"); break; } case R.id.btnTwo: { txtShow.setText(s + "2"); break; } } } }; }
android範列程式-英哩與時速計算
學習重點:
(1)btnTranListener的利用,多重監聽事件使用
(2)資料型態改變int和Integer轉換
執行畫面
程式簡述
1.表示btnTranListener()寫法相同,直接代入
2.private Button.OnClickListener XXXX = new Button.OnClickListener(), 快速記憶方式
3.利用.parseInt將資料型態轉換成整數
原始碼如下:
(1)btnTranListener的利用,多重監聽事件使用
(2)資料型態改變int和Integer轉換
執行畫面
程式簡述
1.表示btnTranListener()寫法相同,直接代入
2.private Button.OnClickListener XXXX = new Button.OnClickListener(), 快速記憶方式
3.利用.parseInt將資料型態轉換成整數
原始碼如下:
package MileToKm.com; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class MileToKmActivity extends Activity { // 宣告全域變數 private EditText edtMile; private TextView txtKm; private Button btnTran; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 取得資源類別 R 中的介面元件 id edtMile=(EditText)findViewById(R.id.edtMile); txtKm=(TextView)findViewById(R.id.txtKm); btnTran=(Button)findViewById(R.id.btnTran); // 設定 button 元件 Click 事件的 listener 為 btnTranListener btnTran.setOnClickListener(btnTranListener); } // 定義 onClick() 方法 private Button.OnClickListener btnTranListener=new Button.OnClickListener(){ public void onClick(View v){ int miles=Integer.parseInt(edtMile.getText().toString()); double km=1.61*(double)miles; txtKm.setText("時速= " + km + " 公里"); } }; }
2012年4月12日 星期四
Android-TQC107驗證Activity
學習重點
(1)了解activity生命週期
(2)log.i的使用方式
log.i的使用
AndroidManifest.xml的設定
題目要求結果
程式碼參考如下:
(1)了解activity生命週期
(2)log.i的使用方式
log.i的使用
AndroidManifest.xml的設定
題目要求結果
程式碼參考如下:
package COM.TQC.GDD01; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; public class GDD01 extends Activity { private static final String TAG = "Android_Log"; private TextView tv; private Button b1; private Button b2; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); tv=(TextView) findViewById(R.id.text1);; b1 = (Button) findViewById(R.id.button1); b2 = (Button) findViewById(R.id.button2); b1.setOnClickListener(new Button.OnClickListener(){ public void onClick(View v){ Intent intent = (Intent) new Intent().setClass(GDD01.this, GDD01_2.class); startActivityForResult(intent,123); } }); b2.setOnClickListener(new Button.OnClickListener(){ public void onClick(View v){ GDD01.this.finish(); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); tv.setText("" + resultCode); //System.out.println(requestCode + ":" + resultCode); } @Override public void onStart(){ super.onStart(); Log.i(TAG,"onStart()"); } @Override public void onResume(){ super.onResume(); Log.i(TAG,"onResume()"); } @Override public void onPause(){ super.onPause(); Log.i(TAG,"onPause()"); } @Override public void onStop(){ super.onStop(); Log.i(TAG,"onStop()"); } @Override public void onRestart(){ super.onRestart(); Log.i(TAG,"onRestart()"); } @Override public void onDestroy(){ super.onDestroy(); Log.i(TAG,"onDestroy()"); } }
2012年4月11日 星期三
Android-TQC109 AlertDialog顯示結果
學習重點:
(1)利用 button與AlertDialog結合利用
(1)利用 button與AlertDialog結合利用
package COM.TQC.GDD01; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; import android.widget.RadioButton; public class GDD01 extends Activity { private EditText et; private RadioButton rb1; private RadioButton rb2; private CheckBox cb1; private CheckBox cb2; private CheckBox cb3; private Button button; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); et = (EditText) findViewById(R.id.name); rb1 = (RadioButton) findViewById(R.id.rButton1); rb2 = (RadioButton) findViewById(R.id.rButton2); cb1 = (CheckBox) findViewById(R.id.cBox1); cb2 = (CheckBox) findViewById(R.id.cBox2); cb3 = (CheckBox) findViewById(R.id.cBox3); button = (Button) findViewById(R.id.button1); button.setOnClickListener(new Button.OnClickListener(){ public void onClick(View v){ String s=""; String b =""; if(!et.getText().toString().equals("")){ s += "姓名:"+et.getText().toString()+"\n"; }else{ s += "姓名:未填\n"; } if(rb1.isChecked()){ s +="性別:"+rb1.getText().toString()+"\n"; }else{ s +="性別:"+rb2.getText().toString()+"\n"; } if(cb1.isChecked()){ b +=cb1.getText().toString()+","; } if(cb2.isChecked()){ b +=cb3.getText().toString()+","; } if(cb3.isChecked()){ b +=cb2.getText().toString()+","; } if(!b.equals("")){ s += "興趣:" + b; }else{ s += "興趣:未選擇"; } new AlertDialog.Builder(GDD01.this) .setTitle("結果") .setMessage(s) .setPositiveButton("離開", new DialogInterface.OnClickListener() { public void onClick(DialogInterface arg0, int arg1) { // TODO Auto-generated method stub } }) .show(); } }); } }
android開發-利用button進行webserver資料存取-完整程式碼
以本機進行web方法畫面呈現
輸入http://localhost/Website/WebService.asmx
畫面執行步驟 程式範例
輸入http://localhost/Website/WebService.asmx
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; using System.Data; using System.Data.SqlClient; ////// WebService 的摘要描述 /// [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] // 若要允許使用 ASP.NET AJAX 從指令碼呼叫此 Web 服務,請取消註解下一行。 // [System.Web.Script.Services.ScriptService] public class WebService : System.Web.Services.WebService { private const string CONNECT = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\Database.mdf;Integrated Security=True;User Instance=True"; public WebService () { //如果使用設計的元件,請取消註解下行程式碼 //InitializeComponent(); } [WebMethod] public string HelloWorld() { return "Hello World"; } [WebMethod] public string HelloAndroid(string whoName) { string output; output = whoName + " 您好,這是Android Web Service"; return output; } [WebMethod] public string[] getMessage() { String[] output = null; output = new String[] { "早安", "Hello", "How are you?", "Ok", "7 見"}; return output; } [WebMethod] //取得資料紀錄 public string[] getRecord() { String[] output = null; //產生資料庫連線 SqlConnection conn = new SqlConnection(CONNECT); conn.Open(); //需要執行 SQL 指令 string sql = "Select msg_content, msg_now From Message Order by msg_id desc"; //產生指令物件 SqlCommand sqlcmd = new SqlCommand(sql, conn); SqlDataAdapter da = new SqlDataAdapter(); DataTable dt = new DataTable(); da.SelectCommand = sqlcmd; da.Fill(dt); //記錄筆數判斷 if (dt.Rows.Count > 0) { output = new String[dt.Rows.Count]; for (int i = 0; i < dt.Rows.Count; i++) { //讀取 msg_content output[i] = dt.Rows[i].ItemArray[0].ToString() + " "; //讀取 msg_now output[i] += dt.Rows[i].ItemArray[1].ToString(); } } da.Dispose(); dt.Dispose(); sqlcmd.Dispose(); conn.Close(); conn.Dispose(); return output; } [WebMethod] //進行資料存入動作 public int Insert(String msg_content) { SqlConnection conn = new SqlConnection(CONNECT); conn.Open(); SqlTransaction tran = conn.BeginTransaction(); string sql = "Insert into Message(msg_content,msg_now) values (@msg_content, @msg_now)"; SqlCommand sqlcmd = new SqlCommand(sql, conn, tran); sqlcmd.Parameters.Add("@msg_content", SqlDbType.Text).Value = msg_content; sqlcmd.Parameters.Add("@msg_now", SqlDbType.DateTime).Value = DateTime.Now; try { sqlcmd.ExecuteNonQuery(); tran.Commit(); } catch (Exception e) { tran.Rollback(); } sqlcmd.Dispose(); conn.Close(); conn.Dispose(); return 1; //回傳成功,呈現數字1 } }
畫面執行步驟 程式範例
package tw.edu.nfu; import java.util.ArrayList; import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapPrimitive; import org.ksoap2.serialization.SoapSerializationEnvelope; import org.ksoap2.transport.HttpTransportSE; import android.app.Activity; import android.app.ProgressDialog; import android.os.Bundle; import android.os.Handler; import android.view.View; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; public class TestActivity extends Activity { /** Called when the activity is first created. */ private EditText input; private TextView output; private Button btn,insert; private ListView dataList; private static Handler handler; private static Runnable right,right_message; private static Runnable error,error_message; private static String result; private static String[] Msg = new String[]{"大家好","Hello","中午一起吃個飯如何","Ok", "7 見"}; private static ArrayListmessageList; private static String message; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); input=(EditText)findViewById(R.id.editText); output=(TextView)findViewById(R.id.textView1); dataList = (ListView)findViewById(R.id.listView1); btn=(Button)findViewById(R.id.btn); insert=(Button)findViewById(R.id.button1); btn.setOnClickListener(new Button.OnClickListener(){ public void onClick(View arg0) { // TODO Auto-generated method stub final ProgressDialog mydialog=new ProgressDialog(TestActivity.this); mydialog.setTitle("請稍後!"); mydialog.setMessage("執行中!"); mydialog.show(); //output.setText("測試~~~"); //output.setText(input.getText().toString()); System.out.println("1"); new Thread(){ public void run(){ int num; int x = 10; int y = 3; try{ //num = x/y; //模擬伺服器處理結果 //System.out.println("2:" + num); messageList = WebService.Welcome(input.getText().toString()); sleep(3000); handler.post(right); }catch(Exception a){ System.out.println("3"); handler.post(error); a.printStackTrace(); }finally{ System.out.println("4"); mydialog.dismiss(); } } }.start(); handler = new Handler(); right = new Runnable() { public void run() { // TODO Auto-generated method stub System.out.println("6"); output.setText(result); ArrayAdapter myAdp = new ArrayAdapter (TestActivity.this,android.R.layout.simple_list_item_1,messageList); dataList.setAdapter(myAdp); } }; error = new Runnable() { public void run() { // TODO Auto-generated method stub System.out.println("7"); output.setText("執行失敗"); } }; System.out.println("5"); } }); insert.setOnClickListener(new Button.OnClickListener(){ public void onClick(View arg0) { // TODO Auto-generated method stub final ProgressDialog mydialog=new ProgressDialog(TestActivity.this); mydialog.setTitle("請稍後!"); mydialog.setMessage("紀錄新增中...!"); mydialog.show(); //output.setText("測試~~~"); //output.setText(input.getText().toString()); System.out.println("1"); new Thread(){ public void run(){ int num; int x = 10; int y = 3; try{ //num = x/y; //模擬伺服器處理結果 //System.out.println("2:" + num); message = WebService.InsertMsg(input.getText().toString()); sleep(3000); handler.post(right_message); }catch(Exception a){ System.out.println("3"); handler.post(error_message); a.printStackTrace(); }finally{ System.out.println("4"); mydialog.dismiss(); } } }.start(); handler = new Handler(); right_message = new Runnable() { public void run() { // TODO Auto-generated method stub Toast.makeText(TestActivity.this, message, Toast.LENGTH_LONG).show(); } }; error_message = new Runnable() { public void run() { // TODO Auto-generated method stub } }; System.out.println("5"); } }); } public static class WebService { public static final String NAMESPACE = "http://tempuri.org/"; public static final String URL_PATH = "http://10.0.2.2/website/"; public static final String SERVICE_NAME = "WebService.asmx"; public static String InsertMsg(String personal){ //String method = "getMessage"; String method = "Insert"; String output = ""; ArrayList list = null; try { SoapObject request = new SoapObject(NAMESPACE, method); request.addProperty("msg_content", personal); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet = true; envelope.setOutputSoapObject(request); HttpTransportSE androidHttpTransport = new HttpTransportSE(URL_PATH + SERVICE_NAME); androidHttpTransport.call(NAMESPACE + method, envelope); Object result = envelope.getResponse(); output = result.toString(); }catch(Exception e){} System.gc(); return output; } public static ArrayList Welcome(String personal){ //String method = "getMessage"; String method = "getRecord"; String output = ""; ArrayList list = null; try { SoapObject request = new SoapObject(NAMESPACE, method); //request.addProperty("whoName", personal); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet = true; envelope.setOutputSoapObject(request); HttpTransportSE androidHttpTransport = new HttpTransportSE(URL_PATH + SERVICE_NAME); androidHttpTransport.call(NAMESPACE + method, envelope); //Object result = envelope.getResponse(); SoapObject result = (SoapObject)((SoapObject)envelope.bodyIn).getProperty(0); if(result != null && result.getPropertyCount()>0) { list = new ArrayList (); for(int i = 0; i < result.getPropertyCount(); i++) { SoapPrimitive msg_content = (SoapPrimitive)result.getProperty(i); list.add(msg_content.toString()); } } }catch(Exception e){} System.gc(); return list; } } }
android開發-利用button進行webserver資料存取-簡單介紹
程式碼片段-website程式
[WebMethod] public int Insert(String msg_content) { SqlConnection conn = new SqlConnection(CONNECT); conn.Open(); SqlTransaction tran = conn.BeginTransaction(); string sql = "Insert into Message(msg_content,msg_now) values (@msg_content, @msg_now)"; SqlCommand sqlcmd = new SqlCommand(sql, conn, tran); sqlcmd.Parameters.Add("@msg_content", SqlDbType.Text).Value = msg_content; sqlcmd.Parameters.Add("@msg_now", SqlDbType.DateTime).Value = DateTime.Now; try { sqlcmd.ExecuteNonQuery(); tran.Commit(); } catch (Exception e) { tran.Rollback(); } sqlcmd.Dispose(); conn.Close(); conn.Dispose(); return 1; //回傳成功,呈現數字1 }
程式碼畫面
以本機server測試,http://localhost/Website/WebService.asmx?op=Insert
android手機開發「讀取」button程式碼片段
insert=(Button)findViewById(R.id.button1); insert.setOnClickListener(new Button.OnClickListener(){ public void onClick(View arg0) { // TODO Auto-generated method stub final ProgressDialog mydialog=new ProgressDialog(TestActivity.this); mydialog.setTitle("請稍後!"); mydialog.setMessage("紀錄新增中...!"); mydialog.show(); //output.setText("測試~~~"); //output.setText(input.getText().toString()); System.out.println("1"); new Thread(){ public void run(){ int num; int x = 10; int y = 3; try{ //num = x/y; //模擬伺服器處理結果 //System.out.println("2:" + num); message = WebService.InsertMsg(input.getText().toString()); sleep(3000); handler.post(right_message); }catch(Exception a){ System.out.println("3"); handler.post(error_message); a.printStackTrace(); }finally{ System.out.println("4"); mydialog.dismiss(); } } }.start(); handler = new Handler(); right_message = new Runnable() { public void run() { // TODO Auto-generated method stub } }; error_message = new Runnable() { public void run() { // TODO Auto-generated method stub } }; System.out.println("5"); } }); public static String InsertMsg(String personal){ //String method = "getMessage"; String method = "Insert"; String output = ""; ArrayListlist = null; try { SoapObject request = new SoapObject(NAMESPACE, method); request.addProperty("msg_content", personal); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet = true; envelope.setOutputSoapObject(request); HttpTransportSE androidHttpTransport = new HttpTransportSE(URL_PATH + SERVICE_NAME); androidHttpTransport.call(NAMESPACE + method, envelope); Object result = envelope.getResponse(); output = result.toString(); }catch(Exception e){} System.gc(); return output; }
畫面執行結果
完整說明如下:
http://linjsian.blogspot.com/2012/04/android-buttonwebserver_10.html
2012年4月8日 星期日
Android-TQC105 MENU功能選單
學習重點:
(1)利用menu按鈕,改變setTitle
(1)利用menu按鈕,改變setTitle
package COM.TQC.GDD01; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; public class GDD01 extends Activity { // ... /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } protected static final int MENU_ADD=Menu.FIRST; protected static final int MENU_DEL=Menu.FIRST+1; protected static final int MENU_ABOUT=Menu.FIRST+2; protected static final int MENU_Quit=Menu.FIRST+3; @Override //建立menu選單的項目 public boolean onCreateOptionsMenu(Menu menu){ super.onCreateOptionsMenu(menu); //新增menu選單,再利用onOptionsItemSelected擷取選單選擇項目,處理相對應的事件 menu.add(0,MENU_ADD,0,getString(R.string.menu_add)); menu.add(0,MENU_DEL,0,getString(R.string.menu_delete)); menu.add(0,MENU_ABOUT,0,getString(R.string.menu_about)); menu.add(0,MENU_Quit,0,getString(R.string.menu_exit)); return true ; } //menu被選擇執行後的事件處理 public boolean onOptionsItemSelected(MenuItem item){ //點選menu,出現四個選擇,以switch區分點選何項,設定title並繫結至其功能 switch(item.getItemId()){ case MENU_ADD: setTitleAdd(); break; case MENU_DEL: setTitleDEL(); break; case MENU_ABOUT: openAboutDialog(); break; case MENU_Quit: openExitDialog(); break; } return super.onOptionsItemSelected(item) ; } private void setTitleAdd() { // TODO Auto-generated method stub setTitle(getString(R.string.menu_add)); } private void setTitleDEL() { // TODO Auto-generated method stub setTitle(getString(R.string.menu_delete)); } //點選「關於」功能 public void openAboutDialog() { setTitle(getString(R.string.menu_about)); AlertDialog.Builder dialog=new AlertDialog.Builder(this); dialog.setTitle(R.string.menu_add); //新增項目 dialog.setMessage(R.string.menu_about_msg); //TQC+ Android認證題庫 dialog.setPositiveButton(R.string.str_ok,new DialogInterface.OnClickListener() { //確認 @Override public void onClick(DialogInterface arg0, int arg1) { // TODO Auto-generated method stub } }); dialog.show(); } //點選「離開」功能 public void openExitDialog() { //開啟視窗詢問【是否確認離開系統?】,於訊息視窗點選「確認」後,關閉程式 //於訊息視窗點選「取消」,則關閉此詢問視窗,則回到MENU功能選單畫面 AlertDialog.Builder dialog = new AlertDialog.Builder(this); dialog.setTitle(R.string.menu_exit);//離開 dialog.setMessage(R.string.menu_exit_msg); //是否確認離開系統 dialog.setPositiveButton(R.string.str_ok,new DialogInterface.OnClickListener(){ //確認 @Override public void onClick(DialogInterface arg0, int arg1) { // TODO Auto-generated method stub finish(); } }); dialog.setNegativeButton(R.string.str_cancel, new DialogInterface.OnClickListener() { //取消 @Override public void onClick(DialogInterface arg0, int arg1) { // TODO Auto-generated method stub //dialog.dismiss(); } }); dialog.show(); } }
Android-TQC103點餐系統
學習重點:
(1)點選button呼叫AlertDialog
(2)將陣列的值放值AlertDialog中並將勾選的,顯示出來。
(1)點選button呼叫AlertDialog
(2)將陣列的值放值AlertDialog中並將勾選的,顯示出來。
package COM.TQC.GDD01; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.DialogInterface.OnMultiChoiceClickListener; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class GDD01 extends Activity { private Button button1; private TextView text1; private String[] s1={"美味蟹堡","義式香腸堡","蔬菜水果堡","香蕉潛艇堡","香烤雞肉堡"}; private boolean[] chsBool={false,false,false,false,false,false}; //先將checkbox值設為false @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); findview(); //宣告物件 setlistner(); } private void findview(){ // TODO Auto-generated method stub button1 = (Button) findViewById(R.id.button1); text1 = (TextView) findViewById(R.id.text1); } private void setlistner() { // TODO Auto-generated method stub button1.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { setdialog(); } }); } private void setdialog() { AlertDialog dialog=new AlertDialog.Builder(GDD01.this) //.setIcon(null)//設定無圖示 .setTitle(getResources().getString(R.string.str2)) .setMultiChoiceItems(s1, chsBool, new OnMultiChoiceClickListener() { public void onClick(DialogInterface dialog, int which, boolean isChecked) { } }) .setPositiveButton("確認", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { String selectedStr = ""; for(int _i=0;_i< chsBool.length;_i++) { if(chsBool[_i] == true) { selectedStr=selectedStr+"\n"+s1[_i].toString(); //換行動作 } } text1.setText("您點的餐有:"+selectedStr+"\n"); } }) .setNegativeButton("離開", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { } }) .create(); dialog.show(); } }
Android-TQC101整存整付計算機
學習重點:
(1)利用button將textview的值進行運作,並以settext方式呈現出計算的值
(1)利用button將textview的值進行運作,並以settext方式呈現出計算的值
package COM.TQC.GDD01; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class GDD01 extends Activity { public Button mButton1; public EditText mEditText1,mEditText2,mEditText3; public TextView mTextView1; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mButton1=(Button)findViewById(R.id.submit); mEditText1=(EditText)findViewById(R.id.input_lend); mEditText2=(EditText)findViewById(R.id.input_rate); mEditText3=(EditText)findViewById(R.id.input_number); mTextView1=(TextView)findViewById(R.id.amount); mButton1.setOnClickListener(new Button.OnClickListener(){ @Override public void onClick(View v) { int a =Integer.parseInt(mEditText1.getText().toString()); Double b =Double.parseDouble(mEditText2.getText().toString()); int c =Integer.parseInt(mEditText3.getText().toString()); b=b/100/12+1; Double count=b; for(int i=1;i< c;i++) { count=count*b; } int area= (int) (a*count); String answer=Integer.toString(area); mTextView1.setText("本利和為"+answer); } }); } }
2012年3月29日 星期四
Android-TQC202 公尺與英呎轉換
學習重點:
(一)在linearLayout下使用relativeLayout
(二)MenuInflater使用方式
(三)onPrepareOptionsMenu使用方式,主要用於點擊事件
相關資料來源
由於系統內容有些不要必要程式,因此以註記的方式取代
題目說明:
英呎 = 公尺 * 3.28
公尺 = 英呎 * 0.3048
(一)在linearLayout下使用relativeLayout
(二)MenuInflater使用方式
(三)onPrepareOptionsMenu使用方式,主要用於點擊事件
相關資料來源
由於系統內容有些不要必要程式,因此以註記的方式取代
題目說明:
英呎 = 公尺 * 3.28
公尺 = 英呎 * 0.3048
package COM.TQC.GDD02; import java.text.DecimalFormat; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class GDD02 extends Activity { private boolean MenuChange = false; //protected String PREF_M = "pref_m"; //protected String PREF_FT = "pref_ft"; //protected String pref_m; //protected String pref_ft; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button01=(Button)findViewById(R.id.submit01); Button button02=(Button)findViewById(R.id.submit02); button01.setOnClickListener(MtoFT); button02.setOnClickListener(FTtoM); } private Button.OnClickListener MtoFT = new Button.OnClickListener () { @Override public void onClick(View v) { // TODO Auto-generated method stub DecimalFormat nf = new DecimalFormat("0.00"); EditText input_value = (EditText)findViewById(R.id.input_value); double input = Double.parseDouble(input_value.getText().toString()); double MFT=input*3.28; TextView result=(TextView)findViewById(R.id.result); result.setText(input+"公尺="+nf.format(MFT)+"英呎"); MenuChange = false; } }; private Button.OnClickListener FTtoM = new Button.OnClickListener () { @Override public void onClick(View v) { // TODO Auto-generated method stub DecimalFormat nf = new DecimalFormat("0.00"); EditText input_value = (EditText)findViewById(R.id.input_value); double input = Double.parseDouble(input_value.getText().toString()); double MFT=input*0.3048; TextView result=(TextView)findViewById(R.id.result); result.setText(input+"英呎="+nf.format(MFT)+"公尺"); MenuChange = false; } }; /*@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); return true; }*/ public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()){ case R.id.menu_reset: ResetValue(); //呼叫ResetValue() break; } return true; } private void ResetValue() //重置 { EditText input_value = (EditText)findViewById(R.id.input_value); TextView result = (TextView)findViewById(R.id.result); input_value.setText(""); result.setText(""); MenuChange=true; } public boolean onPrepareOptionsMenu(Menu menu) { if(MenuChange) menu.clear(); else { if(menu.size()<=0) { MenuInflater inflater = getMenuInflater();//解析定義menu目錄下的選單佈局文件 inflater.inflate(R.menu.menu, menu); } } return super.onPrepareOptionsMenu(menu); } }
2012年3月21日 星期三
android伺服器建置以microsoft visual web developer 2010 express為例
本篇主要是說明,如何以microsoft visual web developer 2010 express進行android呼叫本機server,進行值的呼叫和運作的前置作業與運作流程。
新增網站,以asp.net,c#為開發環境
新增網站,命名為website,如下圖
從「加入新項目」中加入,webform
測試asp頁面,並開啟瀏覽器輸入http://localhost/website/default.aspx,
測試是否可以正常看到本機網頁內容
從「加入新項目」中加入「web服務」
此時我們可以看到,hellowrold(),這是可以利用手機呼叫的方法
測試頁面,並開啟瀏覽器輸入http://localhost/website/webservice.asmx,可看出目前可以呼叫的方法有哪些。
新增網站,以asp.net,c#為開發環境
新增網站,命名為website,如下圖
從「加入新項目」中加入,webform
測試asp頁面,並開啟瀏覽器輸入http://localhost/website/default.aspx,
測試是否可以正常看到本機網頁內容
從「加入新項目」中加入「web服務」
此時我們可以看到,hellowrold(),這是可以利用手機呼叫的方法
測試頁面,並開啟瀏覽器輸入http://localhost/website/webservice.asmx,可看出目前可以呼叫的方法有哪些。
2012年3月14日 星期三
Android連線service設定方式
(一)layout版面配置
主要內容是webservice()設定,其他部分則是測試內容
(二)main.java
(三)AndroidManifest.xml網路連線設定
(四)ASP環境,以c#為例
加入新項目(Ctrl+Shift+A)>WebService>
手機端呼叫的webservice的helloworld()。
(五)匯入kaoap設定
主要內容是webservice()設定,其他部分則是測試內容
(二)main.java
package nfu.edu; import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapSerializationEnvelope; import org.ksoap2.transport.HttpTransportSE; import android.app.Activity; import android.app.ProgressDialog; import android.os.Bundle; import android.os.Handler; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class TestActivity extends Activity { /** Called when the activity is first created. */ private EditText input; private TextView output; private Button btn; private static Handler handler;//執行緒的處理事件 private static Runnable right; private static Runnable error; private static String result; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); input=(EditText)findViewById(R.id.editText);//讀取值的位置 output=(TextView)findViewById(R.id.textView1); btn=(Button)findViewById(R.id.btn); btn.setOnClickListener(new Button.OnClickListener(){ //按下按鈕的事件 public void onClick(View v) { // TODO Auto-generated method stub //進度視窗的提示(執行緒) final ProgressDialog mydialog=new ProgressDialog(TestActivity.this);//檔案名稱 mydialog.setTitle("請稍後");//視窗標題 mydialog.setMessage("執行中");//顯示訊息 mydialog.show();//指令顯示 System.out.println("1");//執行緒的流程 new Thread(){//宣告執行緒 public void run(){ int num; int x = 10; int y = 2;//0會進入例外事件 try{//正常處理 //num = x/y; //模擬伺服器處理結果(但會出現錯誤訊息,故等執行緒完成後再另外處理) System.out.println("2: + num"); result = WebService.Welcome();//呼叫107行webservice.welcome() sleep(3000);//延遲時間 handler.post(right);//標題檔.處理區塊 //output.setText(String.valueOf(num));//數值轉字串 }catch(Exception a){//例外處理 System.out.println("3"); handler.post(error); a.printStackTrace(); }finally{//指令移除 System.out.println("4"); mydialog.dismiss(); } } }.start(); //處理事件 handler = new Handler(); right = new Runnable(){ public void run() { // TODO Auto-generated method stub System.out.println("6"); output.setText(String.valueOf(result)); } }; handler = new Handler(); error = new Runnable(){ public void run() { // TODO Auto-generated method stub System.out.println("7"); output.setText("執行錯誤"); } }; System.out.println("5"); //output.setText("hey"); //output.setText(input.getText().toString());//將輸入值轉為字串輸出 } }); } //-----webservice start public static class WebService { //service連線設定 public static final String NAMESPACE = "http://tempuri.org/"; //以asp環境 public static final String URL_PATH = "http://10.0.2.2/MSG/"; //asp專案命名/MSG public static final String SERVICE_NAME = "WebService.asmx"; public static String Welcome(){ String method = "HelloWorld";//呼叫server的HelloWorld() String output = ""; try { SoapObject request = new SoapObject(NAMESPACE, method); //request.addProperty("whoName", personal); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet = true; envelope.setOutputSoapObject(request); HttpTransportSE androidHttpTransport = new HttpTransportSE(URL_PATH + SERVICE_NAME); androidHttpTransport.call(NAMESPACE + method, envelope); Object result = envelope.getResponse(); output = result.toString(); }catch(Exception e){} System.gc(); return output; } } //-----webservice end }
(三)AndroidManifest.xml網路連線設定
(四)ASP環境,以c#為例
加入新項目(Ctrl+Shift+A)>WebService>
手機端呼叫的webservice的helloworld()。
(五)匯入kaoap設定
2012年3月13日 星期二
Android-TQC110動態密碼顯示
學習重點:
(1)在layout中,android:hint 標記設置顯示編輯文字的提示字
(2)在layout中,從background改變背景
(3)利用checkbox改變edittext狀態
(1)在layout中,android:hint 標記設置顯示編輯文字的提示字
(2)在layout中,從background改變背景
(3)利用checkbox改變edittext狀態
package COM.TQC.GDD01; import android.app.Activity; import android.os.Bundle; import android.text.method.HideReturnsTransformationMethod; import android.text.method.PasswordTransformationMethod; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; public class GDD01 extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final CheckBox cb = (CheckBox)findViewById(R.id.mCheck); final EditText et = (EditText)findViewById(R.id.mPassword); cb.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener(){ @Override public void onCheckedChanged(CompoundButton arg0,boolean arg1) { // TODO Auto-generated method stub if(cb.isChecked()) { et.setTransformationMethod(HideReturnsTransformationMethod.getInstance()); } else { et.setTransformationMethod(PasswordTransformationMethod.getInstance()); } } }); } }
2012年3月12日 星期一
Android-TQC108 選擇手機型號
學習重點:
(1)Spinner的OnItemSelectedListener事件處理
(2)Spinner與setDropDownViewResource應用
(3)需要2個layout,1個layout放置spinner,另一個layout則顯示被setDropDownView自訂樣式選單
(4)其畫面如下
(1)Spinner的OnItemSelectedListener事件處理
(2)Spinner與setDropDownViewResource應用
(3)需要2個layout,1個layout放置spinner,另一個layout則顯示被setDropDownView自訂樣式選單
(4)其畫面如下
package COM.TQC.GDD01; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.TextView; public class GDD01 extends Activity { private String[] types={"請選擇","HTC HERO","HTC MAGIC","HTC TATTOO", "NEXUS ONE","SONY X10","MOTO MILESTONE"}; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final TextView tv = (TextView)findViewById(R.id.text1); Spinner sp = (Spinner)findViewById(R.id.mySpinner); //建立一個ArrayAdapter物件,並放置下拉選單的內容 ArrayAdapteradapter = new ArrayAdapter (GDD01.this,android.R.layout.simple_spinner_item,types); //設定下拉選單的樣式simple_spinner_dropdown_item adapter.setDropDownViewResource(R.layout.myspinner_layout); sp.setAdapter(adapter); sp.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){ public void onItemSelected(AdapterView arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub if(!types[arg2].equals("請選擇")) { tv.setText(getString(R.string.str1)+types[arg2]); }else{ tv.setText(getString(R.string.str1)); } } public void onNothingSelected(AdapterView arg0) { // TODO Auto-generated method stub } }); } }
2012年3月9日 星期五
Android-TQC106畫廊展示
import android.app.Activity; import android.os.Bundle; import android.content.Context; import android.content.res.TypedArray; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.Gallery; import android.widget.ImageView; import android.widget.Toast; import android.widget.AdapterView.OnItemClickListener; public class GDD01 extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Gallery g =(Gallery)findViewById(R.id.mygallery); g.setAdapter(new ImageAdapter(this)); g.setOnItemClickListener(new Gallery.OnItemClickListener(){ @Override public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub Toast.makeText(arg1.getContext(), getString(R.string.my_gallery_text_pre) +arg2+getString(R.string.my_gallery_text_post), Toast.LENGTH_SHORT).show(); } }); } public class ImageAdapter extends BaseAdapter { int BackGround; Context m_context; Integer[]imageId={ R.drawable.png001,R.drawable.png002, R.drawable.png003,R.drawable.png004, R.drawable.png005,R.drawable.png006, R.drawable.png007,R.drawable.png008, R.drawable.png009,R.drawable.png010, R.drawable.png011 }; //建構子只有一個參數,即要儲存的Context public ImageAdapter(Context c) { super(); m_context=c; TypedArray array=m_context.obtainStyledAttributes(R.styleable.Gallery); BackGround=array.getResourceId(R.styleable.Gallery_android_galleryItemBackground, 0); } //回傳所有已定義的圖片總數量 public int getCount() { return imageId.length; } public Object getItem(int position) { return position; } //取得圖片編號 public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub ImageView i = new ImageView(m_context); i.setImageResource(imageId[position]); i.setLayoutParams(new Gallery.LayoutParams(236, 188)); i.setScaleType(ImageView.ScaleType.FIT_XY); i.setBackgroundResource(BackGround); return i; } } //使用android.R.drawable裡的圖片當成圖庫來源 }
Android-TQC104計算BMI值
主要運用到下列觀念
(1)intent運作
(2)bundle運用
(3)2個activity傳值
main.java
second.java
二個activity設定 從「AndroidManifest.xml」中application新增
(1)intent運作
(2)bundle運用
(3)2個activity傳值
main.java
package COM.TQC.GDD01; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.RadioButton; public class GDD01 extends Activity { private EditText etheight; private EditText etweight; private RadioButton rb1; private RadioButton rb2; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button b1 = (Button) findViewById(R.id.button1); b1.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { //從輸入介面中取出了的身高、體重值,要將身高、體重值傳送給 child_Activity 後作計算 etheight=(EditText)findViewById(R.id.input_height); etweight=(EditText)findViewById(R.id.input_weight); double height=Double.parseDouble(etheight.getText().toString()); double weight=Double.parseDouble(etweight.getText().toString()); String Sex=""; rb1=(RadioButton)findViewById(R.id.input_m); //男性按鈕 rb2=(RadioButton)findViewById(R.id.input_w); //女性按鈕 if(rb1.isChecked()) { Sex="M"; } else { Sex="W"; } //這些附加在 Intent 上的訊息都儲存在 Bundle 物件中 Intent intent = new Intent(); intent.setClass(GDD01.this, GDD01_child.class); //透過「intent.putExtras(bundle)」敘述,將「bundle」 物件附加在 Intent 上,隨著 Intent 送出而送出 Bundle bundle=new Bundle(); bundle.putDouble("height", height); //38行的值 bundle.putDouble("weight", weight); //39行的值 bundle.putString("Sex", Sex); intent.putExtras(bundle); //查看GDD01_child.java,26行程式,用extras。 startActivityForResult(intent,0); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (resultCode) { case RESULT_OK: Bundle bundle = data.getExtras(); String Sex = bundle.getString("Sex"); double height = bundle.getDouble("height"); double weight = bundle.getDouble("weight"); etheight.setText("" + height); etweight.setText("" + weight); if(Sex.equals("M")) { rb1.setChecked(true); }else { rb2.setChecked(true); } break; default: break; } } }
second.java
package COM.TQC.GDD01 ; import java.text.DecimalFormat; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class GDD01_child extends Activity { Bundle bundle; Intent intent; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mylayout); intent=this.getIntent(); bundle = intent.getExtras(); String Sex = bundle.getString("Sex"); double height = bundle.getDouble("height"); double weight = bundle.getDouble("weight"); String BMI_result = this.getBMI(height,weight); String BMI_advice = this.getAdvice(Sex,height,weight); TextView tvBMI=(TextView) findViewById(R.id.tvBMI); tvBMI.setText(BMI_result); TextView tvAdvice=(TextView) findViewById(R.id.tvAdvice); tvAdvice.setText(BMI_advice); Button b1 = (Button) findViewById(R.id.button1); b1.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { GDD01_child.this.setResult(RESULT_OK, intent); GDD01_child.this.finish(); } }); } //BMI值格式化 private String format(double num) { DecimalFormat nf = new DecimalFormat("0.00");//呈現至小數點第二位 String s=nf.format(num); return s; } //取得BMI值 private String getBMI (double height, double weight) { double BMI_values=weight/(height*height); return getString(R.string.report_result)+format(BMI_values); } //依BMI值取得建議 private String getAdvice (String Sex, double height, double weight) { double BMI_MAX; double BMI_MIN; double BMI=weight/(height*height); if(Sex.equals("M")) { BMI_MAX=25.0; BMI_MIN=20.0; } else { BMI_MAX=22.0; BMI_MIN=18.0; } if (BMI> BMI_MAX) { return getString(R.string.advice_heavy);//體重過重 } else if (BMI< BMI_MIN) { return getString(R.string.advice_light);//體重過輕 } else { return getString(R.string.advice_average);//體重適中 } } }
二個activity設定 從「AndroidManifest.xml」中application新增
2012年3月5日 星期一
Android-TQC102電費計算機
課程學習筆記
關於spinner運用
程式碼參考如下
關於spinner運用
程式碼參考如下
package COM.TQC.GDD01; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Adapter; import android.widget.AdapterView; import android.widget.Button; import android.widget.EditText; import android.widget.Spinner; import android.widget.SpinnerAdapter; import android.widget.TextView; import android.widget.Toast; public class GDD01 extends Activity { protected TextView MyOutcome; protected int volt; protected int inputv = 110; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); spinner(); button(); } private void spinner() { // TODO Auto-generated method stub Spinner Sp=(Spinner)findViewById(R.id.input_v); Sp.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub volt=arg0.getSelectedItemPosition(); if(volt ==0) { inputv=110; } else { inputv=220; } } @Override public void onNothingSelected(AdapterView arg0) { // TODO Auto-generated method stub } }); } private void button() { // TODO Auto-generated method stub Button btn=(Button)findViewById(R.id.submit); btn.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub EditText fill_a=(EditText)findViewById(R.id.input_a); EditText fill_hr=(EditText)findViewById(R.id.input_hr); EditText fill_m=(EditText)findViewById(R.id.input_m); double inputa=Double.parseDouble(fill_a.getText().toString()); double inputhr=Double.parseDouble(fill_hr.getText().toString()); double inputm=Double.parseDouble(fill_m.getText().toString()); double total_w= inputv * inputa; int total_m=(int) Math.round((total_w/1000)*(inputhr*30)*inputm); MyOutcome=(TextView)findViewById(R.id.respond); MyOutcome.setText("$"+total_m); } }); } }
2012年3月3日 星期六
blogger嵌入程式碼以SyntaxHighlighter
當撰寫程式碼要分享的時候,如果單純只是貼在blog上,有可能會造成格式亂碼
或是斷行不乾淨的問題,加上增加容易閱讀性,所以在blog中好的程式碼編排是相當重要的。
因此,耗費一個早上來摸一下,加上對css並不是很熟悉,爬了一下文,做了n次實驗後
把相關的經驗分享給大家。
step1
至「SyntaxHighlighter」網頁,它提供一個
可以將程式碼嵌在blog的技術,樣式也相當美觀
step2
至「SyntaxHighlighter hosting」網頁,提供主要是從官方位址上引用程式碼格式,相關css語法都用好了,省去自已上傳至網路空間的步驟。
step3
複製程式碼如下:
step4
開啟google blogger,「設計」>「修改html」
至(/b:template-skin)和(/head)間貼入step3複製的檔案 or(head)和(/head)之間,我本身是用前者,因為放在前比較容易查,若中間隨便放,反而不容易後續維護
step5
若要寫不同格式的程式碼,則要以不同的「檔案格式」下去寫
參考點我
step6
完成
step7
相關資料如下
http://alexgorbatchev.com/SyntaxHighlighter/
http://sharedderrick.blogspot.com/2007/12/blogger-syntaxhighlighter.html
http://king971119.blogspot.com/2010/05/syntaxhighlighter-bloggerjavascript.html
或是斷行不乾淨的問題,加上增加容易閱讀性,所以在blog中好的程式碼編排是相當重要的。
因此,耗費一個早上來摸一下,加上對css並不是很熟悉,爬了一下文,做了n次實驗後
把相關的經驗分享給大家。
step1
至「SyntaxHighlighter」網頁,它提供一個
可以將程式碼嵌在blog的技術,樣式也相當美觀
step2
至「SyntaxHighlighter hosting」網頁,提供主要是從官方位址上引用程式碼格式,相關css語法都用好了,省去自已上傳至網路空間的步驟。
step3
複製程式碼如下:
資料來源:http://king971119.blogspot.com/2010/05/syntaxhighlighter-bloggerjavascript.html
step4
開啟google blogger,「設計」>「修改html」
至(/b:template-skin)和(/head)間貼入step3複製的檔案 or(head)和(/head)之間,我本身是用前者,因為放在前比較容易查,若中間隨便放,反而不容易後續維護
step5
若要寫不同格式的程式碼,則要以不同的「檔案格式」下去寫
參考點我
程式碼寫在這
step6
完成
step7
相關資料如下
http://alexgorbatchev.com/SyntaxHighlighter/
http://sharedderrick.blogspot.com/2007/12/blogger-syntaxhighlighter.html
http://king971119.blogspot.com/2010/05/syntaxhighlighter-bloggerjavascript.html
2012年3月2日 星期五
雲端運算概念
由於本有在研究opensource search engine相關,找到一些關於雲端概念的軟體
可籍由實作方式更加了解,何謂雲端?
相關資料來源:資策會(http://www.iiiedu.org.tw/ites/CBD.htm)
可籍由實作方式更加了解,何謂雲端?
相關資料來源:資策會(http://www.iiiedu.org.tw/ites/CBD.htm)
2012年1月14日 星期六
訂閱:
文章 (Atom)