一个简单的用户登录,调用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也是刚学了一个星期、

解决方案 »

  1.   

    参考:http://download.csdn.net/detail/fire_fire_fire/4311576
    PS:美女,一个星期就上手了,不错啊
      

  2.   

    我知道代码都是差不多的,可就是我的不知道是什么问题、、、PS:以前没搞过Android,是搞Java web的,现在工作不好找呀,没办法跑来搞Android,boss只给了一星期学习,然后开始一个人负责一个小项目、
      

  3.   

    1.确保webservice在网络上可以访问,你用浏览器访问一下,看看是否正常2.程序有访问网络权限,是否添加了访问网络的权限3.你的项目是不是4.1版本的?如果是,修改 manifest的配置就好了,之前的版本是不需要修改默认的配置的 ,4.1的 制定 最低的 sdk就可以了 ,制定 目的sdk的 话 就 会抛 异常了4.设置一下超时,看看抛神马异常,再去解决5.你说你是搞J2EE的,envelope.dotNet=true;意思是是否是dotNet WebService.你是访问Java的还是.NET的?PS:J2EE待遇还行啊,比.NET好。在哪个城市呢?
      

  4.   


    找到
    e.printStackTrace();
    这一行在这行后面加上
    Log.i("test", "出错:" + e.getMessage());
    然后看一下LogCat里面是否有出错提示信息。
      

  5.   


    艾,你懂的真多,我确实是不会搞呀,看到网上人家那么写我就那么写,呵呵。工作经验少,十一前很不好找工作,我是没得办法才来搞Android的、  在上海、、、有好机会我还是想搞web
      

  6.   

    你看看和你的有区别吗?注意,我的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和服务器进行一下交互,最多再上传或者下载一下文件。呵呵~
      

  7.   


    我感觉我写的跟你的一样,没什么问题,可能服务器端那边结构有问题吧。哎,我不想搞Android、
      

  8.   

    在服务端建立一个简单的方法,就返回简单的数字,首先保证能在浏览器上能调用,然后在android试着调用一下.
    1.如果可以调用就是服务端那边的login方法有问题(必须保证android这边的参数传递没有问题,名称,类型,传递顺序)
    2.如果连这个简单方法都不能调用就是android 端的问题.如果服务端是.NET做的就好办了,打个断点,然后在vs上调试->附加到进程->w3wp.exe->附加 然后你只要在android上调用login方法,就会进入断点。这样你就可以调试该方法了。搞android比较麻烦。有时候还会有内存泄漏等问题,毕竟可以算是嵌入式开发嘛,呵呵~
    美女,看看上面的方法对你有用不?