这里写自定义目录标题

  • 自建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-libjson-lib2.4jdk15com.alibabafastjson1.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环境的配置,项目部署到服务器,我都不介绍了,如果是在找不到方法,再找我哈。如果有什么问题的,欢迎留言,我会尽可能的帮助解决(如果我不会的,就不要问哈,问就是不会哈哈)

更多相关文章

  1. Android上实现柱状图表
  2. Android(安卓)进阶之了解源码——Activity启动
  3. 从零开始--系统深入学习android(实践-让我们开始写代码-Android框
  4. flappy bird游戏源代码揭秘和下载后续---移植到android真机上
  5. Android(安卓)layout 优化:使用include和merge 标签
  6. 我的工具太少了之Android无限轮播图片,最后一张过度动画很重要
  7. 一起来开发Android的天气软件(三)——使用Volley实现网络通信
  8. eBook 功能模块二之设置模块Android
  9. Android华容道——我的第二个Android程序(第一个是HelloWorld)

随机推荐

  1. android GLSurfaceView 异常处理
  2. android sensor传感器
  3. Android创建AlertDialog对话框 ==之一
  4. SharedPreferences 数据存储
  5. android学习之wifimanager
  6. android添加购物车动画实现
  7. android混淆文件
  8. android工具类(2)NetWorkHelper 网络工具类
  9. How to develop and package Android(安
  10. Screen and UI Performance