刚开始学习的小伙伴肯定不知道从哪里入手,觉着自建服务系写后台比较难,刚开始我也是这样觉着,不过搞了几天以后,觉着也也没想象中的那么难,就是刚开始的时候不知道从哪里入手,没有头绪才会觉着难,等有了一定的了解以后,就会觉着简单的多了。
现在有很多云服务,不过我用的自己的电脑做的服务器,个人觉着比较好上手。如何择选就看个人需求吧,我只是为了测试。
我没有链接本地数据库,只是测试了能够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-lib
2.4
jdk15
com.alibaba
fastjson
1.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.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文件,是测试是否能正常连接数服务器的并获取数据的(可以忽略)。
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环境的配置,项目部署到服务器,我都不介绍了,如果是在找不到方法,再找我哈。如果有什么问题的,欢迎留言,我会尽可能的帮助解决(如果我不会的,就不要问哈,问就是不会哈哈)