`
张豆包
  • 浏览: 16716 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论
阅读更多

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,自己测试一下吧,如果有什么不明白,可以留言。

分享到:
评论

相关推荐

    乐鲜电商平台全套系统开发,涉及技术Angualr1.3+jQuery+Android+ReatNative.zip

    乐鲜电商平台全套系统开发,涉及技术java SpringMVC+MyBatis+Angualr1.3+jQuery+Android+ReatNative 软件开发设计:PHP、QT、应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言...

    基于Android+ssm社区闲置物品转让的设计与实现【附源码】

    项目的核心是通过Android移动端和基于SSM(Spring、SpringMVC、MyBatis)框架的后台管理系统,实现用户之间的物品交易。 一、Android移动应用开发 Android作为全球最流行的智能手机操作系统之一,为开发者提供了...

    Android+Json+SSM+MySQL模拟云备份云恢复:源码

    在本项目中,开发者利用了Android、JSON、SSM(Spring、SpringMVC、MyBatis)和MySQL四种技术,构建了一个模拟云备份与恢复的系统。这个系统旨在展示如何在移动设备(Android端)与服务器之间进行数据的高效安全交换...

    springmvc_ibatis_android

    Android客户端部分可能是一个简单的应用,用于与Spring MVC服务器通信。它可能使用HTTP库,如OkHttp或Retrofit,来发起网络请求,获取或发送数据。客户端可能使用Android的SQLite数据库来缓存服务器响应的数据,或者...

    tomcat+Android简单音乐播放器

    【标题】:“Tomcat+Android简单音乐播放器” 在IT领域,开发一款音乐...项目涵盖了服务器端开发、数据库管理、移动应用开发以及网络通信等多个关键知识点,对于学习这些技术的开发者来说,这是一个很好的实践案例。

    基于Android系统的高考报考指南APP的设计与实现.pdf

    为解决这一问题,基于Android系统的高考报考指南APP应运而生,它结合了移动通信和网络技术,旨在为考生提供更加全面、个性化的报考建议。 这款APP采用了Java编程语言,利用Android Studio进行移动端的开发,其...

    Android客户端与服务器端的json数据交互(内含大量知识点)

    JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,被广泛应用于Android与服务器之间的通信,因为它易于阅读和编写,同时也方便机器解析和生成。本篇文章将深入探讨Android客户端如何与服务器端进行...

    通过scrcpy录屏Android设备并显示到浏览器上,实现浏览器控制Android设备

    标题中的“通过scrcpy录屏Android设备并显示到浏览器上,实现浏览器控制Android设备”涉及到的技术主要包括Android设备的远程控制、屏幕录制以及Java SpringMVC框架的应用。在这个项目中,开发者利用scrcpy工具实现...

    基于SSM+Android的音乐论坛APP系统源码.zip

    此外,Android的网络库如Retrofit或Volley可能用于与后端SSM服务进行通信。 7. **数据库设计**:项目可能包含用户表、音乐信息表、评论表等数据库表,需要进行合理的数据库设计,确保数据的一致性和高效性。MySQL...

    Java源码 SpringMVC Mybatis Shiro Bootstrap Rest Webservice

    11. Service Socket 、Client Socket 通信技术(已经做过GPRS数据获取,并用到了项目中) 12. 提供大量工具类,可以直接使用 13. Maven项目构建,您可以直接做架构,可以提升自己的学习能力,使您成为真正的架构师。...

    springmvc开发webservice接口.docx

    在本文中,我们将探讨如何使用 SpringMVC 框架来开发 WebService 接口,这在移动应用(如 Android)与服务器之间的通信中非常常见。让我们逐步了解这个过程。 1. **项目创建**: 首先,我们需要创建一个标准的 ...

    毕业论文_李德生-5-81

    服务器模块则基于tomcat + springMVC + hibernate + mysql的架构,通过rxjava+retrofit+Gson处理客户端与服务器之间的数据交换,简化了数据库操作,实现了高效的数据处理与存储。 此外,应用还具备基本的即时通讯...

    重写网盘系统,基于SpringMVC、MySQL、Redis,计划同时完成web端和Android端.zip

    网络与通信:数据传输、信号处理、网络协议、网络与通信硬件、网络安全网络与通信是一个非常广泛的领域,它涉及到计算机科学、电子工程、数学等多个学科的知识。 云计算与大数据:数据集、包括云计算平台、大数据...

    安卓网站交互JSONxmlWebserviceUPnP相关-Android客户端SSM框架服务器端开发案例实践.rar

    在本资源包“安卓网站交互JSONxmlWebserviceUPnP相关-Android客户端SSM框架服务器端开发案例实践.rar”中,包含的是...通过研究和理解案例中的代码,开发者可以更好地掌握Web服务的实现,以及Android应用如何与之通信。

    android新闻

    在Android开发领域,创建一个新闻客户端是一项常见的任务,它涉及到网络数据获取、UI设计和用户交互等多个关键知识点。本文将详细解析"android新闻"客户端的实现过程,以及涉及的主要技术。 首先,我们要理解的是...

    基于Android技术的音乐论坛APP源码+说明文档

    1. "android":表示项目是使用Android操作系统平台的SDK和相关工具进行开发的,可能涉及到Activity管理、Intent通信、布局设计、资源管理等方面。 2. "软件/插件":暗示项目可能包含一些自定义的Android组件或者第三...

    基于android停车系统设计与实现+演示

    本项目基于Android平台,结合SSM(Spring、SpringMVC、MyBatis)框架,设计并实现了一个功能完善的停车系统,旨在优化停车流程,提高车位利用率,为用户提供便捷的停车体验。 一、系统架构设计 该停车系统分为...

Global site tag (gtag.js) - Google Analytics