Android开发——调用Process遇到类型转换异常

本文详细解析了在Android开发中遇到的类型转换异常问题,特别是关于java.lang.Process与android.os.Process之间的冲突,提供了正确的导入包解决方案。

前言

今天遇到一个Android开发的小伙伴的求助,他在开发的时候遇到了下面的错误,我一看这是类型转换异常,比如我们最常见的就是ImageView没有办法转换成TextView。

systemui/SystemUIApplication.java:215: Type mismatch: 
cannot convert from java.lang.Process to android.os.Process
ERROR: /home/szsin/xxxxx/xxxx/xxxx/frameworks/base/packages/SystemUI
/src/com/android/systemui/SystemUIApplication.java:216: 
The method getOutputStream() is undefined for the type Process

错误分析

这个小伙伴在使用Process类的时候,同时调用的java.lang和android.os两个包下的Process类,可能是在编译的时候没有出现报错,但是在机器运行的时候出现了报错。遇到这种情况不要慌,问题不大,如果是错误的导入包可以去掉你不用的包。

注意:如果要同时调用不同包名下,同类名的类,就要下面这样写:

java.lang.Process process = null;
android.os.Process process = null;

在编写代码的时候可以直接带上包名,小伙伴听取我的建议之后运行的时候就没有出现报错的情况了。

总结

这种错误不常见,希望对遇到同类型异常的小伙伴有帮助,给自己打个广告下面是我的微信公众号,我会经常更新一下技术干货或者开发踩坑历程,欢迎大家关注我!
在这里插入图片描述

### 在Android Studio中调用神经网络库进行图片处理并与UniApp交互 #### 1. **集成神经网络库** 在Android Studio中可以使用多种开源的机器学习框架,比如TensorFlow Lite、PyTorch Mobile或NCNN等。这些框架提供了高效的移动端模型部署方案。 假设我们选择NCNN作为神经网络库,其轻量化设计非常适合移动设备上的实时图像处理任务。首先需要下载并导入NCNN库到项目中[^1]。 ```gradle // build.gradle 文件中添加 NCNN 的依赖项 implementation 'com.tencent.ncnn:ncnn-android:<version>' ``` 接着初始化NCNN环境,在应用启动时加载必要的资源文件(如`.param``.bin`格式的模型权重)。 --- #### 2. **构建图片处理流程** 创建一个专门用于图片处理的服务类,例如命名为`ImageProcessingService.java`。此类封装了从读取输入图片到执行推理再到生成输出结果的整体逻辑。 ```java import org.bytedeco.javacpp.FloatPointer; import org.bytedeco.javacv.Frame; import org.bytedeco.opencv.global.opencv_imgproc; import org.bytedeco.opencv.opencv_core.Mat; import com.tencent.ncnn.*; public class ImageProcessingService { private Net net; // NCNN 网络实例 public ImageProcessingService(Context context) throws Exception { net = new Net(); // 初始化网络 // 加载模型参数二进制权重 String paramPath = context.getAssets().open("model.param").toString(); String binPath = context.getAssets().open("model.bin").toString(); if (!net.load_param(paramPath)) throw new RuntimeException("Failed to load model parameters."); if (!net.load_model(binPath)) throw new RuntimeException("Failed to load model weights."); } /** * 执行基于NCNN的图片推理 * * @param inputImagePath 输入图片路径 * @return 输出图片数据(Base64编码形式) */ public String processImage(String inputImagePath) { Mat imgMat = Imgcodecs.imread(inputImagePath); // 加载图片为OpenCV矩阵 ExExtractor extractor = net.create_extractor(); // 创建提取器 try { extractor.set_light_mode(true); // 设置输入张量 extractor.input("input_name", new Mat(imgMat.rows(), imgMat.cols(), CvType.CV_32FC3, new FloatPointer())); // 获取输出张量 Mat outMat = new Mat(); extractor.extract("output_name", outMat); // 后续可对outMat做进一步处理... return encodeToBase64(outMat); // 将结果转换成Base64字符串返回 } finally { extractor.release(); } } /** * 将 OpenCV Mat 对象转化为 Base64 字符串 */ private static String encodeToBase64(Mat mat) { BytePointer ptr = new BytePointer(mat.size().height * mat.size().width * mat.channels()); opencv_imgproc.cvtColor(mat, mat, opencv_imgproc.COLOR_BGR2RGB); Imgcodecs.imencode(".jpg", mat, ptr); return Base64.getEncoder().encodeToString(ptr.position(0).array()); } } ``` 上述代码片段展示了如何利用NCNN完成基本的前向传播计算过程,并将最终得到的数据序列化为易于传输的形式——即Base64编码[^1]。 --- #### 3. **与UniApp建立通信桥梁** 为了让UniApp能够方便地调用这个服务,我们需要暴露一个公共接口供前端调用。这通常通过编写自定义插件的方式实现。 ##### 插件核心部分如下所示: ```java @UniJSMethod public void handleImageWithAI(String imagePath, UniJSCallback callback) { try { ImageProcessingService service = new ImageProcessingService(getContext()); String base64Result = service.processImage(imagePath); JSONObject jsonResponse = new JSONObject(); jsonResponse.put("status", "success"); jsonResponse.put("data", base64Result); callback.invoke(jsonResponse.toString()); // 反馈成功消息给前端 } catch (Exception ex) { callback.invokeError(ex.getMessage()); // 发送错误信息回前端 } } ``` 当UniApp触发此方法时会自动传递一张选定的照片地址过去;而一旦后台完成了所有的运算之后便会把相应的成果打包好再反馈回来[^2]。 --- #### 4. **UniApp侧对接** 最后一步是在Vue组件里绑定事件监听器等待用户选取目标素材后立即提交请求交给刚才提到的那个桥接函数去运作即可。 ```javascript methods: { async selectAndProcessImage() { const { tempFilePaths } = await uni.chooseImage({}); if (tempFilePaths && tempFilePaths.length > 0) { const filePath = tempFilePaths[0]; plus.android.importClass('your.package.name.YourPluginName'); let pluginInstance = plus.android.runtimeMainActivity() .getJsEngineManager().createModule("YourModuleName"); pluginInstance.handleImageWithAI(filePath, function(result){ console.log(`Received AI Processed Result:\n ${result}`); // 展示处理后的图片 this.$refs.resultImg.src = `data:image/jpeg;base64,${JSON.parse(result).data}`; }.bind(this)); } } } ``` 这样就构成了完整的闭环:从前端界面采集原始资料直至借助强大的人工智能技术支持下的自动化分析解读全流程都囊括其中[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值