活动介绍

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test1/com.example.test1.InboxActivity}: java.lang.SecurityException: Permission Denial: opening provider com.android.providers.contacts.ContactsProvider2 from ProcessRecord{9d7cdbd 18018:com.example.test1/u0a133} (pid=18018, uid=10133) requires android.permission.READ_CONTACTS or android.permission.WRITE_CONTACTS

时间: 2023-12-19 12:04:27 浏览: 191
这个错误是因为你的应用程序没有被授予读取或写入联系人的权限。你需要在你的AndroidManifest.xml文件中添加以下代码: ``` <uses-permission android:name="android.permission.READ_CONTACTS"/> <uses-permission android:name="android.permission.WRITE_CONTACTS"/> ``` 这将请求用户授予你的应用程序读取和写入联系人的权限。确保在运行时请求这些权限,以便在用户同意之前不会访问联系人。同时,你需要确保在代码中请求这些权限,可以使用以下代码: ``` ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS}, 0); ``` 这将请求用户授予你的应用程序读取和写入联系人的权限。在用户同意之前,你的应用程序将无法访问联系人。
相关问题

分析以下报错信息: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapplication/com.example.myapplication.PhoneActivity}: java.lang.NumberFormatException: For input string: ""

<think>我们面对的问题是:在Android应用启动时出现`java.lang.NumberFormatException: For input string: ""`异常。这个异常通常发生在尝试将空字符串("")转换为数字类型(如int, double等)时。 ### 问题分析 1. **异常原因**:`NumberFormatException`表示字符串的格式不符合数字格式要求。空字符串""无法被解析成任何数字类型。 2. **常见场景**: - 从SharedPreferences、Intent、Bundle或网络获取的字符串数据为空或空字符串时,直接进行数字转换。 - 使用`Integer.parseInt()`, `Double.parseDouble()`等方法解析空字符串。 3. **根本原因**:数据源(如SharedPreferences、Intent、Bundle、网络响应)中存储的值为空或空字符串,而代码未做空值或空字符串检查。 ### 解决方案 #### 步骤1:定位错误发生的位置 在Android Studio中,查看Logcat输出,找到异常堆栈跟踪(stack trace)。堆栈跟踪会明确指出哪一行代码抛出了异常。例如: ``` java.lang.NumberFormatException: For input string: "" at java.lang.Integer.parseInt(Integer.java:627) at java.lang.Integer.parseInt(Integer.java:650) at com.example.MyActivity.onCreate(MyActivity.java:42) // 这里就是问题代码行 ``` #### 步骤2:检查问题代码 在堆栈跟踪中指出的代码行,通常是类似这样的代码: ```java String str = ...; // 从某处获取的字符串 int value = Integer.parseInt(str); // 当str为空字符串时抛出异常 ``` #### 步骤3:修复代码 在将字符串转换为数字之前,必须进行有效性检查。以下是几种修复方式: **方式1:添加空字符串检查** ```java String str = ...; // 获取字符串 int value = 0; // 设置默认值 if (str != null && !str.trim().isEmpty()) { try { value = Integer.parseInt(str.trim()); } catch (NumberFormatException e) { e.printStackTrace(); // 处理转换失败的情况,例如使用默认值 value = 0; // 或根据业务逻辑处理 } } else { // 字符串为空或空字符串,使用默认值 value = 0; } ``` **方式2:使用工具方法封装** 可以创建一个工具类来处理字符串到数字的转换,避免重复代码: ```java public class NumberUtils { public static int parseInt(String str, int defaultValue) { if (str == null || str.trim().isEmpty()) { return defaultValue; } try { return Integer.parseInt(str.trim()); } catch (NumberFormatException e) { return defaultValue; } } } // 使用方式 String str = ...; int value = NumberUtils.parseInt(str, 0); // 如果转换失败,返回0 ``` **方式3:使用Java 8 Optional(可选)** ```java String str = ...; int value = Optional.ofNullable(str) .filter(s -> !s.trim().isEmpty()) .map(s -> { try { return Integer.parseInt(s.trim()); } catch (NumberFormatException e) { return null; // 或者抛出自定义异常 } }) .orElse(0); ``` #### 步骤4:预防措施 1. **数据源验证**:确保从数据源(如SharedPreferences、Intent、Bundle、网络)获取数据时,对可能为空或空字符串的情况进行处理。 2. **使用安全的数据存储**: - 在SharedPreferences中存储数字时,建议存储为数字类型(如`putInt`、`putFloat`),而不是字符串。但如果必须存为字符串,则读取时按上述方法处理。 - 使用Intent传递数字时,优先使用`putExtra(String name, int value)`等方法直接传递数字类型。 3. **单元测试**:为涉及字符串转换的代码编写单元测试,覆盖空字符串、null、非数字字符串等边界情况。 ### 示例:修复从SharedPreferences读取的字符串 假设原问题代码是从SharedPreferences读取一个字符串并转换为整数: ```java SharedPreferences prefs = getSharedPreferences("my_prefs", MODE_PRIVATE); String numberStr = prefs.getString("some_number_key", ""); // 这里可能得到空字符串 int number = Integer.parseInt(numberStr); // 当numberStr为空字符串时抛出异常 ``` 修复后: ```java SharedPreferences prefs = getSharedPreferences("my_prefs", MODE_PRIVATE); String numberStr = prefs.getString("some_number_key", ""); int number = 0; if (!numberStr.trim().isEmpty()) { try { number = Integer.parseInt(numberStr.trim()); } catch (NumberFormatException e) { number = 0; // 使用默认值 } } else { number = 0; // 空字符串使用默认值 } ``` 或者使用工具类: ```java int number = NumberUtils.parseInt(prefs.getString("some_number_key", ""), 0); ``` ### 总结 `NumberFormatException: For input string: ""`的根本原因是尝试将空字符串转换为数字。解决方法是在转换前检查字符串是否为空或空字符串,并做好异常处理。同时,建议从数据源开始保证数据的有效性,并在整个数据处理流程中加入健壮性检查。 §§相关问题§§ 1. 如何在Android中安全地处理从Intent传递的字符串数据? 2. SharedPreferences存储数字类型的最佳实践是什么? 3. 如何为数字格式转换编写有效的单元测试? 4. 在Kotlin中如何更简洁地处理字符串到数字的转换? 5. Android开发中还有哪些常见的运行时异常需要预防? [^1]: Android Developers 官方文档 - 处理运行时异常 [^2]: Effective Java 第3版 - 异常处理最佳实践</think>### Android 中 `java.lang.NumberFormatException: For input string: ""` 异常分析与解决方案 #### 问题本质 此异常发生在尝试将空字符串 `""` 转换为数字类型时,常见于以下场景: ```java // 示例危险代码 int value = Integer.parseInt(""); // 抛出异常 double num = Double.parseDouble(""); // 抛出异常 ``` #### 根本原因分析 1. **数据源问题**(最常见) - SharedPreferences 中存储的值为空或空字符串 - Intent/Bundle 传递的参数缺失或为空 - 网络请求返回的 JSON 字段值为空字符串 - 数据库查询结果为空字段 2. **数据处理缺陷** ```java // 错误示例:未检查空值 String data = getIntent().getStringExtra("SCORE"); int score = Integer.parseInt(data); // 当data=""时崩溃 ``` 3. **边界情况未处理** - 用户输入框未输入内容直接提交 - 配置文件缺失关键数值字段 #### 完整解决方案 ##### 1. 防御性编码(核心方案) ```java // 安全转换工具方法 public static int safeParseInt(String input, int defaultValue) { if (input == null || input.trim().isEmpty()) { return defaultValue; } try { return Integer.parseInt(input.trim()); } catch (NumberFormatException e) { return defaultValue; } } // 使用示例 String userInput = etInput.getText().toString(); int value = safeParseInt(userInput, 0); // 空值自动返回0 ``` ##### 2. 数据源验证 **SharedPreferences 场景:** ```java // 正确读取方式 SharedPreferences prefs = getSharedPreferences("config", MODE_PRIVATE); String value = prefs.getString("points", "0"); // 设置默认值 int points = safeParseInt(value, 0); ``` **Intent 参数场景:** ```java // 带默认值的安全获取 Intent intent = getIntent(); String score = intent.getStringExtra("SCORE"); if (score == null || score.isEmpty()) { score = "0"; // 显式设置默认值 } int finalScore = Integer.parseInt(score); ``` ##### 3. 输入验证(UI层) ```xml <!-- layout.xml 设置输入约束 --> <EditText android:id="@+id/etAge" android:inputType="number" android:digits="0123456789" <!-- 仅允许数字 --> android:hint="输入年龄"/> ``` ```java // 提交前验证 EditText etAge = findViewById(R.id.etAge); String input = etAge.getText().toString().trim(); if (input.isEmpty()) { etAge.setError("不能为空"); return; } int age = Integer.parseInt(input); // 此时不会抛异常 ``` ##### 4. JSON 数据处理 ```java // 使用 optXXX 方法替代 getXXX JSONObject json = new JSONObject(response); int points = json.optInt("reward_points", 0); // 自动处理空值 ``` #### 异常处理最佳实践 ```java try { // 可能抛出异常的代码 int value = Integer.parseInt(rawValue); } catch (NumberFormatException e) { // 1. 记录详细日志 Log.e("CONVERSION", "转换失败: " + rawValue, e); // 2. 设置安全默认值 int fallbackValue = 0; // 3. 用户友好提示(可选) Toast.makeText(this, "输入格式错误", Toast.LENGTH_SHORT).show(); // 4. 上报错误分析(生产环境) FirebaseCrashlytics.getInstance().recordException(e); } ``` #### 预防措施 1. **代码审查重点**:检查所有 `parseInt()`/`parseDouble()` 的调用点 2. **单元测试覆盖**: ```java @Test public void testNumberConversion() { assertEquals(0, safeParseInt("", 0)); assertEquals(0, safeParseInt(null, 0)); assertEquals(100, safeParseInt("100", 0)); assertEquals(0, safeParseInt("abc", 0)); } ``` 3. **静态代码分析**:使用 Android Lint 规则检查潜在问题 4. **数据监控**:通过 Crashlytics 监控线上异常 #### 典型错误场景修复 **错误代码:** ```java // 从分割字符串中获取数值 String[] parts = data.split(":"); int count = Integer.parseInt(parts[1]); // 当parts[1]不存在时崩溃 ``` **修复方案:** ```java String[] parts = data.split(":"); if (parts.length > 1 && !parts[1].trim().isEmpty()) { count = safeParseInt(parts[1], 0); } else { count = 0; // 安全默认值 } ``` ### 总结流程图 ```mermaid graph TD A[获取原始数据] --> B{数据是否为空?} B -->|是| C[使用默认值] B -->|否| D[尝试转换] D --> E{转换成功?} E -->|是| F[使用转换值] E -->|否| C C --> G[安全使用数值] F --> G ```

