2012年6月10日 星期日

在ubuntu11下安裝vmware

由於研究的關係,平日在摸索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年5月7日 星期一

利用jsp與資料庫連線demo-首頁(index)

上一個步驟,我們先將環境給佈署好後

然後先撰寫jsp的主要頁面(index.jsp)

這個頁面(index)包含了要進行新增、修改、刪除、查詢的部分

如下圖所示:



2012年5月5日 星期六

利用jsp與資料庫連線demo-環境佈署

學習重點:
(1)利用jsp來與Microsoft SQL Server進行連線設定
(2)JDBC的語法使用方式
(3)基本的新增、刪除、修改功能介紹



1.首先,先下載jdbc



2.將該專案放在eclipse開發專案的jsp中的lib下


3.環境佈署完成

4.示範
index-demo

2012年4月27日 星期五

2012年4月20日 星期五

利用google webmasters來查看流量

利用google網路工具-google webmasters

得知google處理你網站的狀況

並了解網站、部落格的文章、內容流量的吸引程度

和得知整個網站流量的紀錄

未來對於搜尋引擎的行銷的觀念,可說是基礎的學習工具之一

可利用其中 google Sitemap的工具,去進行網站或blog地圖提交的動作

讓google可以更順利的抓取你網站的內容

主動的提交你網站的地圖供google爬取,比呆呆的等google來抓取你的網站還要有效率

學習使用google analytics

利用google analytics來幫助你觀看網路流量

對於偵測搜尋引擎的抓取與使用人數的造訪提供一個信任的工具

網路上有許多介紹關於google analytics的介紹

不妨有興趣的朋友可以去google一下,相信有很多資訊可以供參考

google analytics簡單畫面呈現如下:


從造訪量、人數訪問上我們可以先進行簡單的了解,並且得知你部落格或相關網頁的一些流量

以作為未來調整網站架設、blog寫作相關方向

不妨學習一下google analytics操作工具!

2012年4月18日 星期三

android範列程式-密碼認證清除按鈕

學習重點:
(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版面配置


畫面呈現結果




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;進行判斷


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將資料型態轉換成整數



原始碼如下:
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的設定




題目要求結果


程式碼參考如下:

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結合利用



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




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 ArrayList messageList;
 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 = "";
      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;  
     }



畫面執行結果



完整說明如下:
http://linjsian.blogspot.com/2012/04/android-buttonwebserver_10.html

2012年4月8日 星期日

Android-TQC105 MENU功能選單

學習重點:
(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中並將勾選的,顯示出來。



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方式呈現出計算的值


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


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,可看出目前可以呼叫的方法有哪些。

2012年3月14日 星期三

Android連線service設定方式

(一)layout版面配置
主要內容是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狀態


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)其畫面如下


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物件,並放置下拉選單的內容
    ArrayAdapter adapter = 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
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運用

程式碼參考如下

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
複製程式碼如下:

















資料來源: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)

2012年1月14日 星期六

商業研討會資訊網

有關商業資訊研討會的網站

若有符合自己領域的議題,不妨多參與投稿活動!!

網址:http://infocycu.wordpress.com/