实现思路
安卓App发送http请求,云服务器的后台接收到请求,然后访问数据库。
这里并没有真正的云服务器,使用内网突破模拟。(外网并不能访问内网的网站,使用内网突破工具后,外网能访问你自己写的东西)
内网突破
注册,下载客户端
我是用的是natapp,相关教程点击传送门
服务器实现
java8环境64位。 springboot实现的简单插入数据。jar已准备好,可直接使用,需要配置些东西。
api的说明
我本地的请求地址
http://localhost:8084 /employee/save?id=1&name=""&sex="“&major”“
请求方法get,url上方。id任填可不填,其他参数必须跟上。
安卓实现
界面放个按钮,放个文本区域,监听按钮点击事件(发送htpp请求).
新建项目后需要修改的是红色这几个
AndroidManifest.xml,三个权限得加上,你可以改的是package用自己的包
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.itxin">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<application
android:usesCleartextTraffic="true"
android:allowClearUserData="true"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
http请求的工具类
package com.itxin;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class HttpThread extends Thread {
Employee employee;
String url;
public HttpThread(String url, Employee employee) {
this.url = url;
this.employee = employee;
}
private void doGet() throws IOException {
/*将username和password传给Tomcat服务器*/
url=url+"?id="+employee.getId()+"&name="+employee.getName()+"&sex="+employee.getSex()+"&major="+employee.getMajor();
System.out.println(url);
try {
URL httpUrl = new URL(url);
/*获取网络连接*/
HttpURLConnection conn = (HttpURLConnection) httpUrl.openConnection();
/*设置请求方法为GET方法*/
conn.setRequestMethod("GET");
/*设置访问超时时间*/
conn.setReadTimeout(5000);
BufferedReader reader=new BufferedReader(new InputStreamReader(conn.getInputStream()));
String str;
StringBuffer sb=new StringBuffer();
//读取服务器返回的信息
while((str=reader.readLine())!=null)
{
sb.append(str);
}
//把服务端返回的数据打印出来
System.out.println("result"+sb.toString());
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*在run中调用doGet*/
@Override
public void run() {
try {
doGet();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Employee类
package com.itxin;
import java.io.Serializable;
public class Employee implements Serializable {
private int id;
private String name;
private String sex;
private String major;
@Override
public String toString() {
return "Employee{" +
"id=" + id +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
", major='" + major + '\'' +
'}';
}
public Employee(int id, String name, String sex, String major) {
this.id = id;
this.name = name;
this.sex = sex;
this.major = major;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
}
MainActivity类
package com.itxin;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private Employee data;
private final String urlStr = "http://9nfrq5.natappfree.cc/employee/save";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = findViewById(R.id.button);
data = new Employee(10, "张三", "男", "测试部");
final TextView text = findViewById(R.id.textView);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
text.setText("开始存数据" + data);
save(data);
}
});
}
private void save(Employee data) {
new HttpThread(urlStr,data).start();
}
}
布局文件
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:textSize="22dp"
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="164dp"
android:layout_marginTop="279dp"
android:layout_marginEnd="111dp"
android:layout_marginBottom="29dp"
android:text="向服务器存入数据"
app:layout_constraintBottom_toTopOf="@+id/textView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
红色下划线url切换成你内网突破工具提供的url,“张三”数据任意变。
开启步骤
- 导入数据库文件
!!!数据库必须叫yunserver,表名必须employe,只有一个e.
数据库必须存在一个账号root admin
/*
Navicat MySQL Data Transfer
Source Server : itxin.com
Source Server Version : 50549
Source Host : localhost:3306
Source Database : yunserver
Target Server Type : MYSQL
Target Server Version : 50549
File Encoding : 65001
Date: 2020-03-18 15:24:40
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for employe
-- ----------------------------
DROP TABLE IF EXISTS `employe`;
CREATE TABLE `employe` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`sex` varchar(255) DEFAULT NULL,
`major` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;
- 下载好的jar包打开,运行命令
java -jar .\demo-0.0.1-SNAPSHOT.jar
注意要进入jar目录下
- 启动内网突破工具
- 运行安卓程序
服务器发送回来的信息,说明调用成功,看数据库就多了一条数据。
jar下载