首先,服务器端已经存在一个项目,该项目基于SSH,已经部署在tomcat上并且正在运行了.我在这个项目的action层新建了一个包,该包主要是Struts2的一些action,只是这些action不是返回某些view,而是返回json,定义这些action的XML配置如下:

<packagename="mobie"namespace="/mobie"extends="json-default"><actionname="login"class="loginAction"method="login"><!--设置返回类型为json--><resultname="success"type="json"><!--将对象放进一个map里面,这个map作为该action的一个field,必须具有setter个getter方法这样就可以向客户端返回整个实体的json对象,这个在需要返回复杂的组和对象是比较实用--><paramname="root">dataMap</param></result></action></package>

action类:

importjava.util.HashMap;importjava.util.Map;importcom.jeanselam.intf.UserService;importcom.jeanselam.pojo.User;importcom.opensymphony.xwork2.ActionSupport;publicclassLoginActionextendsActionSupport{privatestaticfinallongserialVersionUID=1L;privateStringemail;privateStringpassword;privateUseruser;privateMap<String,Object>dataMap=newHashMap<String,Object>();privateUserServiceuserService;//业务接口,不写出来,省略publicMap<String,Object>getDataMap(){returndataMap;}publicvoidsetDataMap(Map<String,Object>dataMap){this.dataMap=dataMap;}publicStringgetEmail(){returnemail;}publicvoidsetEmail(Stringemail){this.email=email;}publicStringgetPassword(){returnpassword;}publicvoidsetPassword(Stringpassword){this.password=password;}publicUsergetUser(){returnuser;}publicvoidsetUser(Useruser){this.user=user;}publicUserServicegetUserService(){returnuserService;}publicvoidsetUserService(UserServiceuserService){this.userService=userService;}publicStringlogin()throwsException{//System.out.println("---------------------------移动端登陆");System.out.println("---------------------------移动端登陆"+email+"\t"+password);user=userService.login(email,password);dataMap.put("user",user);if(user!=null){returnSUCCESS;}returnERROR;}}


然后,在服务器端和android端都应该有相同的一个实体类,并且解析的json的字段名必须和该类的field名一致:

importjava.util.Set;/***Createdbylinon15-11-8.**/publicclassUser{privateIntegerid;privateStringemail;privateStringpassword;privateIntegergender;privateStringtel;privateStringnickname;privateIntegerisActive;//是否处于激活状态:1是0否privateAddressaddress;privateSet<Order>orders;//一对多publicIntegergetId(){returnid;}publicvoidsetId(Integerid){this.id=id;}publicStringgetEmail(){returnemail;}publicvoidsetEmail(Stringemail){this.email=email;}publicStringgetPassword(){returnpassword;}publicvoidsetPassword(Stringpassword){this.password=password;}publicIntegergetGender(){returngender;}publicvoidsetGender(Integergender){this.gender=gender;}publicStringgetTel(){returntel;}publicvoidsetTel(Stringtel){this.tel=tel;}publicStringgetNickname(){returnnickname;}publicvoidsetNickname(Stringnickname){this.nickname=nickname;}publicIntegergetIsActive(){returnisActive;}publicvoidsetIsActive(IntegerisActive){this.isActive=isActive;}publicAddressgetAddress(){returnaddress;}publicvoidsetAddress(Addressaddress){this.address=address;}publicSet<Order>getOrders(){returnorders;}publicvoidsetOrders(Set<Order>orders){this.orders=orders;}@OverridepublicStringtoString(){return"User{"+"id="+id+",email='"+email+'\''+",password='"+password+'\''+",gender="+gender+",tel='"+tel+'\''+",nickname='"+nickname+'\''+",isActive="+isActive+",address="+address+",orders="+orders+'}';}}


然后主要开发android端,在android端我的思路大概是这样的:通过http协议访问服务器端的action,服务器返回json,然后android接受json后,通过解析json构造出实例,然后显示在activity上反馈给用户.于是,在android端的主要工作就是解析json和显示数据的问题了,而解析json的工作可以通过某些包来做比较方便.

新建android项目:导入一下jar包:

界面文件:

<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"android:paddingBottom="@dimen/activity_vertical_margin"tools:context="com.ddd3.ddd3.MainActivity"android:orientation="vertical"android:background="@color/colorBackground"><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="JeanseLam™"android:textSize="35dp"android:textColor="@color/colorText"/><Viewandroid:layout_width="match_parent"android:layout_height="1dip"android:background="#696969"android:layout_marginTop="5dp"android:layout_marginBottom="5dp"/><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/mainUrl"android:textSize="20dp"android:textColor="@color/colorText"/><Viewandroid:layout_width="fill_parent"android:layout_height="40dp"></View><TextViewandroid:id="@+id/loginInfo"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="15dp"android:textColor="@color/colorError"/><EditTextandroid:id="@+id/email"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginBottom="10dp"android:hint="TypeyourEmail"/><EditTextandroid:id="@+id/password"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginBottom="10dp"android:password="true"android:hint="Enterpassword"/><Buttonandroid:id="@+id/btn_login"android:layout_width="fill_parent"android:layout_height="wrap_content"android:background="@drawable/button_selector"android:text="登录"android:textColor="@color/colorBtnText"android:layout_marginBottom="10dp"/><Buttonandroid:id="@+id/btn_exit"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="退出"android:background="@drawable/button_selector"android:textColor="@color/colorBtnText"android:layout_marginBottom="10dp"/><TextViewandroid:id="@+id/btn_register"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="新用户?"android:textColor="@color/colorText"android:autoLink="all"/></LinearLayout>

activity:

packagecom.ddd3.ddd3;importandroid.support.v7.app.AppCompatActivity;importandroid.os.Bundle;importandroid.util.Log;importandroid.view.View;importandroid.widget.Button;importandroid.widget.EditText;importandroid.widget.TextView;importcom.android.volley.DefaultRetryPolicy;importcom.android.volley.Request;importcom.android.volley.RequestQueue;importcom.android.volley.Response;importcom.android.volley.VolleyError;importcom.android.volley.toolbox.JsonObjectRequest;importcom.android.volley.toolbox.StringRequest;importcom.android.volley.toolbox.Volley;importcom.ddd3.entity.User;importcom.ddd3.service.JSONService;publicclassMainActivityextendsAppCompatActivity{privateEditTextemailText;privateEditTextpasswordText;privateButtonbtn_login;privateButtonbtn_exit;privateTextViewinfo;privateRequestQueuerequestQueue;//用于网络网络请求,每一个activity只需要一个requestQueue//privateUserServiceuserService;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}privatevoidinitView(){emailText=(EditText)findViewById(R.id.email);passwordText=(EditText)findViewById(R.id.password);btn_login=(Button)findViewById(R.id.btn_login);btn_exit=(Button)findViewById(R.id.btn_exit);info=(TextView)findViewById(R.id.loginInfo);btn_login.setOnClickListener(newButtonListener());btn_exit.setOnClickListener(newButtonListener());requestQueue=Volley.newRequestQueue(this);//实例化请求队列}classButtonListenerimplementsView.OnClickListener{@OverridepublicvoidonClick(Viewv){if(v.getId()==btn_login.getId()){Stringemail=emailText.getText().toString();Stringpassword=passwordText.getText().toString();if(email.equals("")||password.equals("")){info.setText("请输入您的Email和密码");}else{//服务端urlStringurl="http://192.168.56.1:8080/JeanseLam/mobie/login?email="+email+"&password="+password;JsonObjectRequestjr=newJsonObjectRequest(Request.Method.GET,url,null,newResponse.Listener<org.json.JSONObject>(){@OverridepublicvoidonResponse(org.json.JSONObjectjsonObject){//System.out.println("----------------"+jsonObject.toString());StringjsonStr=jsonObject.toString();//由于服务器端传过来的date格式gson默认是无法解析的,所以在创建gson的时候就要对date的格式进行设置Gsongson=newGsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss").create();//在服务器端传过来的json是包含类名的,应该做些字符串的处理,把类名去掉才可解析成实体类,否则解析的类的所有属性值均为null,我实验过了Useruser=gson.fromJson(jsonStr.substring(jsonStr.indexOf(":")+1,jsonStr.length()-1),newTypeToken<User>(){}.getType());//构造实例//System.out.println("-------------------"+user.toString());application.getSession().put("user",user);//用户登陆信息作为全局变量Intentintent=newIntent(MainActivity.this,IndexActivity.class);//转到主页startActivity(intent);}},newResponse.ErrorListener(){@OverridepublicvoidonErrorResponse(VolleyErrorerror){System.out.println("-------------------"+error.getMessage());}});jr.setRetryPolicy(newDefaultRetryPolicy(20*1000,1,1.0f));requestQueue.add(jr);}}elseif(v.getId()==btn_exit.getId()){android.os.Process.killProcess(android.os.Process.myPid());}}}}




需要注意的是:由于访问本地项目,url的地址为:192.168.56.1:8080而不是localhost或其他


更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. android activity 跳转与值
  3. Android四大组件:BroadcastReceiver史上最全面解析
  4. Android图片加载框架最全解析(一),Glide的基本用法
  5. 框架相关(MVP+Rxjava+Retrofit+OkHttp+Picasso+EventBus+ButterK
  6. Android(安卓)Animation 用法解析
  7. Android开罐头———外部存储与内部存储完全解析
  8. android私有文件夹的访问
  9. Android(安卓)API Demo实例解析

随机推荐

  1. Android 控件二 Button
  2. 【Android(安卓)开发教程】自定义Content
  3. Android Stuido 使用WIFI测试
  4. android activity 生命周期
  5. Android控件之Textview
  6. Android AVD Manager无法识别真机,adb驱动
  7. Android WIFI 学习整理+搜索到资料
  8. android 仿微信底部弹出菜单
  9. Android 离线用户的灰色头像处理
  10. Android(安卓)SDK 源码下载