分析以下报错代码:java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapplication/com.example.myapplication.PhoneActivity}: java.lang.NumberFormatException: For input string: ""

<think>我们正在分析一个Android应用启动时发生的崩溃,错误信息如下: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapplication/com.example.myapplication.PhoneActivity}: java.lang.NumberFormatException: For input string: "" 这个错误表明在启动PhoneActivity时发生了RuntimeException,根本原因是NumberFormatException,即尝试将一个空字符串""转换为数字类型(如int, double等)时失败。 ### 问题分析 1. **异常链**: - 外层异常:`RuntimeException`,包装了启动Activity失败的原因。 - 内层异常:`NumberFormatException`,具体原因是输入字符串为空字符串(""),无法转换为数字。 2. **发生时机**: - 该异常发生在`PhoneActivity`的`onCreate()`方法中(或在其调用的方法中),因为Activity启动时会执行`onCreate()`。 3. **常见场景**: - 从Intent中获取Extra数据并直接转换为数字,但Extra数据不存在或为空字符串。 - 从SharedPreferences、数据库或网络获取的字符串数据为空,然后直接进行数字转换。 - 解析用户输入(如EditText的内容)时,用户没有输入任何内容(空字符串)就直接提交。 ### 代码定位 我们需要在`PhoneActivity`中查找所有将字符串转换为数字的地方,特别是以下方法: - `Integer.parseInt()` - `Double.parseDouble()` - `Float.parseFloat()` - `Long.parseLong()` - 以及它们的包装类方法,如`Integer.valueOf()` ### 示例错误代码 ```java public class PhoneActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_phone); // 示例1:从Intent中获取字符串并转换为整数(危险!) Intent intent = getIntent(); String scoreString = intent.getStringExtra("SCORE"); int score = Integer.parseInt(scoreString); // 当scoreString为""时抛出异常 // 示例2:从SharedPreferences中获取字符串并转换(危险!) SharedPreferences prefs = getSharedPreferences("MyPrefs", MODE_PRIVATE); String countString = prefs.getString("COUNT", ""); // 默认值为空字符串 int count = Integer.parseInt(countString); // 当countString为""时抛出异常 // 示例3:解析EditText的内容(危险!) EditText etAge = findViewById(R.id.etAge); String ageString = etAge.getText().toString(); int age = Integer.parseInt(ageString); // 当用户未输入时,ageString为"" } } ``` ### 解决方案 #### 1. 防御性编程(输入验证) 在转换之前,检查字符串是否为null或空字符串,并设置默认值或给出错误提示。 ```java // 示例1修复:从Intent获取 String scoreString = intent.getStringExtra("SCORE"); int score = 0; // 默认值 if (scoreString != null && !scoreString.isEmpty()) { try { score = Integer.parseInt(scoreString); } catch (NumberFormatException e) { // 处理格式错误,例如记录日志或使用默认值 score = 0; } } // 示例2修复:从SharedPreferences获取 SharedPreferences prefs = getSharedPreferences("MyPrefs", MODE_PRIVATE); // 注意:这里在获取时设置一个非空的默认值(如"0")可以避免空字符串 String countString = prefs.getString("COUNT", "0"); // 默认值为"0" int count = Integer.parseInt(countString); // 现在countString不会是空字符串 // 示例3修复:EditText输入 EditText etAge = findViewById(R.id.etAge); String ageString = etAge.getText().toString().trim(); int age = 0; if (!ageString.isEmpty()) { try { age = Integer.parseInt(ageString); } catch (NumberFormatException e) { etAge.setError("请输入有效的数字"); } } else { etAge.setError("年龄不能为空"); } ``` #### 2. 使用工具类 创建一个工具方法来安全地转换字符串到整数。 ```java public class NumberUtils { public static int safeParseInt(String str, int defaultValue) { if (str == null || str.trim().isEmpty()) { return defaultValue; } try { return Integer.parseInt(str.trim()); } catch (NumberFormatException e) { return defaultValue; } } } // 使用示例 int score = NumberUtils.safeParseInt(scoreString, 0); ``` #### 3. 在数据源处避免空字符串 - 在保存数据到SharedPreferences时,确保数字类型的值不要保存为空字符串,而应该保存为数字或者至少是"0"。 - 在传递Intent的Extra时,避免传递空字符串作为数字参数,可以传递默认值(如0)或者进行校验。 ### 为什么空字符串会导致NumberFormatException? 根据Java文档,`Integer.parseInt(String s)`要求字符串必须是一个有效的整数表示。空字符串显然不满足这个条件,因此会抛出`NumberFormatException`。 ### 预防措施 1. **代码审查**:检查所有使用`parseInt`、`parseDouble`等方法的地方,确保有对空字符串和null的检查。 2. **单元测试**:编写测试用例覆盖空字符串、null、非数字字符串等边界情况。 3. **使用Kotlin的扩展函数(如果项目使用Kotlin)**: ```kotlin fun String.toIntOrSafe(defaultValue: Int): Int { return this.trim().toIntOrNull() ?: defaultValue } // 使用 val score = scoreString.toIntOrSafe(0) ``` ### 总结 当Activity启动失败并抛出`NumberFormatException`时,通常是因为在Activity的初始化过程中尝试将空字符串转换为数字。解决方案包括: - 对输入字符串进行非空检查 - 使用try-catch处理异常 - 设置合理的默认值 - 在数据源处避免空字符串 通过以上方法,可以避免此类崩溃,提升应用的健壮性。 §§相关问题§§ 1. 如何在Android中安全地从Intent获取数字参数? 2. 使用Kotlin如何更安全地处理字符串到数字的转换? 3. 如何防止EditText输入为空导致的NumberFormatException? 4. SharedPreferences中存储数字时如何避免转换异常?</think>### Android 中空字符串转换引发的 Activity 启动失败分析 #### 问题本质 当您看到以下报错时: ``` java.lang.RuntimeException: Unable to start activity ComponentInfo{...}: java.lang.NumberFormatException: For input string: "" ``` 表明应用在启动 `PhoneActivity` 时尝试将空字符串 `""` 转换为数字类型(如 int/double),导致 `NumberFormatException` 并最终造成 Activity 启动失败。 #### 根本原因分析 1. **空字符串转换** 核心问题代码通常形如: ```java // 危险代码示例 int value = Integer.parseInt(""); // 直接崩溃 ``` 当代码尝试解析空字符串时必然抛出异常。 2. **典型触发场景** - **Intent 参数传递**(最常见): 启动 Activity 时传递的数字参数缺失或为空 ```java // 发送方 intent.putExtra("USER_ID", ""); // 错误传递空值 // 接收方(PhoneActivity.onCreate()) String id = getIntent().getStringExtra("USER_ID"); int userId = Integer.parseInt(id); // 崩溃点 ``` - **SharedPreferences 读取**: 存储的数字值被错误保存为空字符串 ```java // 保存时 prefs.edit().putString("POINTS", "").apply(); // 读取时(在PhoneActivity初始化中) String points = prefs.getString("POINTS", ""); int currentPoints = Integer.parseInt(points); // 崩溃点 ``` - **UI 输入处理**: EditText 内容为空时直接解析 ```java EditText etAge = findViewById(R.id.etAge); String input = etAge.getText().toString(); int age = Integer.parseInt(input); // 用户未输入时崩溃 ``` #### 完整解决方案 ##### 1. 防御性转换工具类 ```java public class SafeParser { public static int parseInt(String value, int defaultValue) { if (value == null || value.trim().isEmpty()) { return defaultValue; } try { return Integer.parseInt(value.trim()); } catch (NumberFormatException e) { return defaultValue; } } } // 在PhoneActivity中使用 String id = getIntent().getStringExtra("USER_ID"); int userId = SafeParser.parseInt(id, -1); // 空值返回-1 ``` ##### 2. Intent 参数安全处理 ```java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 安全获取Intent参数 Intent intent = getIntent(); String scoreValue = intent.getStringExtra("SCORE"); // 验证1:空值检查 if (scoreValue == null || scoreValue.isEmpty()) { scoreValue = "0"; // 设置默认值 } // 验证2:数字格式检查 try { int score = Integer.parseInt(scoreValue); } catch (NumberFormatException e) { // 记录错误并恢复 Log.e("PhoneActivity", "Invalid score format", e); int score = 0; } } ``` ##### 3. SharedPreferences 安全读取 ```java // 正确读取方式(设置非空默认值) SharedPreferences prefs = getSharedPreferences("user_data", MODE_PRIVATE); String level = prefs.getString("USER_LEVEL", "1"); // 默认值"1"而非空字符串 // 安全转换 int userLevel = SafeParser.parseInt(level, 1); ``` ##### 4. UI 输入验证 ```xml <!-- 布局中添加输入约束 --> <EditText android:id="@+id/etAge" android:inputType="number" android:importantForAutofill="no" android:hint="输入年龄" android:imeOptions="actionDone"/> ``` ```java // 提交前验证 private void validateInput() { EditText etAge = findViewById(R.id.etAge); String input = etAge.getText().toString().trim(); if (input.isEmpty()) { etAge.setError("年龄不能为空"); return; } try { int age = Integer.parseInt(input); // 继续业务流程... } catch (NumberFormatException e) { etAge.setError("请输入有效数字"); } } ``` #### 错误处理最佳实践 ```java try { // 可能出错的业务代码 processCriticalData(); } catch (NumberFormatException e) { // 1. 记录详细日志 Log.wtf("DATA_PARSE", "转换失败: " + e.getMessage(), e); // 2. 安全恢复 initWithDefaultValues(); // 3. 用户提示(可选) Toast.makeText(this, "数据加载失败,使用默认设置", Toast.LENGTH_SHORT).show(); // 4. 上报错误(生产环境) FirebaseCrashlytics.getInstance().recordException(e); } ``` #### 预防措施 1. **代码审查重点** 检查所有 `parseInt()`/`parseDouble()` 的调用点,确认输入来源: ```java // 危险调用点示例 Integer.valueOf(etInput.getText().toString()); ``` 2. **单元测试覆盖** ```java @Test public void testIntentHandling() { // 测试空值场景 Intent intent = new Intent(); intent.putExtra("TEST_VALUE", ""); PhoneActivity activity = launchActivity(intent); assertNotNull(activity); // 验证Activity正常启动 } ``` 3. **静态代码分析** 配置 Lint 规则检查潜在问题: ```xml <!-- lint.xml --> <issue id="NumberFormatException"> <severity>error</severity> </issue> ``` #### 总结流程 ```mermaid graph TD A[Activity启动] --> B{解析数字参数} B -->|参数为空| C[使用默认值] B -->|参数有效| D[正常转换] C --> E[继续初始化] D --> E E --> F[Activity成功启动] ```
阅读全文

