搭建Android应用程序的服务器
这里写自定义目录标题
- 自建Android服务器
-
- 自己入手的介绍
- 选用的工具
- 知识储备
- 下面我们就来编写代码吧
- 服务端的编写
- 客户端的编写
- 结语
自建Android服务器
刚开始学习的小伙伴肯定不知道从哪里入手,觉着自建服务系写后台比较难,刚开始我也是这样觉着,不过搞了几天以后,觉着也也没想象中的那么难,就是刚开始的时候不知道从哪里入手,没有头绪才会觉着难,等有了一定的了解以后,就会觉着简单的多了。
自己入手的介绍
现在有很多云服务,不过我用的自己的电脑做的服务器,个人觉着比较好上手。如何择选就看个人需求吧,我只是为了测试。
我没有链接本地数据库,只是测试了能够C/S成功。
选用的工具
Tomcat,eclipse,Android studio
因为是Android开发,就搭建了java的服务器环境,用的jdk。
还有开发过程中选用的一些包,我都会贴出来。
(好吧,文件内容过大,没办法上传。。。需要的找我要吧)
知识储备
了解java ee的servlet
了解Android的OKhttp的网络请求
这里我放一篇帖子,觉着他的相关介绍挺详细的,我刚开始学习的时候也参考了他的,可以看一遍后了解下相关知识后再来看下边的。
下面我们就来编写代码吧
一、服务端代码的编写
二、客户端代码的编写
服务端的编写
1、eclipse下创建Maven工程
2、将工程进行升级到下图所示
3、创建一个servlet类,会自动生成相应的代码,然后也不需要进行相应的配置,可以直接进行编写代码了。
3、在pom.xml下的dependencies节点下添加下列依赖。因为服务端要返回json给客户端
net.sf.json-lib json-lib2.4 jdk15 com.alibaba fastjson1.2.24
4、后台Hello.java的。因为好多代码都是自动生成的,这里只需要了解get和post两个方法的异同就好了。下面就来看代码吧。
package servlets;import java.io.IOException;import java.io.PrintWriter;import java.util.HashMap;import java.util.Map;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.alibaba.fastjson.JSONObject;@WebServlet("/Hello")public class Hello extends HttpServlet {private static final long serialVersionUID = 1L public Hello() { super() }protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置数据的格式,避免出现乱response.setContentType("application/json;charset=utf-8"); response.setCharacterEncoding("UTF-8"); //获取客服端传递过来的数据 //这里注意下Username和Password要和客户端的保持一致String username = request.getParameter("Username").trim();String password = request.getParameter("Password").trim();//这个就自己查一下吧,我也不了解没就知道这样用。PrintWriter out = response.getWriter();//装换程json格式,以便于传递数据Map params = new HashMap<>();JSONObject jsonObject = new JSONObject();//这里就没有连接数据库,有需要的可以自己连接数据库//成功或者失败,返回的数据不一样if (username.equals("123") && password.equals("123")) params.put("Result", "success")}else {params.put("Result", "failed");jsonObject.put("params", params);//返回数据 out.write(jsonObject.toString());}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException doGet(request, response);}}
5、后台代码就写好了,部署到Tomcat服务器上,就可以用浏览器测试一下了。
可以用localhost:8080来测试,也可以用内网穿透来做。
我客户端用的是花生壳的内网穿透。
有下图显示,就证明服务器后台编写成功了。
客户端的编写
1、新建Android工程。
2、首先先搞一下相关的配置,免得搞着就忘了。
2.1
先设置联网许可
2.2在AndroidManifest.xml的application节点下加
android:usesCleartextTraffic=“true”
因为我们是http请求,不太安全,版本比较高的话,是不支持的,所以需要进行设置一下
android:usesCleartextTraffic="true"
2.3添加依赖。有很多用的都是Volley,我也用了,不过搞出来的范湖数据都是乱码,没搞明白,就不用了,如果有哪位大神能给解决,就感激不尽了。我这里用的是别人封装好的okhttputils。
如果有比较好的封装库,也可以给我推荐下,独乐了不如众乐乐,对吧嘿嘿
implementation 'com.alibaba:fastjson:1.1.71.androidimplementation 'com.squareup.okhttp3:okhttp:3.4.1'implementation 'com.zhy:okhttputils:2.6.2'
3、okhttputils的使用。先创建一个MyAplication的java.class文件,并继承Aplication,然后重写onCreate()。
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); OkHttpClient okHttpClient = new OkHttpClient.Builder() .connectTimeout(10000L, TimeUnit.MILLISECONDS) .readTimeout(10000L, TimeUnit.MILLISECONDS) .build(); OkHttpUtils.initClient(okHttpClient); }}
然后在AndroidManifest.xml的application节点下加android:name=".MyApplication"(我忘了加这个,好像也成功了,不过最好还是加一下)
android:name=".MyApplication"
4、编写界面。因为是测试,所以代码什么的就写的有点随意,见谅哈。
点击登录,就进行数据的post,并进行跳转。
查询按钮,连接了服务器的一个json文件,是测试是否能正常连接数服务器的并获取数据的(可以忽略)。
<?xml version="1.0" encoding="utf-8"?>
5、Login活动的代码。一些不重要的代码我就删除了。介绍就看注释吧
package com.example.volley;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;import com.zhy.http.okhttp.OkHttpUtils;import com.zhy.http.okhttp.callback.StringCallback;import org.json.JSONException;import org.json.JSONObject;import okhttp3.Call;public class Login extends AppCompatActivity { private EditText username; private EditText password; private Button login; private TextView tv_look; private Button bt_look; String result; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); initView(); login.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //获取控件里的数据 final String name = username.getText().toString().trim(); final String pass = password.getText().toString().trim(); //我的内网穿透的连接,需要改成自己的ip连接(可以是局域网的) String url = "http://3178.wicp.vip/Test/Hello"; ///刚刚看的别人封装的库 OkHttpUtils .get() .url(url) //加入用户名和密码,注意Username和Password和服务器端相一致 .addParams("Username", name) .addParams("Password", pass) .build() .execute(new StringCallback() { @Override public void onError(Call call, Exception e, int id) { tv_look.setText("请求失败" + e); } //请求成功的方法 @Override public void onResponse(String response, int id) { try { //注意params,与服务器返回的数据相一致 /* * 将返回的String转化成JSONObject,然后获取params数据 * */ JSONObject object = (JSONObject) new JSONObject(response).get("params"); //得到Result的数据 result = object.getString("Result"); tv_look.setText("请求成功==" + result); } catch (JSONException e) { e.printStackTrace(); } //判断返回的数据是成功该是失败 if (result.equals("success")) { //做自己的登录成功操作,如页面跳转 //可以换成Toast或者tv_look.setText Intent intent = new Intent(Login.this,MainActivity.class); //给下一个活动产地数据 intent.putExtra("name",name); startActivity(intent); } else { //做自己的登录失败操作,如Toast提示 //toas(); } } }); } }); } private void toas() { Toast.makeText(this, "登录失败", Toast.LENGTH_SHORT).show(); } private void initView() { username = findViewById(R.id.username); password = findViewById(R.id.password); login = findViewById(R.id.login); tv_look = findViewById(R.id.tv_look); bt_look = findViewById(R.id.bt_look); }}
6、其他的就不写了,对于传递的数据,这样就可以获取了。
Intent intent = getIntent(); String username=intent.getStringExtra("name");
结语
到这里就结束了,java环境的配置,项目部署到服务器,我都不介绍了,如果是在找不到方法,再找我哈。如果有什么问题的,欢迎留言,我会尽可能的帮助解决(如果我不会的,就不要问哈,问就是不会哈哈)
更多相关文章
- Android上实现柱状图表
- Android(安卓)进阶之了解源码——Activity启动
- 从零开始--系统深入学习android(实践-让我们开始写代码-Android框
- flappy bird游戏源代码揭秘和下载后续---移植到android真机上
- Android(安卓)layout 优化:使用include和merge 标签
- 我的工具太少了之Android无限轮播图片,最后一张过度动画很重要
- 一起来开发Android的天气软件(三)——使用Volley实现网络通信
- eBook 功能模块二之设置模块Android
- Android华容道——我的第二个Android程序(第一个是HelloWorld)