正如Android文档所说,rawQuery方法的selectionArgs参数被解析为字符串.
SQLiteDatabase.rawQuery(String sql,String [] selectionArgs)
selectionArgs:您可以在查询中的where子句中包含?s,它将被selectionArgs中的值替换.这些值将绑定为字符串.
但是今天,我遇到了一个问题,这个问题花了我很大的一天.想象一下以下查询:
SELECT * FROM TABLE_A WHERE IFNULL(COLUMN_A, 0) >= 15
Run Code Online (Sandbox Code Playgroud)
COLUMN_A是INTEGER.该表有大约10行符合该标准.在数据库编辑器上运行查询,结果始终是正确的,但是,在智能手机上,语句始终不返回任何行.
一段时间后,将查询更改为:
SELECT * FROM TABLE_A WHERE IFNULL(COLUMN_A, 0) >= '15'
Run Code Online (Sandbox Code Playgroud)
并且编辑器没有返回任何行,就像Android一样.因此,将查询更改为:
SELECT * FROM TABLE_A WHERE CAST(IFNULL(COLUMN_A, 0) as INTEGER) >= '15'
Run Code Online (Sandbox Code Playgroud)
解决了这个问题.另一项测试是:
SELECT * FROM TABLE_A WHERE COLUMN_A >= '15'
Run Code Online (Sandbox Code Playgroud)
还,返回了正确的结果.
这似乎是一个问题,涉及Android使用IFNULL子句将参数绑定到查询(作为字符串)的方式.
那么,有人知道为什么会这样吗?如果不在查询中使用CAST,是否有任何建议可以解决这个问题?
在我的Java应用程序中,我定义了两个类,名为A,B其中B是内部类A.两者都被定义为可序列化的
public class A implements Serializable {
int attrParent;
List<B> items = new ArrayList<B>();
public void setAttrParent(int attrParent) {
this.attrParent = attrParent;
}
public int getAttrParent() {
return attrParent;
}
public class B implements Serializable {
private int attr;
public void setAttr(int attr) {
this.attr = attr;
}
public int getAttr() {
return attr;
}
public int getSomeCalculationValue() {
return this.attr * A.this.attrParent; // Problems occurs here
}
}
}
Run Code Online (Sandbox Code Playgroud)
在使用GSON序列化此对象 …
我今天正在学习TeamCity Integration Server,我正在尝试使用基于Android Gradle的应用程序启用Jococo Reports.
本文档向我展示了如何启用Jococo覆盖,并显示以下警告:
确保您的测试以fork = true模式运行.否则,可能无法正确收集覆盖数据.
我不知道该怎么做才能"在fork = true模式下运行我的测试".TeamCity没有生成覆盖率报告,并通过以下日志警告我:
Jacoco数据文件路径指定为C:\ TeamCity\buildAgent\temp\buildTmp\JACOCO5884661263301729570coverage\jacoco.exec但不可读.不会收集保险范围.
我认为这个警告与不在fork = true模式下运行测试有关.
所以,我的问题是:
谢谢!!!
我在使用Android 3.2(Honeycomb)的设备上运行SlidingMenu Library和ViewPager时遇到了一个奇怪的问题.
当我们"切换"SlidingMenu以显示隐藏在应用程序左侧的菜单时,会出现问题.当我们这样做时,ContentView和BehingContentView都停止响应触摸事件.
认为这是与我的应用程序相关的问题,我下载了最新版本的ABS和SlidingMenu库,并使用SlidingMenu附带的内置示例配置了一个新项目,令我惊讶的是,ViewPager发生了同样的行为例.
这些是我做的步骤:
请注意,此行为仅在Android 3.2设备上报告.我们在2.x和4.x设备上运行相同的应用程序,没有这个问题.
另外,注意到从Google Play下载的示例应用程序没有此问题.
有人有什么建议吗?非常感谢!
编辑1
在真实设备上测试,并确认行为.有人有建议吗?
有没有人知道为什么android:nextFocusDown attibute在我们设置onClick时停止工作?
在下面的示例中,我们定义了一些具有此属性的EditText:
<TableRow
android:weightSum="1"
android:gravity="center">
<EditText
android:id="@+id/txtChave1"
android:maxLength="4"
android:gravity="center"
android:textSize="16dp"
android:layout_height="wrap_content"
android:layout_weight=".23"
android:layout_width="0dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:singleLine="true"
android:selectAllOnFocus="true"
android:inputType="textCapCharacters"
android:nextFocusDown="@+id/txtChave2"></EditText>
<EditText
android:id="@+id/txtChave2"
android:maxLength="4"
android:gravity="center"
android:textSize="16dp"
android:layout_height="wrap_content"
android:layout_weight=".23"
android:layout_width="0dp"
android:layout_marginRight="5dp"
android:singleLine="true"
android:selectAllOnFocus="true"
android:inputType="textCapCharacters"
android:nextFocusDown="@+id/txtChave3"></EditText>
<EditText
android:id="@+id/txtChave3"
android:maxLength="4"
android:gravity="center"
android:textSize="16dp"
android:layout_height="wrap_content"
android:layout_weight=".23"
android:layout_width="0dp"
android:layout_marginRight="5dp"
android:singleLine="true"
android:selectAllOnFocus="true"
android:inputType="textCapCharacters"
android:nextFocusDown="@+id/txtChave4"></EditText>
<EditText
android:id="@+id/txtChave4"
android:maxLength="4"
android:gravity="center"
android:textSize="16dp"
android:layout_height="wrap_content"
android:layout_weight=".23"
android:layout_width="0dp"
android:layout_marginRight="5dp"
android:singleLine="true"
android:selectAllOnFocus="true"
android:inputType="textCapCharacters"></EditText>
</TableRow>
Run Code Online (Sandbox Code Playgroud)
如上所述,当用户点击虚拟键盘上的"下一个按钮"时,焦点会按预期更改...但是,如果我们设置onClick属性,则android:nextFocusDown将不再起作用.
<EditText
android:id="@+id/txtChave1"
android:maxLength="4"
android:gravity="center"
android:textSize="16dp"
android:layout_height="wrap_content"
android:layout_weight=".23"
android:layout_width="0dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:singleLine="true"
android:selectAllOnFocus="true"
android:inputType="textCapCharacters"
android:nextFocusDown="@+id/txtChave2"
android:onClick="onClickHandler">
</EditText>
Run Code Online (Sandbox Code Playgroud)
有什么建议?
非常感谢!
我有以下函数用于舍入Java中的double值:
public static double round(double d, int decimalPlace) {
BigDecimal bd = new BigDecimal(Double.toString(d));
bd = bd.setScale(decimalPlace, BigDecimal.ROUND_HALF_UP);
return bd.doubleValue();
}
Run Code Online (Sandbox Code Playgroud)
作为输入,此函数正在接收以下值:
double d = 7.3149999999999995;
int decimalPlace = 2
Run Code Online (Sandbox Code Playgroud)
但是,当函数返回时,返回的值是7.31,而不是7.32.我搜索了文档,看看为什么bd.SetScale与这种行为有关,但没有成功.
有没有人能解释为什么会这样?非常感谢!!
我在Android应用程序上有一个活动,它启动与我的服务器的同步过程.此过程消耗大量内存和处理,并且需要一些时间才能完成.
该过程完成后,将向用户显示AlertDialog,显示该过程是否已成功完成.
如果我离开活动前景,一切都会按预期工作.但是,有时,当我离开应用程序时,后台进程继续其工作,但是,当我返回到应用程序时,它崩溃并出现以下错误:
android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌android.os.BinderProxy@4086ea48无效; 你的活动在运行吗?
这个错误可能是因为操作系统破坏了活动吗?如果是,那么进程(在另一个线程上运行)如何继续运行?而且,如果我们确认问题是由活动的破坏引起的,我怎么能处理这种情况,避免崩溃并向用户显示对话框?
这是一些代码......
public class ActSincronizacao extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sincronizacao);
//Prepare so starts the process
[...]
// Defines a Handler that will be called when the process gets finished
oSocketEngine.addProgressUpdateFinishListener(new ProgressUpdateFinishListener() {
@Override
public void ProgressUpdateFinishOccurred(final ProgressUpdateFinish evt) {
//Do some processing that doesn´t envolve UI
[...]
// Process that envolves UI
runOnUiThread(new Runnable() {
public void run() {
if ((boolean)evt.getArgs().getResult()) {
//If the process …Run Code Online (Sandbox Code Playgroud) 在.NET上,我可以使用"反射"在运行时加载DLL库.这允许我为我的应用程序构建一些附加组件.
在Android上,有什么办法可以执行类似的操作吗?我想制作一个插件,安装后,可以从我的Android应用程序调用.
我的第一个想法是为APK这个附加组件构建另一个.然后,我的应用程序应遍历已安装的软件包以查看是否存在加载项.
之后,我如何加载该包(以及它拥有的活动)并在我的应用程序中使用它?要考虑的另一个细节是add-on需要访问主应用程序的同一数据库.
有谁知道我怎么能这样做?
非常感谢!
我们需要Round Half-UP以下NUMBER:
28.854623
Run Code Online (Sandbox Code Playgroud)
所以,'预期'的步骤是:
1) 28.854623
2) 28.85462
3) 28.8546
4) 28.855
5) 28.86
Run Code Online (Sandbox Code Playgroud)
但是,ROUND函数的结果似乎是错误的:
SELECT ROUND(28.854623, 2) FROM DUAL;
Result> 28.85
Run Code Online (Sandbox Code Playgroud)
如果我们以3位小数位执行,结果如预期:
SELECT ROUND(28.854623, 3) FROM DUAL;
Result> 28.855
Run Code Online (Sandbox Code Playgroud)
如果我们ROUND到3个地方,然后到2个地方,结果也是预期的:
SELECT ROUND (ROUND (28.854623, 3), 2) FROM DUAL
Result> 28.86
Run Code Online (Sandbox Code Playgroud)
有谁能解释我为什么会这样做?是不是ROUND函数在(N + 1)十进制位置上产生TRUNC,然后,舍入结果,如下所示:
ROUND(TRUNC(VALUE, N+1), N)
Run Code Online (Sandbox Code Playgroud)
谢谢!
I\xe2\x80\x99m 构建一个支持各种数据库引擎(MySQL、PostgreSQL、Oracle、SQL Server)的 Spring Boot 应用程序。
\n\n安装应用程序时,系统将提示用户选择要使用的数据库,之后将创建所有表。我认为我应该将用户选项保存在某处,然后使用它来选择我的应用程序将用于实例化存储库的正确引擎。
\n\n我在谷歌上搜索了一些参考资料或最佳实践,我应该遵循这些参考资料或最佳实践来实现这一点,但\xe2\x80\x99无法找到(也许我\xe2\x80\x99m搜索了错误的术语 - 抱歉)。
\n\n您有任何资源可以指引我正确的方向吗?
\n\n多谢!!!
\nandroid ×7
java ×2
rounding ×2
add-on ×1
bigdecimal ×1
dialog ×1
gradle ×1
gson ×1
json ×1
oracle ×1
slidingmenu ×1
spring ×1
spring-boot ×1
sqlite ×1
teamcity ×1