gpt4 book ai didi

java - Android调试器隐藏局部变量

转载 作者:搜寻专家 更新时间:2023-10-30 19:50:47 25 4
gpt4 key购买 nike

在执行以下代码时,使用 Android 的调试器时我有一个奇怪的行为。变量 value 在被小部件初始化后立即消失。我将其移至 watch ,但它显示 “找不到局部变量值”。无论我把变量放在哪里,在 for 循环之前还是在里面,无论如何它的行为都是一样的。我还打印了变量,正如您在代码中看到的那样,它显示 "value is null" 但是当我通过 if (value == null) 检查它时,它没有尝试将其转换为整数时停止并最终抛出错误。

代码:

    for (int i=0; i < (view != null ? ((ViewGroup)view).getChildCount() : 0); i++)
{
// Get name of the widget for example field__id,
// Convert to field name replacing field__id for id
// or for example field_name to name
// Check if the field exists in the column name, if so, add the ContentValue
View widget = ((ViewGroup)view).getChildAt(i);
String widgetName = view.getResources().getResourceEntryName(widget.getId());
String fieldName = widgetName.replace(Model.fieldPrefix,"");
Object value = null;

if (columnNames.contains(fieldName)) {
// TableField on the table matches the field on the form
try {
if (widget instanceof TextView) {
value = ((TextView) widget).getText().toString();
} else if (widget instanceof Spinner) {
value = ((SpinnerRow) ((Spinner) widget).getSelectedItem()).getId();
} else if (widget instanceof DatePicker) {
String date = AppDatabase.formatDateTime( getContext(), ((DatePicker) widget).getYear() + "-" + ((DatePicker) widget).getMonth() + "-" + ((DatePicker) widget).getDayOfMonth());
contentValues.put(fieldName, date ) ;
} else {
throw new ClassCastException("Could not cast the widget"+widget.getClass().toString());
}
Log.d(AppController.DEBUG_TAG, "Widget "+widgetName+" value is " + value.toString());

} catch (NullPointerException e) {
// Ignore exception:
value = null;
}

TableField tableField = this.getTable().getFieldByName(fieldName);

if ( (tableField.isPrimaryKey() && (value.equals("-1") || value.equals("")))
|| !tableField.getNotNull() && value.toString().length()==0 )
value = null;

if ( value == null || tableField.getType() == SQLiteCursor.FIELD_TYPE_NULL ) {
contentValues.putNull(fieldName);
} else if (tableField.getType() == SQLiteCursor.FIELD_TYPE_STRING || tableField.getType() == SQLiteCursor.FIELD_TYPE_VARCHAR) {
contentValues.put(fieldName, String.valueOf(value));
} else if (tableField.getType() == SQLiteCursor.FIELD_TYPE_INTEGER) {
contentValues.put(fieldName, Integer.valueOf(value.toString()) );
} else if (tableField.getType() == SQLiteCursor.FIELD_TYPE_FLOAT) {
contentValues.put(fieldName,Float.valueOf(value.toString()));
} else if (tableField.getType() == SQLiteCursor.FIELD_TYPE_BLOB) {
contentValues.put(fieldName,String.valueOf(value));
}

}

}

最佳答案

你使用混淆器吗?

如果是,那可能是问题所在 - 用

禁用它
-dontobfuscate

你应该把它和 proguard 规则放在你的文件中(通常是 proguard-rules.txt,在 build.gradle 文件中检查你的 proguard 配置,就像下面的例子一样:

buildTypes {
debug {
runProguard true
zipAlign true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
signingConfig signingConfigs.debug
testCoverageEnabled true
}
}

关于java - Android调试器隐藏局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20271171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com