相关推荐

分析报错信息: FATAL EXCEPTION: main Process: com.example.myapplication, PID: 7164 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapplication/com.example.myapplication.PhoneActivity}: java.lang.RuntimeException: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ArrayAdapter.notifyDataSetChanged()' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java:7656) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) Caused by: java.lang.RuntimeException: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ArrayAdapter.notifyDataSetChanged()' on a null object reference at com.example.myapplication.PhoneActivity.readContacts(PhoneActivity.java:53) at com.example.myapplication.PhoneActivity.onCreate(PhoneActivity.java:33) at android.app.Activity.performCreate(Activity.java:7994) at android.app.Activity.performCreate(Activity.java:7978) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)  at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)  at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)  at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)  at android.os.Handler.dispatchMessage(Handler.java:106)  at android.os.Looper.loop(Looper.java:223)  at android.app.ActivityThread.main(ActivityThread.java:7656)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)  Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ArrayAdapter.notifyDataSetChanged()' on a null object reference at com.example.myapplication.PhoneActivity.readContacts(PhoneActivity.java:50) at com.example.myapplication.PhoneActivity.onCreate(PhoneActivity.java:33)  at android.app.Activity.performCreate(Activity.java:7994)  at android.app.Activity.performCreate(Activity.java:7978)  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)  at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)  at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)  at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)  at android.os.Handler.dispatchMessage(Handler.java:106)  at android.os.Looper.loop(Looper.java:223)  at android.app.ActivityThread.main(ActivityThread.java:7656)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)  2025-07-10 10:40:05.447 7164-7180 System com.example.myapplication W A resource failed to call close.

