webservice 大神,救命啊!!!!

丫头嗳 2012-10-10 12:07:14
一个简单的用户登录,调用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也是刚学了一个星期、


...全文
211 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fire_fire_fire 2012-10-12
  • 打赏
  • 举报
回复
在服务端建立一个简单的方法,就返回简单的数字,首先保证能在浏览器上能调用,然后在android试着调用一下.
1.如果可以调用就是服务端那边的login方法有问题(必须保证android这边的参数传递没有问题,名称,类型,传递顺序)
2.如果连这个简单方法都不能调用就是android 端的问题.

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

搞android比较麻烦。有时候还会有内存泄漏等问题,毕竟可以算是嵌入式开发嘛,呵呵~
美女,看看上面的方法对你有用不?
丫头嗳 2012-10-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

你看看和你的有区别吗?注意,我的webservice是.NET写的
Java code


public class TestWebService extends Activity {
private static String NameSpace="http://tempuri.org/";//这个不要改
private static String u="http://10……
[/Quote]

我感觉我写的跟你的一样,没什么问题,可能服务器端那边结构有问题吧。哎,我不想搞Android、
fire_fire_fire 2012-10-12
  • 打赏
  • 举报
回复
你看看和你的有区别吗?注意,我的webservice是.NET写的


public class TestWebService extends Activity {
private static String NameSpace="http://tempuri.org/";//这个不要改
private static String u="http://10.8.8.70:808";//请更换成你要访问的服务器地址
private static String webService="/webService/WebService.asmx";//webService目录
private static String MethodName="HelloWorld2";//要调用的webService方法
private static String soapAction=NameSpace+MethodName;
private static String url=u+webService;//最终要访问的网址
private TextView tv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv=(TextView)findViewById(R.id.tv);
tv.setText(ws());
}

//webService操作要访问网络,所以最好是使用线程来做,这里只是示例,所以就不考虑了
private String ws(){
String result="";
try{
SoapObject request=new SoapObject(NameSpace,MethodName);//NameSpace
//webService方法中的参数,这个根据你的webservice来,可以没有。
//请注意,参数名称和参数类型,客户端和服务端一定要一致,否则将可能获取不到你想要的值
//request.addProperty("x",5);
//request.addProperty("y", 6);
SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet=true;//访问.NET的webservice
envelope.setOutputSoapObject(request);
HttpTransportSE ht=new HttpTransportSE(url);
ht.call(soapAction, envelope);//调用call方法,访问webservice
if(envelope.getResponse()!=null){
SoapPrimitive response=(SoapPrimitive)envelope.getResponse();
//如果要返回对象集合,在服务端可以将对象或集合序列化成json字符串返回,这边再反序列化成对象或集合
result=response.toString();//这里获得了webService的返回值
}
}catch(Exception e){
result=e.getMessage();
}
return result;
}
}

上海J2EE一般都是外包,我也在上海,搞.NET,7月的时候想找个全职Android找不到。备受打击下还是找了个.NET的工作。
android的小项目一般还是容易搞定的,无非就是用listview或GridView展示一下数据,通过webservice和服务器进行一下交互,最多再上传或者下载一下文件。呵呵~
丫头嗳 2012-10-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

引用楼主 的回复:
一个简单的用户登录,调用webservice接口

activity里面:

public void login(){
final String uname=et_username.getText().toString().trim();
final String upwd=et_userpwd.getText().toString().trim();
if……
[/Quote]

谢谢,我试试、
丫头嗳 2012-10-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

1.确保webservice在网络上可以访问,你用浏览器访问一下,看看是否正常

2.程序有访问网络权限,是否添加了访问网络的权限

3.你的项目是不是4.1版本的?如果是,修改 manifest的配置就好了,之前的版本是不需要修改默认的配置的 ,4.1的 制定 最低的 sdk就可以了 ,制定 目的sdk的 话 就 会抛 异常了

4.设置一下超时,看看抛神马异常,再去解决

5……
[/Quote]

艾,你懂的真多,我确实是不会搞呀,看到网上人家那么写我就那么写,呵呵。工作经验少,十一前很不好找工作,我是没得办法才来搞Android的、 在上海、、、有好机会我还是想搞web
AMinfo 2012-10-11
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
一个简单的用户登录,调用webservice接口

activity里面:

public void login(){
final String uname=et_username.getText().toString().trim();
final String upwd=et_userpwd.getText().toString().trim();
if("".equals(un……
[/Quote]

找到
e.printStackTrace();
这一行

在这行后面加上
Log.i("test", "出错:" + e.getMessage());


然后看一下LogCat里面是否有出错提示信息。
fire_fire_fire 2012-10-11
  • 打赏
  • 举报
回复
1.确保webservice在网络上可以访问,你用浏览器访问一下,看看是否正常

2.程序有访问网络权限,是否添加了访问网络的权限

3.你的项目是不是4.1版本的?如果是,修改 manifest的配置就好了,之前的版本是不需要修改默认的配置的 ,4.1的 制定 最低的 sdk就可以了 ,制定 目的sdk的 话 就 会抛 异常了

4.设置一下超时,看看抛神马异常,再去解决

5.你说你是搞J2EE的,envelope.dotNet=true;意思是是否是dotNet WebService.你是访问Java的还是.NET的?

PS:J2EE待遇还行啊,比.NET好。在哪个城市呢?
丫头嗳 2012-10-11
  • 打赏
  • 举报
回复
我知道代码都是差不多的,可就是我的不知道是什么问题、、、

PS:以前没搞过Android,是搞Java web的,现在工作不好找呀,没办法跑来搞Android,boss只给了一星期学习,然后开始一个人负责一个小项目、
fire_fire_fire 2012-10-11
  • 打赏
  • 举报
回复
参考:http://download.csdn.net/detail/fire_fire_fire/4311576
PS:美女,一个星期就上手了,不错啊

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