后台开发:
作为app 提供数据,业务管理。
1.创建工程springBoot
1.1下载开发IntellijIdE:百度;
1.2配置环境:jdk maven
1.3创建project :选择springIntiazer ;官网:创建工程;
2.创建工程结构
1.entriy:输出表
2.controller:做请求
3.service:做业务
4.common:放置通用的一些东西
5.dao
3.测试接口工具
postman:
4.Android 客户端
1.创建http通信工具类
package com.imau.studentcms;
import com.alibaba.fastjson.JSON;
import com.google.gson.Gson;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
public class MyHttpUtil {
private static final int TIME_OUT=5000;
private static URL url;
private static HttpURLConnection connection;
private static InputStream inputStream; public static void doGet(final String urlStr,final HttpCallbackListener listener){
new Thread(new Runnable() {
@Override
public void run() {
try {
StringBuffer data=new StringBuffer();
String line;
//1.构建请求地址
url=new URL(urlStr);
//2.建立连接
connection= (HttpURLConnection) url.openConnection();
//3.设置请求信息
connection.setConnectTimeout(TIME_OUT);
connection.setRequestMethod("GET");
//4.判断请求连接状态
if(connection.getResponseCode()==200)
{
//5.处理响应内容
inputStream=connection.getInputStream();
InputStreamReader isr=new
InputStreamReader(inputStream,"utf-8");
BufferedReader reader=new BufferedReader(isr);
while((line=reader.readLine())!=null) {
data.append(line);
}
//6.数据返回:写一个接口回调接口,消息通知
if(listener!=null){
listener.onFinsh(data.toString());
}
}
}catch (Exception e){
e.printStackTrace();
}finally {
if(connection!=null){
connection.disconnect();
}
}
}
}).start();
}
public static void doPost(final String urlStr,final HashMap<String, Object> params, final HttpCallbackListener listener){
new Thread(new Runnable() {
@Override
public void run() {
try {
StringBuffer data=new StringBuffer();
//1.参数转换json
String strEntity = JSON.toJSONString(params);
String line;
//1.构建请求地址
url=new URL(urlStr);
//2.建立连接
connection= (HttpURLConnection) url.openConnection();
//3.设置请求信息
connection.setConnectTimeout(TIME_OUT);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/json");
//使用的是json请求类型
connection.setRequestProperty("Content-Length", strEntity.length()+"");
connection.setDoInput(true);
connection.setDoOutput(true);
//将参数写入到后台
connection.getOutputStream().write(strEntity.getBytes());
//4.判断请求连接状态
if(connection.getResponseCode()==200)
{
//5.处理响应内容
inputStream=connection.getInputStream();
InputStreamReader isr=new InputStreamReader(inputStream,"utf-8");
BufferedReader reader=new BufferedReader(isr);
while((line=reader.readLine())!=null)
{
data.append(line);
}
//6.数据返回:写一个接口回调接口,消息通知
if(listener!=null){
listener.onFinsh(data.toString());
}
}
}catch (Exception e){
e.printStackTrace();
}finally {
if(connection!=null){
connection.disconnect();
}
}
}
}).start();
}
public interface HttpCallbackListener{
//写一个成功回调方法
public void onFinsh(String response);
//失败回调方法
}
}
2.两个Activity
登录activity
学生管理主界面
package com.imau.studentcms;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import java.util.HashMap;
public class MainActivity extends AppCompatActivity {
private EditText uname;
private EditText upass;
private Handler handler=new Handler(){
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
if((Integer) msg.obj==10000){
Intent intent=new Intent(MainActivity.this,Main2Activity.class); startActivity(intent);
}else{
Toast.makeText(MainActivity.this,"用户名密码错误,重新输 入",Toast.LENGTH_LONG).show();
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
uname=findViewById(R.id.name);
upass=findViewById(R.id.pass);
}
//登录按钮事件方法
public void login(View view){
//1.获取输入用户名密码
String name=uname.getText().toString();
String pass=upass.getText().toString();
//2.验证输入....
if("".equals(name)||name==null){
Toast.makeText(MainActivity.this,"请输入用户 名",Toast.LENGTH_LONG).show();
uname.setFocusable(true);
}else if("".equals(pass)||pass==null){
Toast.makeText(MainActivity.this,"请输入密 码",Toast.LENGTH_LONG).show();
upass.setFocusable(true);
}else{
//3.请求后台:用户名 密码查询用户名
HashMap<String,Object> params=new HashMap<>();
params.put("uname",name);
params.put("upass",pass);
//访问地址:本地的电脑:localhost 10.0.2.2
MyHttpUtil.doPost("http://10.0.2.2:8008/user/login", params,new MyHttpUtil.HttpCallbackListener() {
@Override
public void onFinsh(String response) {
System.out.println(response);
//4.解析后台数据:
//普通json串解析;
//定义一个服务后台一致的实体类;对象解析
JSONObject obj =JSON.parseObject(response);
int code= obj.getInteger("code");
//发送消息
Message message=new Message();
//判断
if(code==10000){
message.what=1;
message.obj=10000;
}else{
message.what=1;
message.obj=10001;
}
handler.sendMessage(message);
}
});
}
}
}
package com.imau.studentcms;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.app.Dialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.AbsListView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.imau.Adapter.StudentAdapter;
import com.imau.Dialog.MyDialog;
import com.imau.entitry.Student;
import com.imau.util.MyHandler;
import com.imau.util.MyHttpUtil;
import java.util.ArrayList;
import java.util.List;
public class Main2Activity extends AppCompatActivity
{
private ListView listView;
private StudentAdapter adapter;
private List<Student> stus=new ArrayList<>();
private ImageView add;
private int pageNo=0;
private Handler handler=new Handler(){
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
JSONArray data= (JSONArray) msg.obj;
//清空集合
stus.clear();
//遍历数组
for (int i=0;i<data.size();++i){
Student student= data.getObject(i,Student.class);
//存放到stus集合中
stus.add(student);
}
if(msg.what==10){
//加载数据
adapter.addAll(stus);
adapter.notifyDataSetChanged();
}else{
init();
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
initStus();
}
//初始化学生列表信息
private void initStus(){
MyHttpUtil.doGet("http://10.0.2.2:8008/student/page/"+pageNo+"/10",new MyHttpUtil.HttpCallbackListener(){
@Override
public void onFinsh(String response) {
System.out.println(response);
//解析后台服务json数据
JSONObject obj = JSON.parseObject(response);
int code= obj.getInteger("code");
// 判断成功
if(code==10000){
//解析json数组
JSONArray data = obj.getJSONArray("data");
Message message=new Message();
message.obj=data;
handler.sendMessage(message);
}
}
});
}
private void init(){
add=findViewById(R.id.add);
add.setOnClickListener(new MyListener());
listView=findViewById(R.id.lv);
adapter=new StudentAdapter(Main2Activity.this,R.layout.stu_layout,stus);
listView.setAdapter(adapter);
//分页动态加载事件
listView.setOnScrollListener(new MyListener());
}
class MyListener implements View.OnClickListener, AbsListView.OnScrollListener {
@Override
public void onClick(View v) {
MyDialog dialog=null;
//1.创建对话框
MyDialog.Builder builder=new MyDialog.Builder(Main2Activity.this ,null);
builder.setPositiveButton("确定", new MyDialog.OnClickListener() {
@Override
public void onClick(Dialog dialog,Student student) {
MyHttpUtil.doPost("http://10.0.2.2:8008/student/save" , student,new MyHttpUtil.HttpCallbackListener() {
@Override
public void onFinsh(String response) {
System.out.println(response);
//解析后台服务json数据
JSONObject obj = JSON.parseObject(response);
int code= obj.getInteger("code");
// 判断成功
if(code==10000){
}
}
});
Toast.makeText(Main2Activity.this,"添加成功!",Toast.LENGTH_LONG).show();
dialog.cancel();
}
});
dialog=builder.create();
dialog.show();
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if(scrollState==0){
pageNo++;
MyHttpUtil.doGet("http://10.0.2.2:8008/student/page/"+pageNo+"/10",new MyHttpUtil.HttpCallbackListener(){
@Override
public void onFinsh(String response) {
//解析后台服务json数据
JSONObject obj = JSON.parseObject(response);
int code= obj.getInteger("code");
// 判断成功
if(code==10000){
//解析json数组
JSONArray data = obj.getJSONArray("data");
Message message=new Message();
message.what=10;
message.obj=data;
handler.sendMessage(message);
}
}
});
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
}
package com.imau.util;
import android.os.Handler;
import android.os.Message;
import androidx.annotation.NonNull;
import com.imau.studentcms.MainActivity;
public class MyHandler extends Handler {
public static Object data;
private static MyHandler handler;
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
if(msg.what==RequestCode.LOGINI){
data=msg.obj;
}
}
private MyHandler(){
}
public static MyHandler getInstance(){
if(handler==null){
handler=new MyHandler();
}
return handler;
}