2025-07-28 11:10:19.676 5188-5188 TransactionExecutor com.example.myapplication E Failed to execute the transaction: tId:-489014647 ClientTransaction{ tId:-489014647 transactionItems=[ tId:-489014647 LaunchActivityItem{activityToken=android.os.BinderProxy@b507644,intent=Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.example.myapplication/.MainActivity },ident=210528473,info=ActivityInfo{421fde2 com.example.myapplication.MainActivity},curConfig={1.0 310mcc260mnc [en_US] ldltr sw411dp w411dp h842dp 420dpi nrml long port finger qwerty/v/v dpad/v winConfig={ mBounds=Rect(0, 0 - 1080, 2400) mAppBounds=Rect(0, 128 - 1080, 2337) mMaxBounds=Rect(0, 0 - 1080, 2400) mDisplayRotation=ROTATION_0 mWindowingMode=fullscreen mActivityType=undefined mAlwaysOnTop=undefined mRotation=ROTATION_0} as.3 s.109 fontWeightAdjustment=0},overrideConfig={1.0 310mcc260mnc [en_US] ldltr sw411dp w411dp h842dp 420dpi nrml long port finger qwerty/v/v dpad/v winConfig={ mBounds=Rect(0, 0 - 1080, 2400) mAppBounds=Rect(0, 128 - 1080, 2337) mMaxBounds=Rect(0, 0 - 1080, 2400) mDisplayRotation=ROTATION_0 mWindowingMode=fullscreen mActivityType=standard mAlwaysOnTop=undefined mRotation=ROTATION_0} as.3 s.3 fontWeightAdjustment=0},deviceId=0,referrer=com.android.shell,procState=2,state=null,persistentState=null,pendingResults=null,pendingNewIntents=null,sceneTransitionInfo=null,profilerInfo=null,assistToken=android.os.BinderProxy@4a532d7,shareableActivityToken=android.os.BinderProxy@91e57c4,activityWindowInfo=ActivityWindowInfo{isEmbedded=false, taskBounds=Rect(0, 0 - 1080, 2400), taskFragmentBounds=Rect(0, 0 - 1080, 2400)}} tId:-489014647 ResumeActivityItem{mActivityToken=android.os.BinderProxy@b507644,procState=-1,updateProcState=false,isForward=true,shouldSendCompatFakeFocus=false} tId:-489014647 Target activity: com.example.myapplication.MainActivity tId:-489014647 ] tId:-489014647 } 2025-07-28 11:10:19.677 5188-5188 AndroidRuntime com.example.myapplication D Shutting down VM 2025-07-28 11:10:19.678 5188-5188 AndroidRuntime com.example.myapplication E FATAL EXCEPTION: main Process: com.example.myapplication, PID: 5188 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapplication/com.example.myapplication.MainActivity}: java.lang.ClassCastException: com.google.android.material.textfield.MaterialAutoCompleteTextView cannot be cast to android.widget.Spinner at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4047) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4234) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:112) at android.app.servertransaction.TransactionExecutor.executeNonLifecycleItem(TransactionExecutor.java:174) at android.app.servertransaction.TransactionExecutor.executeTransactionItems(TransactionExecutor.java:109) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:81) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2635) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loopOnce(Looper.java:232) at android.os.Looper.loop(Looper.java:317) at android.app.ActivityThread.main(ActivityThread.java:8699) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:886) Caused by: java.lang.ClassCastException: com.google.android.material.textfield.MaterialAutoCompleteTextView cannot be cast to android.widget.Spinner at com.example.myapplication.MainActivity.onCreate(MainActivity.kt:21) at android.app.Activity.performCreate(Activity.java:8980) at android.app.Activity.performCreate(Activity.java:8958) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1526) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4029) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4234)  at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:112)  at android.app.servertransaction.TransactionExecutor.executeNonLifecycleItem(TransactionExecutor.java:174)  at android.app.servertransaction.TransactionExecutor.executeTransactionItems(TransactionExecutor.java:109)  at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:81)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2635)  at android.os.Handler.dispatchMessage(Handler.java:107)  at android.os.Looper.loopOnce(Looper.java:232)  at android.os.Looper.loop(Looper.java:317)  at android.app.ActivityThread.main(ActivityThread.java:8699)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:886)  2025-07-28 11:10:19.776 5188-5193 e.myapplication com.example.myapplication I Compiler allocated 4219KB to compile void android.widget.TextView.<init>(android.content.Context, android.util.AttributeSet, int, int)

