安卓访问云数据库(内网穿透模拟)

实现思路

安卓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,“张三”数据任意变。
在这里插入图片描述

开启步骤
  1. 导入数据库文件
    !!!数据库必须叫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;

  1. 下载好的jar包打开,运行命令
    在这里插入图片描述
java -jar .\demo-0.0.1-SNAPSHOT.jar

注意要进入jar目录下
在这里插入图片描述

  1. 启动内网突破工具
    在这里插入图片描述
  2. 运行安卓程序
    在这里插入图片描述服务器发送回来的信息,说明调用成功,看数据库就多了一条数据。
    jar下载
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值