顯示廣告
隱藏 ✕
看板 Android
作者 five0826 (哦是哦)
標題 android與WebService.asmx與sqlserver(文略長)
時間 2015年02月11日 Wed. AM 03:41:39



小弟最近一直設法讓我的寫的Android可以連接到WebService。


但我看過很多網路資料,卻不知怎麼改成我想要的。

http://fanli7.net/a/bianchengyuyan/ASP/20111123/145814.html

http://ppt.cc/R;Gj

http://blog.yam.com/wewa85/article/32877801

http://andygeeks.blogspot.in/2014/02/how-to-get-data-from-soap-webservice.html

這四個是我覺得有點接近我想要的範例。

--------------------------------------分隔線----------------------------------

我的WebService有放在我電腦的iis裡,網站為:http://127.0.0.1/WebService.asmx?op=sign_up

程式碼如下:
    public void sign_up(string email,
	
	
string password,
	
	
string sex,
	
	
string name,
	
	
string phone) {
        using (SqlConnection test = new SqlConnection(WebConfigurationManager
	
	
	
	
.ConnectionStrings["TestUser"].ConnectionString)){

            string insertStr = "insert into Test(T_email,T_pwd,T_sex,T_name,T_phone)
	
	
	
	
	
values(@T_email,@T_pwd,@T_sex,@T_name,@T_phone)";

            using (SqlCommand data = new SqlCommand(insertStr, test)) {
                test.Open();
                data.Parameters.AddWithValue("@T_email", email);
                data.Parameters.AddWithValue("@T_pwd", password);
                data.Parameters.AddWithValue("@T_sex", sex);
                data.Parameters.AddWithValue("@T_name", name);
                data.Parameters.AddWithValue("@T_phone", phone);
                data.ExecuteNonQuery();
                test.Close();
            }
        }
    }

--------------------------------------分隔線----------------------------------

我android的程式碼如下:

public class TestWeb extends Activity implements OnClickListener {
	

	
private EditText txtMessage;
	
private Button sendBtn;
	
private String uriAPI = "http://127.0.0.1/WebService.asmx?op=sign_up";
	

	
protected static final int REFRESH_DATA = 0x00000001;
	

	
//建立UIThread使用Handler,來接收其他Thread來訊息。
	
Handler mHandler = new Handler(){
	
    //@Override
	
   
	
	
public void handleMassage(Message msg){
	
	
	
switch(msg.what){
	
	
	
case REFRESH_DATA:
	
	
	
	
String result = null;
	
	
	
	
if(msg.obj instanceof String)
	
	
	
	
	
result = (String)msg.obj;
	
	
	
	
if(result != null)
	
	
	
	
	
Toast.makeText(TestWeb.this,result,Toast.LENGTH_LONG).show();
	
	
	
	
break;
	
	
	
}
	
	
}
	
	

	
};

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test_web);
       
        txtMessage = (EditText)findViewById(R.id.txt_message);
        sendBtn = (Button)findViewById(R.id.send_btn);
       
        if(sendBtn != null){
       
	

       
	
sendBtn.setOnClickListener(this);
        }
    }
    @Override
    public void onClick(View v){
   
	

   
	
if(v == sendBtn){
   
	
	

   
	
	
if(txtMessage != null){
   
	
	
	
String msg = txtMessage.getEditableText().toString();
   
	
	
	

   
	
	
	
Thread t = new Thread(new sendPostRunnable(msg));
   
	
	
	
t.start();
   
	
	
	

   
	
	
}
	

   
	
}
    }
   
    private String sendPostDataToInternet(String strTxt){
   
	

   
	
//建立http post連線
   
	
HttpPost httpRequest = new HttpPost(uriAPI);
   
	

   
	
//post運作傳送變數必須用NameValuePair[]陣列儲存
   
	
List<NameValuePair> params = new ArrayList<NameValuePair>();
   
	
params.add(new BasicNameValuePair("data", strTxt));
   
	

   
	
try{
   
	
	

   
	
	
//發出http requset
   
	
	
httpRequest.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
   
	
	
//取得http response
   
	
	
HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest);
   
	
	

   
	
	
//若狀態碼為200
   
	
	
if(httpResponse.getStatusLine().getStatusCode() ==200){
   
	
	
	
//取出回應字串
   
	
	
	
String strResult = EntityUtils.toString(httpResponse.getEntity());
   
	
	
	
return strResult;
   
	
	
}
   
	
}
   
	

   
	
catch(Exception e){
   
	
	
e.printStackTrace();
   
	
}
   
	

   
	
return null;
   
	

    }
   
    class sendPostRunnable implements Runnable{
   
	

   
	
String strTxt = null;
   
	
public sendPostRunnable(String strTxt){
   
	
	
this.strTxt = strTxt;
   
	
}
   
	
@Override
   
	
public void run(){
   
	
	
String result = sendPostDataToInternet(strTxt);
   
	
	
mHandler.obtainMessage(REFRESH_DATA , result).sendToTarget();
   
	
}
    }

}
這個是我照著我看過的第二個範例打的

我不知道要怎麼修改才能讓我在android裡取到的值

丟給我webservice裡面的這四行
	
	
data.Parameters.AddWithValue("@T_email", email);
                data.Parameters.AddWithValue("@T_pwd", password);
                data.Parameters.AddWithValue("@T_sex", sex);
                data.Parameters.AddWithValue("@T_name", name);
                data.Parameters.AddWithValue("@T_phone", phone);



--------------------------------------分隔線----------------------------------

小弟希望有人可以教我android與webservice之間的傳值,

就算只是在app輸入一段字串再點個按鈕,可以收到webservice傳回一句話,

對我來說就是一個很大很大的進步了!

(P.S.如果可以我想盡量不要用到ksoap2)



拜託各位了<(ㄒ_ㄒ)> <(ㄒ_ㄒ)> <(ㄒ_ㄒ)>


我是第一次發文,如有任何地方不對,請盡量鞭策。



--
※ 作者: five0826 時間: 2015-02-11 03:41:39
※ 編輯: five0826 時間: 2015-02-11 03:46:25
※ 看板: Android 文章推薦值: 0 目前人氣: 0 累積人氣: 1049 
※ 本文也出現在看板: Programming
分享網址: 複製 已複製
Leon 轉錄至看板 Programming (使用連結) 時間:2015-02-19 01:57:34
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