net:ERR_ Cl EARTEXT_ N0T_ PERMTTED NET:ERR_Cl EARTEXT_n0t_PERMTTED
时间: 2023-07-23 08:09:50 浏览: 152
这个错误通常是由于加载的网页使用了不安全的 HTTP 协议而不是安全的 HTTPS 协议导致的。最新版本的 Android WebView 默认阻止了加载非安全的 HTTP 内容。
要解决这个问题,有以下几种方法可供尝试:
1. 将网页链接修改为使用 HTTPS 协议:
例如,将 "http://example.com" 修改为 "https://example.com"。
2. 在 Android 的 Manifest 文件中添加以下权限:
```xml
<uses-permission android:name="android.permission.INTERNET" />
```
3. 在 WebView 的设置中启用混合内容模式(允许同时加载 HTTP 和 HTTPS 内容):
```java
webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
```
请注意,加载不安全的 HTTP 内容存在安全风险,建议尽可能使用安全的 HTTPS 协议来保护用户数据和隐私。
相关问题
24. int main(int argc, char* argv[]) 25. { 26. int i = 0; 27. size_t globalSize, localSize; 28. cl_int err; 29. double sum = 0; 30. clock_t start, finish; 31. 32. // Length of vectors 33. // unsigned int n = 100000; 34. int n = 100000; 35. // Host input vectors 36. double* h_a; 37. double* h_b; 38. // Host output vector 39. double* h_c; 40. 41. // Device input buffers 42. cl_mem d_a; 43. cl_mem d_b; 44. // Device output buffer 45. cl_mem d_c; 46. 47. cl_platform_id platform; // OpenCL platform 48. cl_device_id device_id; // device ID 49. cl_context context; // context 50. cl_command_queue queue; // command queue 51. cl_program program; // program 52. cl_kernel kernel; // kernel 53. 54. // Size, in bytes, of each vector 55. size_t bytes = n * sizeof(double); 56. 57. // Allocate memory for each vector on host 58. h_a = (double*)malloc(bytes); 59. h_b = (double*)malloc(bytes); 60. h_c = (double*)malloc(bytes); 61.
这段代码是主函数的实现。其中第 24 行到第 61 行是主函数的实现。第 26 行定义了一个整型变量 i,第 27 行定义了两个 size_t 类型的变量 globalSize 和 localSize,这些变量将在后面使用。第 28 行定义了一个 cl_int 类型的变量 err,用于存储 OpenCL 函数返回的错误码。
第 29 行定义了一个 double 类型的变量 sum,用于存储向量加法的结果。第 30 行定义了一个 clock_t 类型的变量 start 和 finish,用于记录向量加法的运行时间。
第 33 行定义了一个整型变量 n,表示向量的长度。第 36 行到第 39 行定义了三个指针变量,表示主机上的输入向量 a 和 b,以及输出向量 c。第 42 行到第 45 行定义了三个 cl_mem 类型的变量,表示设备上的输入缓冲区 d_a 和 d_b,以及输出缓冲区 d_c。
第 47 行到第 52 行定义了五个 OpenCL 对象,包括平台、设备、上下文、命令队列和内核程序。第 55 行计算了每个向量需要的字节数。第 58 行到第 60 行分别为输入向量和输出向量在主机上分配了内存空间。
这段代码的主要作用是初始化各种变量和对象,并为输入向量和输出向量在主机上分配内存空间。
// Build the program executable 96. clBuildProgram(program, 0, NULL, NULL, NULL, NULL); 97. 98. // Create the compute kernel in the program we wish to run 99. kernel = clCreateKernel(program, "vecAdd", &err); 100. 101. // Create the input and output arrays in device memory for our calculation 102. d_a = clCreateBuffer(context, CL_MEM_READ_ONLY, bytes, NULL, NULL); 103. d_b = clCreateBuffer(context, CL_MEM_READ_ONLY, bytes, NULL, NULL); 104. d_c = clCreateBuffer(context, CL_MEM_WRITE_ONLY, bytes, NULL, NULL); 105. 106. // Write our data set into the input array in device memory 107. err = clEnqueueWriteBuffer(queue, d_a, CL_TRUE, 0, 108. bytes, h_a, 0, NULL, NULL); 109. err |= clEnqueueWriteBuffer(queue, d_b, CL_TRUE, 0, 110. bytes, h_b, 0, NULL, NULL); 111. 112. // Set the arguments to our compute kernel 113. err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &d_a); 114. err |= clSetKernelArg(kernel, 1, sizeof(cl_mem), &d_b); 115. err |= clSetKernelArg(kernel, 2, sizeof(cl_mem), &d_c); 116. err |= clSetKernelArg(kernel, 3, sizeof(unsigned int), &n); 117. 118. // Execute the kernel over the entire range of the data set 119. err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &globalSize, &localSize, 0, NULL, NULL); 120. 121. // Wait for the command queue to get serviced before reading back results 122. clFinish(queue);
这段代码是用于执行OpenCL程序的。首先调用clBuildProgram函数编译构建程序。然后,创建输入和输出数组的设备内存,并将数据写入设备内存中。接着设置内核函数的参数,并使用clEnqueueNDRangeKernel函数来执行内核函数,其中1表示维度数,NULL表示本地工作项的数量,&globalSize表示全局工作项的数量,&localSize表示本地工作项的数量。最后,调用clFinish函数等待命令队列被服务以便在读取结果之前保证操作完成。
阅读全文