2012年4月8日 星期日

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());
   }
  }
     
    });
    
  }
}