Android从4.0版本开始,就不建议Main线程直接进行网络通信。
所以,在用高版本开发网络通信,无论是socket的长连接,还是http的短连接,都使用多线程的方式去通信,以防止UI界面加载等待,或者卡死。
下面就说一种Android的HTTP通信,服务器段用的是SpringMVC。
为什么选择SpringMVC,因为当你的WebService使用SpringMVC的话,会出现服务器接收不到请求参数的问题。对于一些新手而言,这可能非常致命,那如果采用最基础的servlet去搭建服务器端的话,会占用大量的开发时间。
Android端:
此处,我存在两个界面,一个LogingActivity和MainActivity。 在LogingActivity请求服务器成功后,进入mainActivity。
Android的页面布局我就不粘出来了,只有两个输入框,和一个按钮。
public class LoginActivity extends Activity { private EditText name,psd; private Button login; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); name = (EditText) findViewById(R.id.ed_username); psd = (EditText) findViewById(R.id.ed_psd); login = (Button) findViewById(R.id.btnLogin); login.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //发送请求 //4.0开始不支持直接访问。 final Handler myHandler = new Handler(){ @Override public void handleMessage(Message msg) { String result = msg.obj.toString(); System.out.println(result); if(!result.equals("")){ Intent intent = new Intent(LoginActivity.this,MainActivity.class); startActivity(intent); }else{ Toast.makeText(LoginActivity.this, "错误", Toast.LENGTH_SHORT).show(); } super.handleMessage(msg); } }; new Thread(new Runnable() { @Override public void run() { LogingToServer login = new LogingToServer(); String result = login.doPost(name.getText().toString(), psd.getText().toString()); //发送消息 Message msg = new Message(); msg.obj = result; myHandler.sendMessage(msg); } }).start(); } }); } }
对于这一块的知识,网上有很多相关的资料,视频。可以去看一下。并不难。占用不了几分钟,我这里就不讲了。
MainActivity页面,也只是一个普通布局,随便写都可以,空白也行。
在上面的代码中,会看到我使用了一个类LogingToServer类,下面是这个类的代码
public class LogingToServer { private String url = "http://192.168.2.21:8080/AndroidServer/user/login"; public String doGet(String name,String psd){ return doPost(name,psd); } public String doPost(String name,String psd){ String result = ""; HttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url); HttpEntity entity; HttpResponse response; //设置头 String agent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.63 Safari/534.3"; httpPost.setHeader("User-Agent", agent); List<NameValuePair> pairs = new ArrayList<NameValuePair>(); pairs.add(new BasicNameValuePair("userId", name)); pairs.add(new BasicNameValuePair("userPassword", psd)); for (NameValuePair nameValuePair : pairs) { System.out.println(nameValuePair.getName() + "--------" + nameValuePair.getValue()); } try { httpPost.setEntity(new UrlEncodedFormEntity(pairs,"UTF-8")); response = httpClient.execute(httpPost); entity = response.getEntity(); if(entity != null){ InputStream is = entity.getContent(); BufferedReader in = new BufferedReader(new InputStreamReader(is)); StringBuffer buffer = new StringBuffer(); String line = ""; while((line = in.readLine()) != null){ buffer.append(line); } is.close(); result = buffer.toString(); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return result; } }
该处一定要注意我唯一写注释的地方,因为,这个地方关系到你 SpringMVC获取参数正不正常。
url改为自己webService路径即可。
下面是我服务端的代码。
@Controller @RequestMapping("/user") public class UserController { @RequestMapping("/login") @ResponseBody public Map<String, Object> login(HttpServletRequest request,HttpServletResponse response,ModelAndView modelAndView,RedirectAttributes attr,User user){ System.out.println("-----------"); Map<String,Object> map = new HashMap<String, Object>(); map.put("code", "111111111"); return map; } }
在这里我接收参数用的是一个实体类。里面包含两个字段,也就是Android传的两个参数名。userId和userPassword。 如果你不太熟悉SpringMVC的话,那该实体类这两个字段名一定要与Android穿的两个参数名完全一样,否则接收不到。
Ok,自己测试一下吧,如果有什么不明白,可以留言。
相关推荐
乐鲜电商平台全套系统开发,涉及技术java SpringMVC+MyBatis+Angualr1.3+jQuery+Android+ReatNative 软件开发设计:PHP、QT、应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言...
项目的核心是通过Android移动端和基于SSM(Spring、SpringMVC、MyBatis)框架的后台管理系统,实现用户之间的物品交易。 一、Android移动应用开发 Android作为全球最流行的智能手机操作系统之一,为开发者提供了...
在本项目中,开发者利用了Android、JSON、SSM(Spring、SpringMVC、MyBatis)和MySQL四种技术,构建了一个模拟云备份与恢复的系统。这个系统旨在展示如何在移动设备(Android端)与服务器之间进行数据的高效安全交换...
Android客户端部分可能是一个简单的应用,用于与Spring MVC服务器通信。它可能使用HTTP库,如OkHttp或Retrofit,来发起网络请求,获取或发送数据。客户端可能使用Android的SQLite数据库来缓存服务器响应的数据,或者...
【标题】:“Tomcat+Android简单音乐播放器” 在IT领域,开发一款音乐...项目涵盖了服务器端开发、数据库管理、移动应用开发以及网络通信等多个关键知识点,对于学习这些技术的开发者来说,这是一个很好的实践案例。
为解决这一问题,基于Android系统的高考报考指南APP应运而生,它结合了移动通信和网络技术,旨在为考生提供更加全面、个性化的报考建议。 这款APP采用了Java编程语言,利用Android Studio进行移动端的开发,其...
JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,被广泛应用于Android与服务器之间的通信,因为它易于阅读和编写,同时也方便机器解析和生成。本篇文章将深入探讨Android客户端如何与服务器端进行...
标题中的“通过scrcpy录屏Android设备并显示到浏览器上,实现浏览器控制Android设备”涉及到的技术主要包括Android设备的远程控制、屏幕录制以及Java SpringMVC框架的应用。在这个项目中,开发者利用scrcpy工具实现...
此外,Android的网络库如Retrofit或Volley可能用于与后端SSM服务进行通信。 7. **数据库设计**:项目可能包含用户表、音乐信息表、评论表等数据库表,需要进行合理的数据库设计,确保数据的一致性和高效性。MySQL...
11. Service Socket 、Client Socket 通信技术(已经做过GPRS数据获取,并用到了项目中) 12. 提供大量工具类,可以直接使用 13. Maven项目构建,您可以直接做架构,可以提升自己的学习能力,使您成为真正的架构师。...
在本文中,我们将探讨如何使用 SpringMVC 框架来开发 WebService 接口,这在移动应用(如 Android)与服务器之间的通信中非常常见。让我们逐步了解这个过程。 1. **项目创建**: 首先,我们需要创建一个标准的 ...
服务器模块则基于tomcat + springMVC + hibernate + mysql的架构,通过rxjava+retrofit+Gson处理客户端与服务器之间的数据交换,简化了数据库操作,实现了高效的数据处理与存储。 此外,应用还具备基本的即时通讯...
网络与通信:数据传输、信号处理、网络协议、网络与通信硬件、网络安全网络与通信是一个非常广泛的领域,它涉及到计算机科学、电子工程、数学等多个学科的知识。 云计算与大数据:数据集、包括云计算平台、大数据...
在本资源包“安卓网站交互JSONxmlWebserviceUPnP相关-Android客户端SSM框架服务器端开发案例实践.rar”中,包含的是...通过研究和理解案例中的代码,开发者可以更好地掌握Web服务的实现,以及Android应用如何与之通信。
在Android开发领域,创建一个新闻客户端是一项常见的任务,它涉及到网络数据获取、UI设计和用户交互等多个关键知识点。本文将详细解析"android新闻"客户端的实现过程,以及涉及的主要技术。 首先,我们要理解的是...
1. "android":表示项目是使用Android操作系统平台的SDK和相关工具进行开发的,可能涉及到Activity管理、Intent通信、布局设计、资源管理等方面。 2. "软件/插件":暗示项目可能包含一些自定义的Android组件或者第三...
本项目基于Android平台,结合SSM(Spring、SpringMVC、MyBatis)框架,设计并实现了一个功能完善的停车系统,旨在优化停车流程,提高车位利用率,为用户提供便捷的停车体验。 一、系统架构设计 该停车系统分为...