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/
以前写在博客园的文章
原因:根据调试信息,截图如下:
可以知道,原因就是不能在主线程里面访问网络,网络请求不应该在主线程中进行,这样会阻塞主线程。要另外开一耳光线程来做网络请求。
解决方法,把网络请求的代码放到新开的线程中执行。我的解决代码如下:
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/
以前写在博客园的文章
相关文章推荐
- android屏幕适配
- android 实践问题记录- 2015/06/09
- android:imeOptions属性
- android activity生命周期
- Android开源项目分类汇总
- Android之SQLiteOpenHelper
- 拒绝ndk-build (Android Native Development Kit)
- Android 编程下设置 Activity 切换动画
- Android 高仿 QQ5.0 侧滑菜单效果 HorizontalScrollView
- Android Activity活动1
- Android获取文件夹路径
- Android 属性动画(Property Animation) 完全解析 (上)
- Android 属性动画(Property Animation) 完全解析 (下)
- Android设备data目录下的文件在DDMS下的File Explorer读不到
- Android中定时执行任务的三种实现方法
- Android Studio编码问题
- 完美解决android运行程序java.lang.ClassNotFoundException错误
- Android学习十二:自定义控件学习
- Android 突破 65K Methods
- Android系统启动流程