当前位置: 代码迷 >> Android >> webservice 大神,
  详细解决方案

webservice 大神,

热度:39   发布时间:2016-05-01 13:19:50.0
webservice 大神,救命啊!!!!
一个简单的用户登录,调用webservice接口

activity里面:

public void login(){
final String uname=et_username.getText().toString().trim();
final String upwd=et_userpwd.getText().toString().trim();
if("".equals(uname)||uname==null ){
Utils.showToast(LoginActivity.this, "用户名不能为空!");
}else if("".equals(upwd)||upwd==null){
Utils.showToast(LoginActivity.this, "密码不能为空!");
}else{
//显示进度条
Utils.showProgress(LoginActivity.this, R.string.please_wait, R.string.connect_server);
//登录
Thread thread=new Thread(new Runnable() {
public void run() {
Looper.prepare();
try {
MemberService ms=new MemberService(LoginActivity.this);
Member member=ms.login(uname, upwd);
if(member.isSuccess()){
Utils.dismissProgressDialog();
Utils.showToast(LoginActivity.this, "登录成功!");
//传递数据
Bundle bundle =new Bundle();
bundle.putString("UCode", member.getUserName());
Utils.startActivity(LoginActivity.this, IndexActivity.class, bundle);//跳转到indexActivity

// 到indexActivity获取数据 Bundle b=getIntent().getExtras();
// String ucode=b.getString("UCode");
}else{
Utils.dismissProgressDialog();
Utils.showToast(LoginActivity.this,"登录失败!");
}
} catch (Exception e) {
Log.e("LoginActivity", e.getMessage(),e);
Utils.dismissProgressDialog();
}
Looper.loop();
}
});
thread.start();
}
}


service里面调用接口

public Member login(String userName,String userPwd){
Member member=new Member() ;
try {
String result="";
String nameSpace="http://tempuri.org/";//命名空间
String methodName="Login";//调用的方法名称
String url=Global.address;//webservice的wdsl文档的URL
String soapAction=nameSpace+methodName;
SoapObject request=new SoapObject(nameSpace,methodName);
request.addProperty("UCode",userName);
request.addProperty("UPassword", userPwd);
SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);//设置SOAP版本号
envelope.dotNet=true;
envelope.bodyOut=request;
HttpTransportSE ht=new HttpTransportSE(url);
ht.call(soapAction, envelope);
ht.debug=true;
if(envelope.getResponse()!=null){ SoapPrimitive response=(SoapPrimitive)envelope.getResponse();
result=response.toString();
System.out.println("result=========="+result);
JSONArray json=new JSONArray(result);
JSONObject object=json.getJSONObject(0);
member.setMessage(object.getString("msg"));
member.setRole(object.getString("role"));
member.setStatus(object.getInt("status"));
}
} catch (Exception e) {
e.printStackTrace();
}

return member;
}


调试到if(envelope.getResponse()!=null)就没了,envelope.getResponse()是null?????????


大神,帮帮小妹,webservice没搞过,Android也是刚学了一个星期、




------解决方案--------------------
在服务端建立一个简单的方法,就返回简单的数字,首先保证能在浏览器上能调用,然后在android试着调用一下.
1.如果可以调用就是服务端那边的login方法有问题(必须保证android这边的参数传递没有问题,名称,类型,传递顺序)
2.如果连这个简单方法都不能调用就是android 端的问题.

如果服务端是.NET做的就好办了,打个断点,然后在vs上调试->附加到进程->w3wp.exe->附加 然后你只要在android上调用login方法,就会进入断点。这样你就可以调试该方法了。

搞android比较麻烦。有时候还会有内存泄漏等问题,毕竟可以算是嵌入式开发嘛,呵呵~
美女,看看上面的方法对你有用不?
  相关解决方案