package com.example.newviewapplication; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; public class CustomView extends View { private Paint mPainter; public CustomView(Context context) { super(context); init(); } public CustomView(Context context, @Nullable AttributeSet attrs) { this(context, attrs,0); init(); } public CustomView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); TypedArray t = context.obtainStyledAttributes(attrs,R.styleable.CustomView); int mColor = t.getColor(R.styleable.CustomView_circle_color,Color.BLUE); t.recycle(); mPainter.setColor(mColor); init(); } public CustomView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } private void init(){ mPainter = new Paint(); mPainter.setColor(Color.RED); mPainter.setStrokeWidth(5f); mPainter.setStyle(Paint.Style.FILL); } @Override protected void onDraw(@NonNull Canvas canvas) { super.onDraw(canvas); //padding生效 // 获取传入的padding值 final int paddingLeft = getPaddingLeft(); final int paddingRight = getPaddingRight(); final int paddingTop = getPaddingTop(); final int paddingBottom = getPaddingBottom(); // 获取绘制内容的高度和宽度(考虑了四个方向的padding值) int width = getWidth() - paddingLeft - paddingRight ; int height = getHeight() - paddingTop - paddingBottom ; // 设置圆的半径 = 宽,高最小值的2分之1 int r = Math.min(width, height)/2; // 画出圆(蓝色) // 圆心 = 控件的中央,半径 = 宽,高最小值的2分之1 canvas.drawCircle(paddingLeft+width/2,paddingTop+height/2,r,mPainter); } //wrap_content生效 @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); // 获取宽-测量规则的模式和大小 int widthMode = MeasureSpec.getMode(widthMeasureSpec); int widthSize = MeasureSpec.getSize(widthMeasureSpec); // 获取高-测量规则的模式和大小 int heightMode = MeasureSpec.getMode(heightMeasureSpec); int heightSize = MeasureSpec.getSize(heightMeasureSpec); // 设置wrap_content的默认宽 / 高值 // 默认宽/高的设定并无固定依据,根据需要灵活设置 // 类似TextView,ImageView等针对wrap_content均在onMeasure()对设置默认宽 / 高值有特殊处理,具体读者可以自行查看 int mWidth = 400; int mHeight = 400; // 当布局参数设置为wrap_content时,设置默认值 if (getLayoutParams().width == ViewGroup.LayoutParams.WRAP_CONTENT && getLayoutParams().height == ViewGroup.LayoutParams.WRAP_CONTENT) { setMeasuredDimension(mWidth, mHeight); // 宽 / 高任意一个布局参数为= wrap_content时,都设置默认值 } else if (getLayoutParams().width == ViewGroup.LayoutParams.WRAP_CONTENT) { setMeasuredDimension(mWidth, heightSize); } else if (getLayoutParams().height == ViewGroup.LayoutParams.WRAP_CONTENT) { setMeasuredDimension(widthSize, mHeight); } } } 代码报错:FATAL EXCEPTION: main Process: com.example.newviewapplication, PID: 15829 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.newviewapplication/com.example.newviewapplication.MainActivity}: android.view.InflateException: Binary XML file line #15 in com.example.newviewapplication:layout/activity_main: Binary XML file line #15 in com.example.newviewapplication:layout/activity_main: Error inflating class com.example.newviewapplication.CustomView

2025-07-14 19:12:21.243 15048-15048 nativeloader com.example.baiyunmap D Configuring clns-9 for other apk /data/app/~~OljfxsydegH-sraOS4Y7Kg==/com.example.baiyunmap-QyH9YPNP5Ohzcm110rmefQ==/base.apk. target_sdk_version=35, uses_libraries=, library_path=/data/app/~~OljfxsydegH-sraOS4Y7Kg==/com.example.baiyunmap-QyH9YPNP5Ohzcm110rmefQ==/lib/x86_64:/data/app/~~OljfxsydegH-sraOS4Y7Kg==/com.example.baiyunmap-QyH9YPNP5Ohzcm110rmefQ==/base.apk!/lib/x86_64, permitted_path=/data:/mnt/expand:/data/user/0/com.example.baiyunmap 2025-07-14 19:12:21.246 15048-15048 CompatChangeReporter com.example.baiyunmap D Compat change id reported: 202956589; UID 10220; state: ENABLED 2025-07-14 19:12:21.251 15048-15048 ample.baiyunmap com.example.baiyunmap I AssetManager2(0x77841ae44c58) locale list changing from [] to [en-US] 2025-07-14 19:12:21.256 15048-15048 GraphicsEnvironment com.example.baiyunmap V Currently set values for: 2025-07-14 19:12:21.256 15048-15048 GraphicsEnvironment com.example.baiyunmap V angle_gl_driver_selection_pkgs=[] 2025-07-14 19:12:21.256 15048-15048 GraphicsEnvironment com.example.baiyunmap V angle_gl_driver_selection_values=[] 2025-07-14 19:12:21.256 15048-15048 GraphicsEnvironment com.example.baiyunmap V com.example.baiyunmap is not listed in per-application setting 2025-07-14 19:12:21.256 15048-15048 GraphicsEnvironment com.example.baiyunmap V ANGLE allowlist from config: 2025-07-14 19:12:21.256 15048-15048 GraphicsEnvironment com.example.baiyunmap V com.example.baiyunmap is not listed in ANGLE allowlist or settings, returning default 2025-07-14 19:12:21.256 15048-15048 GraphicsEnvironment com.example.baiyunmap V Neither updatable production driver nor prerelease driver is supported. 2025-07-14 19:12:21.270 15048-15048 nativeloader com.example.baiyunmap D Load /data/app/~~OljfxsydegH-sraOS4Y7Kg==/com.example.baiyunmap-QyH9YPNP5Ohzcm110rmefQ==/lib/x86_64/libBaiduMapSDK_base_v7_6_5.so using class loader ns clns-9 (caller=/data/app/~~OljfxsydegH-sraOS4Y7Kg==/com.example.baiyunmap-QyH9YPNP5Ohzcm110rmefQ==/base.apk!classes3.dex): ok 2025-07-14 19:12:21.301 15048-15048 CompatChangeReporter com.example.baiyunmap D Compat change id reported: 279646685; UID 10220; state: ENABLED 2025-07-14 19:12:21.314 15048-15048 PermissionCheck com.example.baiyunmap E The authManager is: null; the authCallback is: null; the mContext is: null 2025-07-14 19:12:21.319 15048-15048 BaiduApiAuth com.example.baiyunmap I BaiduApiAuth SDK Version:1.0.32 2025-07-14 19:12:21.334 15048-15085 ashmem com.example.baiyunmap E Pinning is deprecated since Android Q. Please use trim or other methods. 2025-07-14 19:12:21.369 15048-15085 CuidBuddyInfoManager com.example.baiyunmap W galaxy lib host missing meta-data,make sure you know the right way to integrate galaxy 2025-07-14 19:12:21.370 15048-15085 CuidBuddyInfoManager com.example.baiyunmap W galaxy lib host missing meta-data,make sure you know the right way to integrate galaxy 2025-07-14 19:12:21.370 15048-15085 CuidBuddyInfoManager com.example.baiyunmap W galaxy lib host missing meta-data,make sure you know the right way to integrate galaxy 2025-07-14 19:12:21.402 15048-15048 PermissionCheck com.example.baiyunmap E The authManager is: null; the authCallback is: null; the mContext is: null 2025-07-14 19:12:21.418 15048-15087 nativeloader com.example.baiyunmap D Load /data/app/~~OljfxsydegH-sraOS4Y7Kg==/com.example.baiyunmap-QyH9YPNP5Ohzcm110rmefQ==/lib/x86_64/libtiny_magic.so using class loader ns clns-9 (caller=/data/app/~~OljfxsydegH-sraOS4Y7Kg==/com.example.baiyunmap-QyH9YPNP5Ohzcm110rmefQ==/base.apk!classes4.dex): ok 2025-07-14 19:12:21.493 15048-15048 PermissionCheck com.example.baiyunmap E permission check result is: -11 2025-07-14 19:12:21.509 15048-15090 DisplayManager com.example.baiyunmap I Choreographer implicitly registered for the refresh rate. 2025-07-14 19:12:21.515 15048-15048 ample.baiyunmap com.example.baiyunmap I AssetManager2(0x77841ae4e578) locale list changing from [] to [en-US] 2025-07-14 19:12:21.532 15048-15048 CompatChangeReporter com.example.baiyunmap D Compat change id reported: 309578419; UID 10220; state: ENABLED 2025-07-14 19:12:21.534 15048-15048 DesktopModeFlags com.example.baiyunmap D Toggle override initialized to: OVERRIDE_UNSET 2025-07-14 19:12:21.536 15048-15090 EGL_emulation com.example.baiyunmap I Opening libGLESv1_CM_emulation.so 2025-07-14 19:12:21.537 15048-15090 EGL_emulation com.example.baiyunmap I Opening libGLESv2_emulation.so 2025-07-14 19:12:21.541 15048-15090 HWUI com.example.baiyunmap W Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without... 2025-07-14 19:12:21.541 15048-15090 HWUI com.example.baiyunmap W Failed to initialize 101010-2 format, error = EGL_SUCCESS 2025-07-14 19:12:21.569 15048-15048 nativeloader com.example.baiyunmap D Load /data/app/~~OljfxsydegH-sraOS4Y7Kg==/com.example.baiyunmap-QyH9YPNP5Ohzcm110rmefQ==/lib/x86_64/libBaiduMapSDK_map_for_navi_v7_6_5.so using class loader ns clns-9 (caller=/data/app/~~OljfxsydegH-sraOS4Y7Kg==/com.example.baiyunmap-QyH9YPNP5Ohzcm110rmefQ==/base.apk): ok 2025-07-14 19:12:21.573 15048-15048 System.err com.example.baiyunmap W java.lang.ClassNotFoundException: Didn't find class "com.baidu.platform.comjni.map.cloudcontrol.NACloudControl" on path: DexPathList[[zip file "/data/app/~~OljfxsydegH-sraOS4Y7Kg==/com.example.baiyunmap-QyH9YPNP5Ohzcm110rmefQ==/base.apk"],nativeLibraryDirectories=[/data/app/~~OljfxsydegH-sraOS4Y7Kg==/com.example.baiyunmap-QyH9YPNP5Ohzcm110rmefQ==/lib/x86_64, /data/app/~~OljfxsydegH-sraOS4Y7Kg==/com.example.baiyunmap-QyH9YPNP5Ohzcm110rmefQ==/base.apk!/lib/x86_64, /system/lib64, /system_ext/lib64]] 2025-07-14 19:12:21.573 15048-15048 System.err com.example.baiyunmap W at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259) 2025-07-14 19:12:21.574 15048-15048 System.err com.example.baiyunmap W at java.lang.ClassLoader.loadClass(ClassLoader.java:637) 2025-07-14 19:12:21.574 15048-15048 System.err com.example.baiyunmap W at java.lang.ClassLoader.loadClass(ClassLoader.java:573) 2025-07-14 19:12:21.575 15048-15048 System.err com.example.baiyunmap W at java.lang.Runtime.nativeLoad(Native Method) 2025-07-14 19:12:21.575 15048-15048 System.err com.example.baiyunmap W at java.lang.Runtime.loadLibrary0(Runtime.java:1088) 2025-07-14 19:12:21.576 15048-15048 System.err com.example.baiyunmap W at java.lang.Runtime.loadLibrary0(Runtime.java:1012) 2025-07-14 19:12:21.576 15048-15048 System.err com.example.baiyunmap W at java.lang.System.loadLibrary(System.java:1765) 2025-07-14 19:12:21.577 15048-15048 System.err com.example.baiyunmap W at com.baidu.mapsdkplatform.comapi.NativeLoader.a(NativeLoader.java:103) 2025-07-14 19:12:21.577 15048-15048 System.err com.example.baiyunmap W at com.baidu.mapsdkplatform.comapi.NativeLoader.loadLibrary(NativeLoader.java:84) 2025-07-14 19:12:21.577 15048-15048 System.err com.example.baiyunmap W at com.baidu.mapsdkplatform.comapi.map.i.<clinit>(EngineManager.java:272) 2025-07-14 19:12:21.578 15048-15048 System.err com.example.baiyunmap W at com.baidu.mapapi.map.MapView.a(MapView.java:456) 2025-07-14 19:12:21.579 15048-15048 System.err com.example.baiyunmap W at com.baidu.mapapi.map.MapView.<init>(MapView.java:179) 2025-07-14 19:12:21.579 15048-15048 System.err com.example.baiyunmap W at java.lang.reflect.Constructor.newInstance0(Native Method) 2025-07-14 19:12:21.579 15048-15048 System.err com.example.baiyunmap W at java.lang.reflect.Constructor.newInstance(Constructor.java:343) 2025-07-14 19:12:21.579 15048-15048 System.err com.example.baiyunmap W at android.view.LayoutInflater.createView(LayoutInflater.java:743) 2025-07-14 19:12:21.579 15048-15048 System.err com.example.baiyunmap W at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:895) 2025-07-14 19:12:21.580 15048-15048 System.err com.example.baiyunmap W at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:850) 2025-07-14 19:12:21.581 15048-15048 System.err com.example.baiyunmap W at android.view.LayoutInflater.rInflate(LayoutInflater.java:1012) 2025-07-14 19:12:21.581 15048-15048 System.err com.example.baiyunmap W at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:973) 2025-07-14 19:12:21.582 15048-15048 System.err com.example.baiyunmap W at android.view.LayoutInflater.inflate(LayoutInflater.java:571) 2025-07-14 19:12:21.582 15048-15048 System.err com.example.baiyunmap W at android.view.LayoutInflater.inflate(LayoutInflater.java:462) 2025-07-14 19:12:21.582 15048-15048 System.err com.example.baiyunmap W at android.view.LayoutInflater.inflate(LayoutInflater.java:413) 2025-07-14 19:12:21.582 15048-15048 System.err com.example.baiyunmap W at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:577) 2025-07-14 19:12:21.583 15048-15048 System.err com.example.baiyunmap W at android.app.Activity.setContentView(Activity.java:3892) 2025-07-14 19:12:21.583 15048-15048 System.err com.example.baiyunmap W at com.example.baiyunmap.MainActivity.onCreate(MainActivity.java:78) 2025-07-14 19:12:21.583 15048-15048 System.err com.example.baiyunmap W at android.app.Activity.performCreate(Activity.java:9155) 2025-07-14 19:12:21.583 15048-15048 System.err com.example.baiyunmap W at android.app.Activity.performCreate(Activity.java:9133) 2025-07-14 19:12:21.583 15048-15048 System.err com.example.baiyunmap W at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1521) 2025-07-14 19:12:21.583 15048-15048 System.err com.example.baiyunmap W at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4262) 2025-07-14 19:12:21.583 15048-15048 System.err com.example.baiyunmap W at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4467) 2025-07-14 19:12:21.584 15048-15048 System.err com.example.baiyunmap W at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:222) 2025-07-14 19:12:21.584 15048-15048 System.err com.example.baiyunmap W at android.app.servertransaction.TransactionExecutor.executeNonLifecycleItem(TransactionExecutor.java:133) 2025-07-14 19:12:21.585 15048-15048 System.err com.example.baiyunmap W at android.app.servertransaction.TransactionExecutor.executeTransactionItems(TransactionExecutor.java:103) 2025-07-14 19:12:21.585 15048-15048 System.err com.example.baiyunmap W at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:80) 2025-07-14 19:12:21.586 15048-15048 System.err com.example.baiyunmap W at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2823) 2025-07-14 19:12:21.586 15048-15048 System.err com.example.baiyunmap W at android.os.Handler.dispatchMessage(Handler.java:110) 2025-07-14 19:12:21.586 15048-15048 System.err com.example.baiyunmap W at android.os.Looper.loopOnce(Looper.java:248) 2025-07-14 19:12:21.586 15048-15048 System.err com.example.baiyunmap W at android.os.Looper.loop(Looper.java:338) 2025-07-14 19:12:21.586 15048-15048 System.err com.example.baiyunmap W at android.app.ActivityThread.main(ActivityThread.java:9067) 2025-07-14 19:12:21.586 15048-15048 System.err com.example.baiyunmap W at java.lang.reflect.Method.invoke(Native Method) 2025-07-14 19:12:21.587 15048-15048 System.err com.example.baiyunmap W at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:593) 2025-07-14 19:12:21.587 15048-15048 System.err com.example.baiyunmap W at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:932) 2025-07-14 19:12:21.590 15048-15048 ample.baiyunmap com.example.baiyunmap W CheckJNI: method to register "nativeSetLayerTag" not in the given class. This is slow, consider changing your RegisterNatives calls. 2025-07-14 19:12:21.608 15048-15097 DEBUG com.example.baiyunmap D ThreadProc, CVSocketMan::SocketThreadProc start ... 2025-07-14 19:12:21.611 15048-15048 NetworkLogic com.example.baiyunmap D onNetWorkChanged-0, oldType = mobile 2025-07-14 19:12:21.613 15048-15048 PermissionCheck com.example.baiyunmap E permission check result is: -11 2025-07-14 19:12:21.613 15048-15098 NetworkLogic com.example.baiyunmap D NetworkDetect 2025-07-14 19:12:21.621 15048-15098 DEBUG com.example.baiyunmap D CNetworkDetectEngine::NetworkDetect Start 1 2025-07-14 19:12:21.664 15048-15048 libc com.example.baiyunmap A Fatal signal 11 (SIGSEGV), code 128 (SI_KERNEL), fault addr 0x0 in tid 15048 (ample.baiyunmap), pid 15048 (ample.baiyunmap) 2025-07-14 19:12:22.746 15112-15112 DEBUG crash_dump64 A Cmdline: com.example.baiyunmap 2025-07-14 19:12:22.746 15112-15112 DEBUG crash_dump64 A pid: 15048, tid: 15048, name: ample.baiyunmap >>> com.example.baiyunmap <<< 2025-07-14 19:12:22.746 15112-15112 DEBUG crash_dump64 A #00 pc 00000000004cab64 /data/app/~~OljfxsydegH-sraOS4Y7Kg==/com.example.baiyunmap-QyH9YPNP5Ohzcm110rmefQ==/lib/x86_64/libBaiduMapSDK_map_for_navi_v7_6_5.so (_baidu_framework::CBaseLayer::CBaseLayer()+148) (BuildId: 72389d7e76ac01b9603c2b9a85daaaadbdc06757) 2025-07-14 19:12:22.746 15112-15112 DEBUG crash_dump64 A #01 pc 000000000072d769 /data/app/~~OljfxsydegH-sraOS4Y7Kg==/com.example.baiyunmap-QyH9YPNP5Ohzcm110rmefQ==/lib/x86_64/libBaiduMapSDK_map_for_navi_v7_6_5.so (BuildId: 72389d7e76ac01b9603c2b9a85daaaadbdc06757) 2025-07-14 19:12:22.746 15112-15112 DEBUG crash_dump64 A #02 pc 0000000000741036 /data/app/~~OljfxsydegH-sraOS4Y7Kg==/com.example.baiyunmap-QyH9YPNP5Ohzcm110rmefQ==/lib/x86_64/libBaiduMapSDK_map_for_navi_v7_6_5.so (BuildId: 72389d7e76ac01b9603c2b9a85daaaadbdc06757) 2025-07-14 19:12:22.746 15112-15112 DEBUG crash_dump64 A #03 pc 000000000043abb0 /data/app/~~OljfxsydegH-sraOS4Y7Kg==/com.example.baiyunmap-QyH9YPNP5Ohzcm110rmefQ==/lib/x86_64/libBaiduMapSDK_map_for_navi_v7_6_5.so (_baidu_framework::CVComServer::ComCreateInstance(_baidu_vi::CVString const&, _baidu_vi::CVString const&, void**)+112) (BuildId: 72389d7e76ac01b9603c2b9a85daaaadbdc06757) 2025-07-14 19:12:22.746 15112-15112 DEBUG crash_dump64 A #04 pc 000000000052e8b1 /data/app/~~OljfxsydegH-sraOS4Y7Kg==/com.example.baiyunmap-QyH9YPNP5Ohzcm110rmefQ==/lib/x86_64/libBaiduMapSDK_map_for_navi_v7_6_5.so (BuildId: 72389d7e76ac01b9603c2b9a85daaaadbdc06757) 2025-07-14 19:12:22.746 15112-15112 DEBUG crash_dump64 A #05 pc 0000000000530502 /data/app/~~OljfxsydegH-sraOS4Y7Kg==/com.example.baiyunmap-QyH9YPNP5Ohzcm110rmefQ==/lib/x86_64/libBaiduMapSDK_map_for_navi_v7_6_5.so (BuildId: 72389d7e76ac01b9603c2b9a85daaaadbdc06757) 2025-07-14 19:12:22.746 15112-15112 DEBUG crash_dump64 A #06 pc 0000000000522990 /data/app/~~OljfxsydegH-sraOS4Y7Kg==/com.example.baiyunmap-QyH9YPNP5Ohzcm110rmefQ==/lib/x86_64/libBaiduMapSDK_map_for_navi_v7_6_5.so (_baidu_framework::IVMapbaseFactory::CreateInstance(_baidu_vi::CVString const&, void**)+128) (BuildId: 72389d7e76ac01b9603c2b9a85daaaadbdc06757) 2025-07-14 19:12:22.746 15112-15112 DEBUG crash_dump64 A #07 pc 000000000043abb0 /data/app/~~OljfxsydegH-sraOS4Y7Kg==/com.example.baiyunmap-QyH9YPNP5Ohzcm110rmefQ==/lib/x86_64/libBaiduMapSDK_map_for_navi_v7_6_5.so (_baidu_framework::CVComServer::ComCreateInstance(_baidu_vi::CVString const&, _baidu_vi::CVString const&, void**)+112) (BuildId: 72389d7e76ac01b9603c2b9a85daaaadbdc06757) 2025-07-14 19:12:22.746 15112-15112 DEBUG crash_dump64 A #08 pc 000000000048b694 /data/app/~~OljfxsydegH-sraOS4Y7Kg==/com.example.baiyunmap-QyH9YPNP5Ohzcm110rmefQ==/lib/x86_64/libBaiduMapSDK_map_for_navi_v7_6_5.so (BuildId: 72389d7e76ac01b9603c2b9a85daaaadbdc06757) 2025-07-14 19:12:22.750 15112-15112 DEBUG crash_dump64 A #143 pc 000000000000161c <anonymous:7784fd1de000> (com.example.baiyunmap.MainActivity.onCreate+0)

最新推荐

recommend-type

永磁同步电机PMSM效率优化Simulink建模及仿真分析 Simulink v1.0

作者自行搭建的永磁同步电机(PMSM)效率优化Simulink模型,涵盖基于FOC(全桥正交电流控制)的进退法和黄金分割法效率优化,以及基于DTC(直接转矩控制)的最小损耗LMC模型。通过调整控制策略如电流波形、控制参数等,探讨了不同方法对电机效率的影响,并强调了使用2018及以上版本Matlab进行仿真的重要性。 适合人群:从事电机控制系统设计的研究人员和技术人员,尤其是对永磁同步电机效率优化感兴趣的工程师。 使用场景及目标:适用于需要进行电机效率优化和性能仿真的场合,旨在帮助研究人员理解和应用各种优化方法,提升电机系统的能效水平。 其他说明:文中提到的方法不仅有助于理论研究,还能指导实际工程应用,确保仿真结果的准确性和可靠性。
recommend-type

python基于k-means算法的校园美食推荐系统(完整项目源码+mysql+说明文档+LW+PPT)计算机毕业设计源码.zip

前台模块 前台模块是面向用户的界面,包含以下功能: 系统首页:系统的主页面,提供导航和概览。 美食信息:展示校园内的美食信息。 校园资讯:提供校园相关的新闻和信息。 个人中心:用户可以管理个人信息,包括修改密码和查看收藏。 后台模块 后台模块是面向管理员的界面,包含以下功能: 系统首页:管理员的主界面。 学生:管理学生信息。 美食信息:管理美食相关的信息。 预测数据:处理和分析预测数据,可能用于推荐算法。 系统管理:管理系统设置,如用户权限、系统配置等。 个人中心:管理员的个人信息管理。 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
recommend-type

rubygem-mustache-doc-1.0.2-8.el8.tar.gz

# 适用操作系统:Centos8 #Step1、解压 tar -zxvf xxx.el8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm
recommend-type

岩土工程中基于COMSOL的水平裂隙岩体注浆扩散数值模拟及浆液黏度时空变化分析 · 数值模拟 精选版

如何使用COMSOL软件进行水平裂隙岩体注浆扩散的数值模拟,重点探讨了浆液黏度的时空变化对扩散效果的影响。首先,文章概述了COMSOL的强大多物理场耦合分析功能及其在岩土工程中的应用背景。接着,深入讲解了注浆扩散的基本原理,特别是浆液黏度作为关键因素的作用机制。然后,逐步展示了COMSOL模拟的具体步骤,包括建模、设置材料属性、定义边界和初始条件、运行模拟及代码片段。最后,通过对模拟结果的分析,揭示了注浆过程中的关键因素,提出了优化注浆方案的方法。 适合人群:从事岩土工程、地质工程及相关领域的研究人员和技术人员,尤其是对数值模拟和浆液特性感兴趣的读者。 使用场景及目标:适用于需要深入了解岩体注浆扩散机制的研究项目,旨在通过数值模拟优化注浆工艺,提高施工效率和质量。 其他说明:文中提供的代码片段有助于读者快速上手COMSOL模拟,进一步探索岩体注浆的技术细节。
recommend-type

rubygem-highline-1.7.8-3.el8.tar.gz

# 适用操作系统:Centos8 #Step1、解压 tar -zxvf xxx.el8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm
recommend-type

GHCN气象站邻接矩阵的Python实现及地理距离应用

根据提供的文件信息,我们可以解析出以下知识点: **标题:“GHCN_邻接矩阵”** 全球历史气候网络(Global Historical Climatology Network,简称GHCN)是一个国际性项目,旨在收集和提供全球范围内的历史气候数据。邻接矩阵(Adjacency Matrix)是图论中的一个概念,用来表示图中各个顶点之间的相邻关系。 **知识点详细说明:** 1. **全球历史气候网络(GHCN):** - GHCN是一个汇集了全球范围内的历史气候数据资料的大型数据库。该数据库主要收集了全球各地的气象站提供的气温、降水、风速等气象数据。 - 这些数据的时间跨度很广,有些甚至可以追溯到19世纪中叶,为气候学家和相关研究人员提供了丰富的气候变迁数据。 - 通过分析这些数据,科学家可以研究气候变化的趋势、模式以及影响因素等。 2. **邻接矩阵:** - 在图论中,邻接矩阵是用来表示图中各个顶点之间相互连接关系的矩阵。 - 无向图的邻接矩阵是一个对称矩阵,如果顶点i与顶点j之间存在一条边,则矩阵中的元素A[i][j]和A[j][i]为1;否则为0。 - 邻接矩阵常用于计算机算法中,比如用于计算最短路径、网络的连通性、以及进行图的遍历等。 3. **地理距离:** - 在这个问题的上下文中,指的是气象站之间的空间距离。 - 计算气象站之间的地理距离通常使用地理信息系统(GIS)或球面几何学的方法,比如使用哈弗辛公式(Haversine formula)计算两个地点之间的大圆距离。 - 通过地理距离数据,可以推断出气候数据在空间分布上的相关性或依赖性。 4. **Python编程语言:** - 标签中提及的Python是一种广泛应用于数据科学、人工智能、网络开发等领域的高级编程语言。 - Python因其易学易用、语法简洁、库支持丰富等特点,在科研、教育、工业界等领域得到广泛应用。 5. **代码实现:** - 提到的代码应该会涉及获取GHCN数据集、计算气象站间的地理距离、以及根据这些距离构建无向图的邻接矩阵。 - 代码可能使用了Python中的科学计算库,如NumPy或SciPy,以及地理计算库,如geopy或Shapely。 - 通过构建邻接矩阵,此代码可以进一步用于分析气候数据的空间分布特征或执行图相关的数据分析任务。 **文件名称列表:“GHCN_Adjacency_Matrix-main”** 文件名“GHCN_Adjacency_Matrix-main”表明这是一个包含主要代码文件的文件夹。在Python中,“main”一词通常表示该文件夹中的某个脚本文件(如“main.py”)是程序的入口点,它是运行程序时最先被调用的文件。 总结以上内容,我们可知该文件描述了一个使用Python语言,通过处理全球历史气候网络(GHCN)中的数据来生成气象站之间地理距离的邻接矩阵的代码。这种邻接矩阵可以用于气候数据分析中的图论应用,如研究气象站点数据的空间分布模式和关系。代码的实现可能用到了多种Python库,旨在为气候研究提供一种新的数据处理和分析视角。
recommend-type

并发编程:多语言实践与策略选择

### 并发编程:多语言实践与策略选择 #### 1. 文件大小计算的并发实现 在并发计算文件大小的场景中,我们可以采用数据流式方法。具体操作如下: - 创建两个 `DataFlowQueue` 实例,一个用于记录活跃的文件访问,另一个用于接收文件和子目录的大小。 - 创建一个 `DefaultPGroup` 来在线程池中运行任务。 ```plaintext graph LR A[创建 DataFlowQueue 实例] --> B[创建 DefaultPGroup] B --> C[执行 findSize 方法] C --> D[执行 findTotalFileS
recommend-type

3utools使用教程

<think>我们注意到用户查询的是"3utools",但引用中提到的都是"uTools"(没有数字3)。这可能是一个拼写错误或版本差异。 根据引用内容,uTools是一个桌面效率工具,提供插件化的功能。因此,我们假设用户指的是uTools,并据此提供使用指南。 如果确实存在名为"3uTools"的软件(例如,苹果设备管理工具),那么我们需要澄清:引用中提到的uTools与3uTools不同。 但是,由于引用中只提到了uTools,且用户的问题中写的是“3utools”(可能是uTools的误写),我们将按照uTools来回答。 如果用户确实指的是另一个软件(3uTools),那么
recommend-type

探索更多视频功能的JavaScript实现

从给定的信息中我们可以提炼出关键词"更多视频"以及"JavaScript",以及一个与文件相关的命名"MoreVideo-master"。接下来,我会针对这些关键词展开详细的IT知识点阐述。 首先,关于“更多视频”,这个描述暗示了我们即将探讨的是与视频内容相关的技术或应用。在现代IT领域中,视频内容的处理、存储、传输和播放是一个非常重要的分支,涉及到的技术包括但不限于视频编码、流媒体技术、网络协议、前端展示技术等。视频内容的增多以及互联网带宽的不断提升,使得在线视频消费成为可能。从最早的ASCII动画到现代的高清视频,技术的演进一直不断推动着我们向更高质量和更多样化的视频内容靠近。 其次,“JavaScript”是IT行业中的一个关键知识点。它是一种广泛使用的脚本语言,特别适用于网页开发。JavaScript可以实现网页上的动态交互,比如表单验证、动画效果、异步数据加载(AJAX)、以及单页应用(SPA)等。作为一种客户端脚本语言,JavaScript可以对用户的输入做出即时反应,无需重新加载页面。此外,JavaScript还可以运行在服务器端(例如Node.js),这进一步拓宽了它的应用范围。 在探讨JavaScript时,不得不提的是Web前端开发。在现代的Web应用开发中,前端开发越来越成为项目的重要组成部分。前端开发人员需要掌握HTML、CSS和JavaScript这三大核心技术。其中,JavaScript负责赋予网页以动态效果,提升用户体验。JavaScript的库和框架也非常丰富,比如jQuery、React、Vue、Angular等,它们可以帮助开发者更加高效地编写和管理前端代码。 最后,关于文件名“MoreVideo-master”,这里的“Master”通常表示这是一个项目或者源代码的主版本。例如,在使用版本控制系统(如Git)时,“Master”分支通常被认为是项目的主分支,包含最新的稳定代码。文件名中的“MoreVideo”表明该项目与视频相关的内容处理功能正在增加或扩展。可能是对现有功能的增强,也可能是为视频播放、视频处理或视频管理增加了新的模块或特性。 综合上述内容,我们可以总结出以下几个IT知识点: 1. 视频技术:包括视频编解码技术、流媒体技术、网络协议、视频格式转换等。在客户端和服务器端,视频技术的应用场景广泛,如在线视频平台、视频会议系统、视频监控系统等。 2. JavaScript应用:JavaScript在Web前端开发中的应用十分广泛,用于实现网页的动态效果和交互性,以及在后端通过Node.js提供服务器端编程能力。 3. 前端开发技术:前端开发不仅仅是页面的静态显示,更重要的是通过JavaScript、CSS和HTML等技术实现用户界面与用户之间的交互。前端框架和库的使用大大提高了开发效率。 4. 版本控制:在IT项目开发过程中,版本控制是一个重要的环节。它帮助开发者管理代码的变更历史,支持多人协作开发,使得代码维护和升级变得更加容易。 通过以上知识点,我们可以看到,无论是“更多视频”的技术应用还是“JavaScript”编程语言的使用,以及文件命名所隐含的项目管理概念,都是IT领域内相互关联且密不可分的几个重要方面。
recommend-type

并发编程中的Clojure代理与相关技术解析

### 并发编程中的Clojure代理与相关技术解析 #### 1. Clojure代理概述 Clojure代理代表内存中的单个标识或位置。与软件事务内存(STM)的引用管理多个标识的协调同步更改不同,代理允许对其管理的单个标识进行独立的异步更改。这些更改以函数或操作的形式表达,并异步应用于该位置。多个独立的并发操作会按顺序依次运行。操作成功完成后,代理将更新为操作返回的新状态,该新状态用于后续对代理的读取或操作。 调用在代理上运行操作的方法会立即返回,操作随后会使用Clojure管理的线程池中的一个线程应用于代理。如果操作主要受CPU限制,可使用`send()`方法运行;如果函数中可能发