报错信息:NetworkOnMainThreadException

如果你架构了一个webservice,用android模拟器的浏览器打开网页没有问题,但是模拟器里的项目就是死活连不上,那你得好好看看你的HTTP请求是否放到了主线程里,android在4.0之后已经不允许在主线程执行http请求了。

遇到这个情况最好就开多一个线程吧。

有一个很不推荐的方法解决,就是强制执行:

if (android.os.Build.VERSION.SDK_INT > 9) {StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();StrictMode.setThreadPolicy(policy);
}

其他连接本地服务器的注意事项还有:

1.模拟器是没办法识别Localhost的,127.0.0.1是连接模拟器本身,如果要连接本地的电脑IP,需要使用10.0.2.2这个地址。

2.连接外网需要在manifest中增加上网的权限。

一个登录的小例子,使用了httpclient,在此就不贴多余的代码了:

客户端:

添加登录按钮的事件:判断帐号密码是否为空,获取帐号和密码并发送
new onClickListener(){void onClick(view v){String username=username.getText().toString();String password=password.getText().toString();if(null != username && null != password && username.length>0 && password.length>0){//调用doLogin方法来发送帐号密码到服务器,并得到返回值String ret =doLogin(username,password);//如果返回值不为空,则在tv文本框显示结果                    if(null != ret){tv.setText("返回结果为:"+ret);}else{tv.setText("请求失败!")}}     }
}private String doLogin(String username,String password){try{     //创建参数List并添加值,实际犹如xxxxx:8080/doLogin?username=xx&password=xx//注意是BasicNameValuePairList<NameValuePair> params =new ArrayList<NameValuePair>();params.add(new BasicNameValuePair("username",username));params.add(new BasicNameValuePair("password",password));//创建post,切记模拟器不能识别localhost,要换成10.0.2.2HttpPost post =new     HttpPost("http://10.0.2.2:8080/TestServer/doLogin");//为post设置Entity,通过UrlEncodedFormEntity这个方法把params转化为HttpEntitypost.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF-8));//创建服务器响应对象responseHttpResponse httpResponse;//创建了客户端对象Client并利用它执行了post,服务器根据传输的post做出响应的返回值,返回值赋予给responsehttpResponse=new DefaultHttpClient().execute(post);//得到响应对象的状态Code,SC_OK=200,也就是访问页面成功,404则是找不到页面if(httpResponse.getStatusLine().getStatusCode == HttpStatus.SC_OK){//Entity.Utils工具类的toString把httpResponse里的Entity转化为String,并返回该值String result = EntityUtils.toString(httpResponse.getEntity());return result;}}catch(..){...}}

服务器:
创建一个servlet:

 public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//获取接收到的值String username=request.getParameter("username");String password=request.getParameter("password");//设置编码request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");response.setHeader("Content-Type", "text/html;charset=UTF-8");response.setContentType("text/html");PrintWriter out = response.getWriter();try {//加载jdbc驱动Class.forName("com.mysql.jdbc.Driver");//连接数据库,这里我用的是mysqlConnection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/TestServer","root","root");//创建陈述对象Statement st=conn.createStatement();//编写sql语句String sql="Select * from User Where username='"+username+"' and password='"+password+"'";//使用陈述对象执行sql语句,并把返回值赋给rsResultSet rs=st.executeQuery(sql);//如果返回值不为空,则用out传输过去“登陆成功”if(rs.next()!=false){out.print("登录成功");System.out.print("登录成功");}else{out.print("帐号或密码错误!");System.out.print("登录失败");}//关闭连接rs.close();st.close();conn.close();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}out.flush();out.close();}

android模拟器连接不到本地服务器相关推荐

  1. android模拟器访问本地web应用,从 iOS 模拟器和 Android 模拟器连接到本地 Web 服务...

    从 iOS 模拟器和 Android 模拟器连接到本地 Web 服务Connect to local web services from iOS simulators and Android emul ...

  2. android模拟器连接PC

    一,前言 android模拟器上跑个客户端,这个客户端去连接PC上的服务器,然后过程采用udp方式. 本文不涉及PC上的客户端去连接android模拟器上的服务器. 环境配置: android SDK ...

  3. 逍遥Android模拟器连接studio调试项目

    逍遥Android模拟器连接studio调试项目 1.在模拟器的/MEmu目录下 打开cmd命令窗口 2.在命令框里输入 : adb start-server 3.找到Android SDK的too路 ...

  4. 如何让你的android模拟器连接上你电脑的网络

    一.在命令行模式下(cmd)下输入adb shell 如果报错,一是"adb不是内部命令或者外部命令,也不是可运行的程序或批处理文件",这个是环境变量没有配置好,adb.exe在模 ...

  5. Android 模拟器连接 USB 设备

    Android Genymotion 连接 USB 设备 一.需要的软件 Genymotion. Oracle VirtualBox.VirtualBox 扩展包(连接 USB 需要) 二.详细步骤 ...

  6. mysql80连接不上本地服务器_Windows Server 2016 远程桌面本地连接不上

    阿里云控制台可以远程连接,本地连接报错 解决方法: 下载Windows安全更新 1.通过远程连接功能登录Windows实例. 说明 如果您的本地客户端是Windows系统,请同样执行如下操作. 2.搜 ...

  7. mysql80连接不上本地服务器_小白教程:ubuntu服务器安装jupyter notebook, 并能够实现本地远程连接

    1. terminal 敲击 pip3 install jupyter 此操作安装 jupyter notebook,若已经安装过的可以跳过这一步. 2. terminal 敲击 jupyter no ...

  8. Android 模拟器连接异常:Unable to connect to ADB server

    简介 在使用Android Studio开始的过程是,偶尔会突然出现一只在检测设备,导致无法进行运行的调试的情况,本文记录下解决方法 现象描述 在启动Android Studio后,在设备状态栏中一直 ...

  9. MYSQL连接不上本地服务器localhost

    1 打开DOS窗口,输入mysql连接命令时报错Can't connect to MySQL server on 'localhost' (10061) 2 上面出现的问题原因是我们的本地服务没打开, ...

  10. MySQL连接不了本地服务器原因

    1.运行进入数据库报错: Could not acquire management access for administration RuntimeError: Target host is con ...

最新文章

  1. C#线程间操作无效: 从不是创建控件 XX 的线程访问它
  2. java查看sql视图_数据库的查询与视图
  3. 在Java 7里如何对文件进行操作
  4. mvc 实例 php,来写一个简单的PHP MVC结构
  5. 你能想到几种方式实现数组扁平化(越多越好)
  6. 如何恢复cuteftp pro 7.0的站点数据?
  7. 南大计算机课程,南京大学 计算机系统基础 课程实验 2018(PA0-1)
  8. k8s笔记20--基于 K8S 的 cicd 概述
  9. 为村上隆直播做同传的火山翻译:成立仅3年,拿下5项世界冠军
  10. cherry键盘使用备忘
  11. win2012 r2/win2016修改域密码复杂度策略
  12. 废旧光驱拆解与丝杆测试
  13. Searchable Encryption for Healthcare Clouds:A Survey 翻译
  14. java pdf设置页码_Java 添加页码到PDF文档
  15. 既然有MySQL了,为什么还要有MongoDB?
  16. PDF Redactor - 涂黑屏蔽PDF文字让敏感内容不可读的软件工具
  17. Python-维度dim的定义及其理解使用
  18. 设置电子围栏 高德地图_地理围栏-API文档-开发指南-Web服务 API | 高德地图API
  19. eclipse oxygen配置tomcat
  20. Linux系统简介与深度解析

热门文章

  1. 【翻译】Flux安全审计已经结束
  2. 沙耶的玩偶(doll)
  3. win系统自带校验命令
  4. web前端--面试题
  5. Ubuntu 实时网速查看命令
  6. python解密sg11加密_linux下kangle的php安装sourceguardian SG11加密解密扩展
  7. Python-贪心算法 田忌赛马
  8. office2007打开word提示《向程序发送命令时出现问题》
  9. 【RPC Dubbo】本地存根和本地伪装
  10. 静态小米官网首页仿站笔记