标签: android

ContentProvider insert()总是在UI线程上运行?

我有一个应用程序需要从服务器提取数据并将其插入SQLite数据库以响应用户输入.我认为这很简单 - 从服务器提取数据的代码是AsyncTask的一个相当简单的子类,它完全按照我的预期工作,而不会挂起UI线程.我使用一个简单的接口为它实现了回调功能,并将其包装在一个静态类中,所以我的代码如下所示:

MyServerCaller.getFolderContents(folderId, new OnFolderContentsResponseListener() {
    @Override
    public void onFolderContentsResponse(final List<FilesystemEntry> contents) {
        // do something with contents
    }
}
Run Code Online (Sandbox Code Playgroud)

一切都还不错.即使服务器需要一个小时来检索数据,UI仍然可以顺利运行,因为getFolderContents中的代码在AsyncTask的doInBackground方法中运行(该方法与UI分开).在getFolderContents方法的最后,调用onFolderContentsResponse并传递从服务器接收的FilesystemEntry列表.我只是真的说了这一切,所以我希望很清楚我的问题不在getFolderContents方法或我的任何网络代码中,因为它不会在那里发生.

当我尝试通过onFolderContentsResponse方法中的ContentProvider子类插入数据库时​​出现问题; 在执行该代码时,UI总是挂起,这使我相信尽管从AsyncTask的doInBackground方法调用,插入仍然在UI线程上运行.以下是有问题的代码:

MyServerCaller.getFolderContents(folderId, new OnFolderContentsResponseListener() {
    @Override
    public void onFolderContentsResponse(final List<FilesystemEntry> contents) {
        insertContentsIntoDB(contents);
    }
}
Run Code Online (Sandbox Code Playgroud)

insertContentsIntoDB方法:

void insertContentsIntoDB(final List<FilesystemEntry> contents) {
    for (FilesystemEntry entry : contents) {
        ContentValues values = new ContentValues();
        values.put(COLUMN_1, entry.attr1);
        values.put(COLUMN_2, entry.attr2);
        // etc.

        mContentResolver.insert(MyContentProvider.CONTENT_URI, values);
    }
}
Run Code Online (Sandbox Code Playgroud)

其中mContentResolver先前已设置为getContentResolver()方法的结果.

我已经尝试将insertContentsIntoDB放在自己的Thread中,如下所示:

MyServerCaller.getFolderContents(folderId, new OnFolderContentsResponseListener() {
    @Override
    public void onFolderContentsResponse(final List<FilesystemEntry> contents) { …
Run Code Online (Sandbox Code Playgroud)

java user-interface multithreading android android-contentresolver

35
推荐指数
1
解决办法
9004
查看次数

如何创建水平维度的对话框

当我在布局中使用时,它指定了这个对话框,android:layout_width="match_parent"我得到了这个对话框:

小对话

我需要更广泛的对话.有任何想法吗?

layout android dialog

35
推荐指数
1
解决办法
4万
查看次数

如何识别是否在ActionMode中单击了"完成"按钮

ActionMode用来选择网格中的项目.问题是我无法识别是否单击了完成按钮.我唯一能做的就是知道ActionMode已经完成了.但是按下Back也完成了ActionMode.期望的行为是接受选择完成点击,并退出ActionMode机.

我尝试使用,ActionMode.setCustomView()但它不会影响完成按钮.在Activity.onBackPressed()启动ActionMode时,不叫.

我发现的一个解决方案是使用ActionBarSherlock并手动获取Done按钮:

View closeButton = findViewById(R.id.abs__action_mode_close_button); 
Run Code Online (Sandbox Code Playgroud)

但它仅适用于Android 2.x-3.x,因为使用4.xa本机操作栏.

android actionbarsherlock android-actionbar

35
推荐指数
3
解决办法
1万
查看次数

listview中的android:listview

我正在尝试将listview放在listviewitem中.内部列表视图不应该是可滚动的,而是需要显示其所有行的所需大小.有更好的方法吗?表,网格,......?我现在面临的问题是内部列表视图没有占用它所需的空间,因此它在第一个列表项的末尾被切断.如果我尝试滚动,只是外部列表视图滚动这正是我想要的.

how_it_should_look_like 谢谢,我的最终解决方案是

LinearLayout layout = (LinearLayout) row.findViewById(R.id.LLBroadcasts);
layout.removeAllViews();

for (Item b : bs.getItems()) {

  View child = _inflater.inflate(R.layout.item_row, null);

  TextView tvTitle = (TextView) child.findViewById(R.id.TVItemTitle);
  tvTitle.setText(b.getTitle());

  TextView tvDesc = (TextView) child.findViewById(R.id.TVItemDescription);
  tvDesc.setText(b.getDescription());
  layout.addView(child);
}
Run Code Online (Sandbox Code Playgroud)

android listview

35
推荐指数
3
解决办法
5万
查看次数

谷歌地图V2 - 错误膨胀类片段

我正在尝试我的手和Android应用程序开发.我目前正在使用Eclipse(我不记得版本,无论最新版本是什么).我越过了一座桥,在那里我似乎无法理解我做错了什么.我正在尝试使用Google Maps V2 API.我已经浏览了几个文档并尝试了几种技术,所有这些都导致了同样的错误:

Android.view.Inflate Exception: Binary XML file line #2: Error inflating class fragment
Run Code Online (Sandbox Code Playgroud)

我一直在把钥匙砸到钥匙上2天,试图抓住我在这里做错了什么.

我做过的事情:

  1. 从空白活动开始.
  2. 项目- >属性- > Android的- > 项目建设目标是谷歌的API - 4.2 - API 17 -我已经试过所有的其他选项,以及(只要在3.0以上的版本,发现里面记录
  3. 将google-play-services_lib添加到我的Package Explorer中.我表示google-play-services_lib确实如此a library.
  4. 项目 - >属性 - > Android - >库 - >添加 - >我选择google-play-services_lib的位置.
  5. 包含android-support-v4.jar在我的项目的依赖项中.

我从类似于我的问题尝试了很多不同的答案,但无济于事.:(我通常可以解决这些问题,但也许我太过分了.

我在eclipse中的包浏览器树看起来像

  1. 谷歌播放,services_lib
  2. Svma

这是代码:>

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="com.google.android.gms.maps.SupportMapFragment"/>
Run Code Online (Sandbox Code Playgroud)

表现

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.testing.svma"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="17"
        android:targetSdkVersion="17" …
Run Code Online (Sandbox Code Playgroud)

android google-maps-android-api-2

35
推荐指数
3
解决办法
4万
查看次数

如何在多点触控上缩放整个活动?

Problem:

可以轻松缩放图像和Web视图.但我想缩放整个活动.我怎样才能做到这一点?

Here, I provide wire-frame:

线框-OF-活动

从这里你可以理解,我想做什么.

Request

如果您有任何解决方案,请分享.
谢谢.

android zooming android-activity

35
推荐指数
1
解决办法
1万
查看次数

仅在第二次导航到Fragment时导致java.IllegalStateException错误,无活动

我得到一个非常令人费解的错误,我不知道如何开始工作.

我有一个简单的应用程序,只有一个活动,视图是用Fragments实现的.其中一个片段里面有一个ViewPager; 所以我决定我想要使用v4支持库的getChildFragmentManager类.我还必须使用ActionBarSherlock,这会导致问题,因为它没有附带v4库的v11.

我通过用v11库替换ABS中的v4支持库来解决这个问题,所有编译好的东西都可以工作,包括ViewPager.

这是奇怪的部分:

第一次打开ViewPager的片段时,它可以正常工作; 但导航到的第二次,应用程序崩溃,给出了无用的堆栈跟踪.从调试开始,我发现问题出在getChildFragmentManager返回的FragmentManager上; 它会抛出No Activity错误.

有没有人知道是什么原因引起的?

我将发布您认为相关的代码.

谢谢你,大卫

android android-fragments android-viewpager actionbarsherlock android-support-library

35
推荐指数
2
解决办法
2万
查看次数

强制Android使用RTSP/AVP/TCP交错

我在Galaxy S3上使用Android 4.1.2.目前android mediaplayer总是尝试RTSP UDP(RTP/AVP/UDP)方法与RTSP服务器连接.

如果Android MediaPlayer没有在其UDP端口上接收数据..超时,然后尝试RTSP TCP交错(RTP/AVP/TCP).这很好,但它引入了10秒左右的延迟.我想避免这种延迟,并强制Android MediaPlayer始终对所有或特定URL使用RTSP TCP交错(RTP/AVP/TCP).

我尝试在Here中给出建议,向SETUP请求发送461或400错误响应代码.但似乎媒体播放器不关心响应,并为两个轨道发送SETUP命令,然后挂起连接.

我该如何解决这个问题?

android rtsp media-player rtsp-client android-mediaplayer

35
推荐指数
1
解决办法
3635
查看次数

当用户触摸屏幕时如何避免关闭我的进度对话框?

我正在开发一个android项目,当用户下载文件时会显示进度对话框.

但是当用户触摸屏幕时,进度对话框将被取消而不等待100%.我已经尝试过这个:

 public boolean onTouchEvent(MotionEvent e) {
        return true;
    } 
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

我怎么能避免这个?

更新1:

似乎setCancelable(false)工作正常.非常感谢你的答案,但是当下载持久且用户决定放弃它时,这将是不可能的,因为我已经停用了后面的keyCode:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        return true;
    }
    return super.onKeyDown(keyCode, event);
}
Run Code Online (Sandbox Code Playgroud)

我怎么能搞清楚这一点?

java android

35
推荐指数
2
解决办法
3万
查看次数

在导出已签名的应用程序期间,eclipse崩溃了

我有一个Android应用程序,我在2013年3月17日完美地导出了签名版本.然后在2013年3月19日我更新了Facebook SDK和Android SDK Manager,然后尝试再次导出我的应用程序的签名版本.第一个错误.

现在我遇到了两个问题之一,我无法导出我的应用程序的新签名版本以重新上传Google Play商店.

  1. 转换为Dalvik格式失败,错误1
  2. 或者我的Android应用程序在导出时崩溃了.

我尝试了很多我在网上找到的解决方案,但仍然没有运气.我甚至删除并重新安装了Eclipse,ADT和Facebook SDK.不过,我有问题.

Eclipse实际上崩溃了,这真的很奇怪.有任何想法吗?

更新:因此,我不再在签名应用程序的导出中获得"转换为Dalvik格式失败,错误1".Eclipse只是在导出已签名的应用程序时崩溃.有任何想法吗?我有所有最新的软件:eclipse,facebook sdk,android sdk等.我正在运行最新版本的Mac OS X.

crash android dalvik

35
推荐指数
2
解决办法
5781
查看次数