搭建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给客户端

		<dependency>
			<groupId>net.sf.json-lib</groupId>
			<artifactId>json-lib</artifactId>
			<version>2.4</version>
			<classifier>jdk15</classifier>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.24</version>
		</dependency>

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<String, String> 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

先设置联网许可

<uses-permission android:name="android.permission.INTERNET"/>

2.2在AndroidManifest.xml的application节点下加
android:usesCleartextTraffic=“true”
因为我们是http请求,不太安全,版本比较高的话,是不支持的,所以需要进行设置一下

android:usesCleartextTraffic="true"

2.3添加依赖。有很多用的都是Volley,我也用了,不过搞出来的范湖数据都是乱码,没搞明白,就不用了,如果有哪位大神能给解决,就感激不尽了。我这里用的是别人封装好的okhttputils
如果有比较好的封装库,也可以给我推荐下,独乐了不如众乐乐,对吧嘿嘿

implementation 'com.alibaba:fastjson:1.1.71.android
implementation '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"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:text="账号"
        android:textSize="30sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <EditText
        android:id="@+id/username"
        android:layout_width="match_parent"
        android:layout_height="50sp"/>

    <TextView
        android:text="密码"
        android:textSize="30sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <EditText
        android:id="@+id/password"
        android:layout_width="match_parent"
        android:layout_height="50sp"/>
    <Button
        android:id="@+id/login"
        android:text="登录"
        android:layout_width="match_parent"
        android:layout_height="50sp"/>

    <Button
        android:id="@+id/bt_look"
        android:text="查询"
        android:layout_width="match_parent"
        android:layout_height="50sp"/>

    <TextView
        android:id="@+id/tv_look"
        android:text="显示"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</LinearLayout>

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

  • 10
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值