您的位置:首页 > 移动开发 > Android开发

Android 模拟器测试远程服务器成功,但是到真机上测试一点反应没有的解决办法

2015-06-10 00:37 204 查看
问题描述:android客户端,.net服务器,我是使用webservice交互。使用登陆模块测试,转递用户名和密码,请求成功与否接口都会返回json数据信息。在模拟器上测试,一切都正常,然后放到手机里面测试,怪了,一点返回数据都没有,不管是成功还是失败都没有返回任何数据。

原因:根据调试信息,截图如下:



可以知道,原因就是不能在主线程里面访问网络,网络请求不应该在主线程中进行,这样会阻塞主线程。要另外开一耳光线程来做网络请求。
解决方法,把网络请求的代码放到新开的线程中执行。我的解决代码如下:

new Thread(){
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
//定义登录需要的参数名和参数值
String[] paramsName={"UserName","md5Password","DBName","Server"};
String[] paramsValue={loginName.getText().toString(),MD5.getMD5ofStr(loginPwd.getText().toString()),loginDatabase.getSelectedItem().toString(),loginServer.getSelectedItem().toString()};
//使用webservice请求登录,返回json字符串信息
String result=WebServiceUtil.getDataByParams(Commom.uri,paramsName,paramsValue);
Message message=new Message();
Bundle bundle=new Bundle();
bundle.putString("result", result);
message.setData(bundle);
handler.sendMessage(message);
}

}.start();

handler=new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
resultString=msg.getData().getString("result");
Log.i("Thread()--resultString:", resultString);
//定义解析json信息后放入map中的key名,需要和返回的json中的key相同
String[] xkeys= new String[] { "UserID", "LoginName", "UserName"};
//调用JsonParse.JsonStrParse3方法解析json,并返回list
ArrayList<HashMap<String, Object>> loginInfo=JsonParse.JsonStrParse3(resultString, xkeys);

//如果返回的失败的信息,则ArrayList中没有任何的元素,否则ArrayList中就是上面定义的xkeys对应的value信息
if (loginInfo!=null&&loginInfo.size()!=0&&!loginInfo.get(0).toString().trim().equals("")) {
//把登陆信息保存在Application里面,只标注是否已经登陆
((MyApplication)getApplication()).setUserId(loginInfo.get(0).get("UserID").toString());
((MyApplication)getApplication()).setLoginName(loginInfo.get(0).get("LoginName").toString());
((MyApplication)getApplication()).setUserName(loginInfo.get(0).get("UserName").toString());

//登录成功后,跳转到住界面
startActivity(new Intent(LoginActivity.this,MainActivity.class));
}else {
Toast.makeText(LoginActivity.this, "登录失败", Toast.LENGTH_SHORT).show();
}
}
};

好了,运行测试,一切都ok啦。

这篇文章在我的网易博客也发了:http://liangxianningstudy.blog.163.com/blog/static/168842477201332611143772/

以前写在博客园的文章
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: