报错处理
在打包的时候遇到过几个问题,这里记录下来两个
Visual Studio Code运行ionic build出错显示ionic : 无法加载文件
ionic 项目通过 android studio 打开报错 capacitor.settings.gradle 文件不存在
ionic7 项目初始化以及打包 apk
这篇文章讲到了如果安装 ionic 以及通过 capacitor 最后打包为 apk : ionic7 从安装 到 项目启动最后打包成 apk
设置网络权限
如果不设置网络权限
,我们打包的项目是无法进行网络请求的。那么我们现在看下怎么设置网络权限
吧。
新增网络权限文件
新建 network_security_config.xml
文件,具体路径如下:
内容:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config><base-config cleartextTrafficPermitted="true" />
</network-security-config>
AndroidMainifest.xml 中设置
新增完了 network_security_config.xml
文件之后,需要在 AndroidMainifest.xml
中增加配置:
内容如下:
android:networkSecurityConfig="@xml/network_security_config"
测试
这里我提供一个用于测试使用的 http 请求地址,方便与测试
https://jsonplaceholder.typicode.com/photos/5
测试调用
test() {this.apiService.testData().subscribe((body) => {this.msg.infoToast('获取testData的返回值:' + body);console.log(body);this.msg.infoToast(JSON.stringify(body));});}
用于的 http 请求代码
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { catchError } from 'rxjs/operators';export enum RequestMethod {GET = 'GET',HEAD = 'HEAD',Post = 'POST',PUT = 'PUT',DELETE = 'DELETE',OPTIONS = 'OPTIONS',PATCH = 'PATCH',
}@Injectable()
export class ApiService {headers = new HttpHeaders({accept: 'application/json','Content-type': 'application/json;charset=UTF-8',});constructor(private http: HttpClient,) {}testData(): Observable<Object> {return this.http.get('https://jsonplaceholder.typicode.com/photos/5');}/*** get 方法* @param path 调用地址* @param args 传入参数*/get(path: string, args?: any): Observable<any> {const options = { headers: this.headers, withCredentials: true };if (args) {options['params'] = this.serialize(args);}return this.http.get(path, options).pipe(catchError(this.checkError.bind(this)));}/*** 报错检查* @param error* @returns {any}*/private checkError(error: any): any {if (error && error.status === 401) {console.log(`401${error}`);} else {console.log(error);}throw error;}// 将数据转换为 httpParamsprivate serialize(obj: any): HttpParams {let params = new HttpParams();for (const key in obj) {if (obj.hasOwnProperty(key)) {params = params.set(key, obj[key]);}}return params;}}