本篇主要是說明,如何以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月21日 星期三
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物件,並放置下拉選單的內容
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裡的圖片當成圖庫來源
}
訂閱:
文章 (Atom)









