我正在尝试在Android中执行以下SQL查询:
String names = "'name1', 'name2"; // in the code this is dynamically generated
String query = "SELECT * FROM table WHERE name IN (?)";
Cursor cursor = mDb.rawQuery(query, new String[]{names});
Run Code Online (Sandbox Code Playgroud)
但是,Android不会使用正确的值替换问号.我可以执行以下操作,但是,这不能防止SQL注入:
String query = "SELECT * FROM table WHERE name IN (" + names + ")";
Cursor cursor = mDb.rawQuery(query, null);
Run Code Online (Sandbox Code Playgroud)
如何解决此问题并能够使用IN子句?
我正在尝试创建一个(sqlite)查询,该查询将执行GROUP BY,但不会将值为'unknown'的任何内容组合在一起.例如,我有表:
id | name | parent_id | school_id |
1 | john | 1 | 1 |
2 | john | 1 | 1 |
3 | john | 1 | 1 |
4 | nick | 2 | 2 |
5 | nick | 2 | 2 |
6 | nick | 3 | 3 |
7 | bob | 4 | 4 |
8 | unknown | 5 | 5 |
9 | unknown | 5 | …Run Code Online (Sandbox Code Playgroud) 我写了一些PHP代码来从mp3文件中提取ID3标签.下一步是对.m4a文件执行相同操作.从我所做的研究看起来,大多数m4a文件看起来不使用ID3,而是使用'atoms'的格式.
有没有可以解析这些'原子'的PHP库?我见过一些C#/ C++,但还没能找到任何PHP.任何其他指南或文档也会很棒.
谢谢
我的应用程序出现以下异常.我相信当用户离开应用程序很长一段时间然后返回它时会发生这种情况.我无法复制它,但它在我的崩溃日志中出现了很多.我不知道为什么会这样,所以任何建议都非常感谢.
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp/com.myapp.MyActivity}: java.lang.ArrayIndexOutOfBoundsException: length=3; index=-1
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2202)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2237)
at android.app.ActivityThread.access$600(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1262)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:4974)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ArrayIndexOutOfBoundsException: length=3; index=-1
at java.util.ArrayList.get(ArrayList.java:306)
at android.support.v4.app.FragmentManagerImpl.restoreAllState(FragmentManager.java:1764)
at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:198)
at com.myapp.MyActivity.onCreate(MyActivity.java:235)
at android.app.Activity.performCreate(Activity.java:4538)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1071)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2158)
... 11 more
Run Code Online (Sandbox Code Playgroud)
第235行如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); // line 235
Run Code Online (Sandbox Code Playgroud)
我的onSaveInstanceState()非常简单:
@Override
public void onSaveInstanceState(Bundle state) {
super.onSaveInstanceState(state);
state.putInt("id1", id1);
state.putInt("id2", …Run Code Online (Sandbox Code Playgroud) 我有一个显示嵌入式视频的webview.当设备旋转时,我可以阻止整个页面重新加载:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
webView.saveState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
webView.restoreState(savedInstanceState);
}
Run Code Online (Sandbox Code Playgroud)
但是,由于我在此网页浏览中播放视频,因此该视频无法继续播放.相反,它会加载视频,就好像它还没有开始播放一样.如何旋转屏幕但继续播放视频,就像什么都没发生一样?
谢谢
有没有办法一次调用多个mimeTypes?例如,我正在尝试查找文件夹中的所有mp3文件.看起来您需要为每个单独的mimeType调用以查找所有不同的mimeType,类似于:
https://www.googleapis.com/drive/v2/files?key=aaamykeyaaa&q=mimeType='audio/ mpeg'https: //www.googleapis.com/drive/v2/files? key = aaamykeyaaa & q = mimeType = ' audio/mpeg3'https: //www.googleapis.com/drive/v2/files? key = aaamykeyaaa & q = mimeType = 'audio/mp3'
是否无法在一个查询中包含多个mimeType?这样做是非常低效的.
谢谢.
我正在尝试使用以下代码更新我的数据库表:
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String query = "ALTER TABLE names ADD COLUMN hidden integer default 0";
dbHelper.getWritableDatabase().rawQuery(query, null);
}
Run Code Online (Sandbox Code Playgroud)
但是,当我启动应用程序并尝试升级数据库时,我得到以下异常:
...Caused by: java.lang.IllegalStateException: getWritableDatabase called recursively
Run Code Online (Sandbox Code Playgroud)
有谁知道我如何解决这个问题以及究竟是什么导致它?
谢谢
我有一个webview里面有html视频.我想全屏显示这个视频,所以我覆盖onShowCustomView了我WebChromeClient的使用方式VideoView.这在2.3中很有用,但是4.x onShowCustomView中从不调用.视频仍然会播放,但是,除了点击播放和停止之外,它还可以在webview中播放而无需任何控制.
另外,我有hardwareAccelerated ="true".
知道为什么onShowCustomView从来没有被称为?
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
webView = (WebView) findViewById(R.id.webView);
webView.getSettings().setSupportZoom(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setPluginState(WebSettings.PluginState.ON);
webView.setWebViewClient(new WebViewClient());
webView.setWebChromeClient(new MyChromeClient());
webView.loadUrl(URL);
}
private class MyChromeClient extends WebChromeClient implements
OnCompletionListener, OnErrorListener, OnPreparedListener {
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
Log.d("ma", "onShowCustomView");
}
...
Run Code Online (Sandbox Code Playgroud) 我目前正在使用Google Drive API来获取文件夹(或子文件夹)列表.为此,我使用以下URL:
https://www.googleapis.com/drive/v2/files/1234folderid1234/children?key=1234APIKEY1234&q=mimeType='application/vnd.google-apps.folder';
Run Code Online (Sandbox Code Playgroud)
这会按预期返回文件夹列表,但是,我还需要文件夹的名称或完整的文件夹路径.此调用不会返回此信息.有没有办法在一次调用中获取具有关联文件夹名称或路径的文件夹列表?
谢谢
当我从某项活动中得到一个结果时,OnActivityResult()我需要将ScrollView其定位在某个位置.如何将视图移动到我需要的位置?
我有一个在后台运行的服务。如果系统在内存不足的情况下终止此服务很好,但是,我不希望系统重新启动该服务。
因此,为了做到这一点,我从 onStartCommand 返回了 START_NOT_STICKY 标志,如下所示:
public int onStartCommand(Intent intent, int flags, int startId) {
// do stuff here
return START_NOT_STICKY;
}
Run Code Online (Sandbox Code Playgroud)
但是,当我故意打开一堆应用程序以创建低内存条件时,我在日志中看到了这一点:
Process com.myapp (pid 3960) has died.
Scheduling restart of crashed service com.myapp/.MyService in 5000ms
Low Memory: No more background processes.
...
Start proc com.myapp for service com.myapp/.MyService: pid=4905 uid=10031 gids={3003, 1015}
Run Code Online (Sandbox Code Playgroud)
所以我的进程在不应该重新启动时被重新启动。为什么是这样?根据文档 START_NOT_STICKY 不应允许重新启动服务。有没有其他方法可以防止服务重新启动?或者我可以知道我的服务何时重新启动?
谢谢
我有一个RelativeLayout包含a ProgressBar和a 的应用程序WebView.它没什么复杂的.但是,我得到了一个非常奇怪的崩溃,我甚至没有看到ANR对话框.在ProgressBarxml中注释掉允许应用程序不会崩溃,但是我想使用它.任何想法为什么崩溃?
xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ProgressBar
android:id="@+id/progress"
android:layout_width="match_parent"
android:layout_height="2dp"
android:layout_gravity="center"
android:layout_marginBottom="3dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="3dp"
android:indeterminate="false"
android:indeterminateOnly="false"
android:maxHeight="2dp"
android:minHeight="2dp"
android:progressDrawable="@android:drawable/progress_horizontal" />
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="8dp"
android:background="@android:color/transparent"
android:scrollbars="none" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
日志输出:
09-06 16:57:41.233: I/ActivityManager(358): Displayed com.example.myapp.video/.MainActivity: +341ms
09-06 16:57:41.313: D/dalvikvm(27248): GC_FOR_ALLOC freed 3498K, 42% free 19676K/33543K, paused 47ms, total 50ms
09-06 16:57:41.423: D/dalvikvm(27248): GC_FOR_ALLOC freed 1565K, 41% free 19940K/33543K, paused 54ms, total 54ms
09-06 16:57:41.583: …Run Code Online (Sandbox Code Playgroud) android android-layout android-webview android-4.2-jelly-bean
我试图删除一个表中没有相应ID的所有行在另一个表中.由于SQLite显然不支持删除中的连接,因此我尝试按以下方式执行操作:
DELETE FROM my_table WHERE my_id NOT IN (SELECT _id FROM my_table2);
Run Code Online (Sandbox Code Playgroud)
但是,我显然不能使用rawQuery,因为它返回一个游标,所以我必须使用delete函数.我在使用这个工作时遇到了一些麻烦.这是我正在尝试的查询:
mDb.delete("my_table", "my_id NOT IN ?", new String[]{"(SELECT _id FROM my_table2)"});
Run Code Online (Sandbox Code Playgroud)
谢谢.