# android-vue
**Repository Path**: wangdl_qd/android-vue
## Basic Information
- **Project Name**: android-vue
- **Description**: 用vue来创建界面,使用webview承载页面,通过反射实现请求数据
- **Primary Language**: Android
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2022-07-09
- **Last Updated**: 2022-07-09
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# android-vue
#### 效果图
#### 介绍
用vue来创建界面,使用webview承载页面,通过反射实现请求数据
#### 软件架构
软件架构说明,使用android webview 承载vue页面,在vue页面请求通过webView调用js方法,通过反射执行请求,并返回结果。
#### 安装教程
1. 复制或下载项目
2. 使用android studio打开项目
3. 使用命令行运行vue项目项目
4. 修改使用参数查看结果
5. 修改配置参数打包vue项目打包成apk
#### 使用说明
1. 下载项目
2. 打开项目的vue目录,使用命令执行行` npm i` 命令初始化vue项目
3. 在android stuido 中打开项目
4. 在`com.orange.ldv.Config`类中修改配置参数
5. 当使用运行调试时,将`APK=false`;当打包时反之(`注`打包前请先使用`npm run build`打包vue项目,之后在打包`APK`)
6. 在修改`APK`之后修改`getWebIndexUrl()`方法中的返回值,根据实际情况进行修改。如果使用手机调试请修改成`http://ip地址:端口号`,如果使用androi stuido 自带模拟器则需要修改成对应的ip(`10.0.2.2`根据实际情况修改);
7. 显示标题栏和显示状态栏,通过`showTitle`和`showStatusBar`进行控制
8. 如果修改整改项目的包名称,则一定需要修改`basePackages`参数
#### 整个项目包结构
```
|-app
|--main
|--assets //存放web页面
|--ui //存放vue项目生成文件。在vue目录使用`npm run build`会自动复制到当前目录
|--java
|--com.orange.ldv //项目包
|--annotation //反射所需要的注解类
|--controller //(包名不可更改)请求控制类
|--entity //实体类
|--response //请求相应类
|--services //服务类
|--res
|--vue //vue //项目开发目录,
```
#### 请求说明
##### 1.请求支持类型 (`更多的类型转换需要你的支持`)
|范围|类型|
|--|--|
|基本类型|`String`,`Boolean`,`Integer`,`Double`,`Float`,`Long`,`Byte`,`Short`,`Character`,`Date`(Date的各种格式支持需要在`Config`类中添加支持,可以将使用频率高的格式配置在数组最开始位置)|
|数组和集合| 数组如`Article []`(实体类数组) ,`String []` 字符串数组等其他类型;集合`List>`,`ArrayList>`|
##### 2.请求参数说明
> 目前的项目中有请求相关的示例
###### 2.1 测试请求类型
```java
package com.orange.ldv.controller;
import com.orange.ldv.annotation.AppAutowired;
import com.orange.ldv.annotation.AppController;
import com.orange.ldv.annotation.AppRequestMapper;
import com.orange.ldv.annotation.AppRequestMethod;
import com.orange.ldv.entity.Article;
import com.orange.ldv.services.TestServices;
import java.util.Date;
import java.util.List;
@AppController(path = "test")
public class TestController {
/**
* 单字符串
*/
@AppRequestMapper(path = "/get6", method = AppRequestMethod.GET)
public String getTest6(String str) {
return str;
}
/**
* 多个参数
*/
@AppRequestMapper(path = "/get", method = AppRequestMethod.GET)
public String getTest(String str, int str2) {
return "这是修改后的字符串" + str + "," + str2;
}
/**
* 多个字符串返回数组
*/
@AppRequestMapper(path = "/get2", method = AppRequestMethod.GET)
public String[] getTest2(String str, int str2) {
return new String[]{"这是修改后的字符串", str, str2 + ""};
}
/**
* 多个参数和数组
*/
@AppRequestMapper(path = "/get3", method = AppRequestMethod.GET)
public String[] getTest3(String[] str, int str2) {
return new String[]{"这是修改后的字符串", "数组长度是:" + str.length, str2 + ""};
}
/**
* 实体类
*/
@AppRequestMapper(path = "/get4", method = AppRequestMethod.GET)
public Article getTest4(Article article) {
article.setUpdatedTime(new Date());
return article;
}
/**
* 集合,泛型为实体类 List
*/
@AppRequestMapper(path = "/get5", method = AppRequestMethod.GET)
public List getTest5(List articles) {
return articles;
}
/**
* 自动注入调用时实例化
*/
@AppAutowired
private TestServices testServices;
/**
* 测试自动注入实例化对象
*/
@AppRequestMapper(path = "/get7", method = AppRequestMethod.GET)
public String getTest7() {
return testServices.getString();
}
}
```
###### 2.2各方法对应的vue请求示例
> 在请求方法中对请求类型和请求参数做了默认值处理,当`method`为假值时,默认请求为GET,当请求参数为`params`假值时,默认做''处理
```javascript
/**
* 单字符串。当有且仅有一个参数时,直接是参数值
*/
let res=this.$ano.requestSync('test/get6','get','张三');
/**
* 多个参数
*/
let res=this.$ano.requestSync('test/get','get',{str2: '2',str: 'html'});
/**
* 多个字符串返回数组
*/
let res=this.$ano.requestSync('test/get2','get',{str2: '2',str: 'html'});
/**
* 多个参数和数组
*/
let res=this.$ano.requestSync('test/get3','get',{
str2: '2',
str: ['html', '张某某']
});
/**
* 实体类
*/
let res=this.$ano.requestSync('test/get4','get', {
content: '这是文章内容',
id: '123',
image: 'imagess',
isDelete: '0',
createdBy: '1',
createdTime: new Date(),
updatedTime: '2014年02月08日',
title: '这是标题'
});
/**
* 集合,泛型为实体类 List
*/
let res=this.$ano.requestSync('test/get5','get', [{
content: '这是文章内容1',
id: '123',
image: 'imagess1',
isDelete: '0',
createdBy: '1',
createdTime: new Date(),
updatedTime: '2014年02月08日',
title: '这是标题'
}, {
content: '这是文章内容2',
id: '123',
image: 'imagess2',
isDelete: '1',
createdBy: '2',
createdTime: new Date(),
updatedTime: '2023年02月08日',
title: '这是标题3'
}]);
/**
* 测试自动注入实例化对象
*/
let res=this.$ano.requestSync('test/get7');
```
###### 2.3注解使
* `@AppController` 添加到`controller`包下的`类`上的注解
+ `path`表示请求路径
```java
package com.orange.ldv.controller;
@AppController(path = "test")
public class TestController {
}
```
* `@AppRequestMapper` 添加到`controller`保险类的`方法`上的注解
+ `path`表示请求路径 ;`method`表示请求方式
```java
package com.orange.ldv.controller;
@AppController(path = "test")
public class TestController {
/**
* 单字符串
*/
@AppRequestMapper(path = "/get6", method = AppRequestMethod.GET)
public String getTest6(String str) {
return str;
}
}
```
* `@AppAutowired` 在`controller`包下的申明变量时,有需要`实例化的对象变量`上
```java
package com.orange.ldv.controller;
@AppController(path = "test")
public class TestController {
/**
* 自动注入调用时实例化
*/
@AppAutowired
private TestServices testServices;
}
```
#### 参与贡献
#### 特技