标签: android-cursorloader

自定义CursorLoader通知数据更改

我正在寻找制作Custom CursorLoader的答案,并且想知道如果数据发生变化会有数据更改的通知,以便列表更新?

android android-cursorloader

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

从MediaStore.Audio.Albums.ALBUM_ART显示专辑封面

我在LoaderManager中使用CursorLoader和Custom CursorAdapter.我已经实现了显示专辑和相关的艺术家,现在我想显示封面.

这是我的Custom CursorAdapter:

public class AlbumsAdapter extends CursorAdapter {


    private final LayoutInflater mInflater;

     public AlbumsAdapter(Context context, Cursor c) {
        super(context, c);
        mInflater=LayoutInflater.from(context);

    }
    @Override
    public void bindView(View view, Context context, Cursor cursor) {

        TextView albumTitle =(TextView)view.findViewById(R.id.albumTextView);
        albumTitle.setText(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM)));

        TextView artistName=(TextView)view.findViewById(R.id.artistTextView);
        artistName.setText(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Albums.ARTIST)));

        ImageView albumCover=(ImageView)view.findViewById(R.id.artistTextView);
        // Here what should I do ?

    }
    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        final View view=mInflater.inflate(R.layout.albums_row,parent,false); 
        return view;
    }   
}
Run Code Online (Sandbox Code Playgroud)

我试过以下但没有成功:

    String path = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ART));
    File imgFile = new  File(path);
    if(imgFile.exists()){

        Bitmap …
Run Code Online (Sandbox Code Playgroud)

android albumart android-imageview android-mediaplayer android-cursorloader

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

Android CursorLoader和LoaderManager错误

我试图在最小API为10的情况下实现CursorLoader和LoaderManager.

但是,我继续在AsyncTaskLoader.class的第63行获得IllegalArgument异常(AsyncTaskLoader.class的源代码,其中发生异常的是下面和此链接.

/* Runs on the UI thread */
@Override
protected void onPostExecute(D data) {
    if (DEBUG) Log.v(TAG, this + " onPostExecute");
    try {
        AsyncTaskLoader.this.dispatchOnLoadComplete(this, data);
    } finally {
        done.countDown();
    }
}
Run Code Online (Sandbox Code Playgroud)

下面是错误的堆栈:

AsyncTaskLoader$LoadTask.onPostExecute(Object) line: 63 
AsyncTaskLoader$LoadTask(ModernAsyncTask).finish(Object) line: 461  
ModernAsyncTask.access$500(ModernAsyncTask, Object) line: 47    
ModernAsyncTask$InternalHandler.handleMessage(Message) line: 474    
ModernAsyncTask$InternalHandler(Handler).dispatchMessage(Message) line: 99  
Looper.loop() line: 137 
ActivityThread.main(String[]) line: 4424    
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
Method.invoke(Object, Object...) line: 511  
ZygoteInit$MethodAndArgsCaller.run() line: 784  
ZygoteInit.main(String[]) line: 551 
NativeStart.main(String[]) …
Run Code Online (Sandbox Code Playgroud)

sqlite android illegalargumentexception android-loadermanager android-cursorloader

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

无法从SQLiteCursorLoader转换为Loader <Cursor>

我正在使用基于ActionBarSherlock的活动和片段.要从SQLite数据库中读取行,我正在尝试使用a Loader而不是a ContentProvider,我正在尝试让LoaderEx为我工作.

我遇到了一个顽固的问题:在我的片段onCreateLoader回调中,ADT一直给我一个错误:

"Cannot convert from SQLiteCursorLoader to Loader<Cursor>"
Run Code Online (Sandbox Code Playgroud)

我正在使用Android v4支持库.由于DEX错误,我已从android-support-v4.jarActionBarSherlock和LoaderEx中删除,并将其添加到我的基础项目中.然后我让ABS和LoaderEx都依赖于此.

ABS和LoaderEx都作为库项目添加.

我已经检查过我只使用v4导入.LoaderExDemo也可以在模拟器中编译和工作.

这些是我片段的导入:

import com.actionbarsherlock.app.SherlockListFragment;

import android.database.Cursor;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ListView;
import android.support.v4.widget.SimpleCursorAdapter;
import android.support.v4.app.LoaderManager;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;

import com.commonsware.cwac.loaderex.SQLiteCursorLoader;
Run Code Online (Sandbox Code Playgroud)

这是我的片段声明:

public class MeetingListFragment 
        extends SherlockListFragment 
        implements LoaderManager.LoaderCallbacks<Cursor> {
    private JournalDatabaseHelper db = null;
    private SimpleCursorAdapter adapter = null;
    private SQLiteCursorLoader loader = null;
Run Code Online (Sandbox Code Playgroud)

这是getLoader回调方法:

public Loader<Cursor> onCreateLoader(int loaderId, Bundle args) …
Run Code Online (Sandbox Code Playgroud)

android android-fragments actionbarsherlock android-cursorloader commonsware-cwac

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

哪个线程调用`onCreateLoader()`和`onLoadFinished()`?

我正在实施LoaderManager.LoaderCallbacks,以访问我的应用程序的数据库并填充一个ListView.这线程将打电话给我onCreateLoader()onLoadFinished()?他们是在UI线程或线程上调用CursorLoader的吗?LoaderCallbacks的文档在这一点上是静音的.

multithreading android android-cursorloader

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

使用11之前的Loader em API版本

我使用的是CursorAdapterContentProvider,我想用CursorLoader,所以我重新配置我的项目目标API 11,并设置分-SDK-版本7.但是它崩溃时Activity调用子Activity,它使用CursorLoader.错误NoClassDefFoundError通过IllegalStateException.

我的问题是,即使我们有相同的配置,我们可以在以前的Android版本中使用Honeycomb API吗?

java android android-contentprovider android-loadermanager android-cursorloader

0
推荐指数
1
解决办法
1671
查看次数

使用CursorLoader获取所有者的电子邮件地址

我正在尝试用所有者的电子邮件填充ArrayList.我是在一个片段中这样做的.这是我的代码:

 public class ItemDetailFragment extends Fragment implements
        LoaderManager.LoaderCallbacks<Cursor> {

    ArrayList<String> emails = new ArrayList<String>();

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        getLoaderManager().initLoader(0, null, this);

    }


        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
                View myFragmentView = inflater.inflate(R.layout.formal_email_layout,
                                container, false);
                return myFragmentView;
       }


 public Loader<Cursor> onCreateLoader(int id, Bundle arguments) {
            return new CursorLoader(getActivity(),
                    // Retrieve data rows for the device user's 'profile' contact.
                    Uri.withAppendedPath(
                            ContactsContract.Profile.CONTENT_URI,
                            ContactsContract.Contacts.Data.CONTENT_DIRECTORY),
                    ProfileQuery.PROJECTION,

                    // Select only email addresses.
                    ContactsContract.Contacts.Data.MIMETYPE + " = ?",
                    new String[]{ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE}, …
Run Code Online (Sandbox Code Playgroud)

email android android-contacts android-cursorloader

0
推荐指数
1
解决办法
1622
查看次数

Android CursorLoader无法在Fragment中运行

我有一个实现LoaderManager.LoaderCallbacks接口的FragmentActivity,我想把它改成一个Fragment,这样我就可以在我的splashscreen后台启动它来从我的数据库中获取信息.但是,当我将FragmentActivity更改为Fragment时,我在onCreateLoader中出错:

public class CursorLoaderTest extends Fragment implements
    LoaderManager.LoaderCallbacks<Cursor> {

...
...

@Override
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1)
{
    // Grab URI corresponding with menuItem table
    Uri CONTENT_URI = TabletContentProvider.MENU_ITEM_CONTENT_URI;
    // THIS IS WHERE THE ERROR IS 
    return new CursorLoader(this, CONTENT_URI, null, null, null, null);
}
Run Code Online (Sandbox Code Playgroud)

它希望我将CursorLoader对象构造函数更改为:

CursorLoader(Context);
Run Code Online (Sandbox Code Playgroud)

这显然是行不通的.我正在与一个团队合作开展一个项目,我负责数据库操作,所以我不太熟悉Fragments/FragmentActivities,因为我不是为应用程序的那些部分编写代码.我错过了一些明显的东西吗?

android android-fragments android-cursorloader

0
推荐指数
1
解决办法
925
查看次数

swapCursor()slow:"应用程序可能在其主线程上做了太多工作."

我一直看到"应用程序可能在其主线程上做了太多工作."

这是由我下面的代码中的swapCursor()引起的吗?看起来如此:如果我删除它,上面的警告就会消失.

我仍然不明白为什么它声称是导致问题的主要线程.我已经将swapCursor()移动到各种位置,例如onLoadFinished()和loadInBackground(),但我得到了相同的结果.

如何调用swapCursor()以便不显示此警告?我使用SimpleCursorLoader的全部原因是避免占用主线程,但它仍在发生.

package com.example.sqlitetest;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.LoaderManager;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader;
import android.support.v4.content.CursorLoader;
import android.support.v4.widget.SimpleCursorAdapter;
import android.support.v4.widget.SimpleCursorAdapter.ViewBinder;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends FragmentActivity implements LoaderManager.LoaderCallbacks<Cursor> 
{
  public static Context mContext;

  private LoaderManager.LoaderCallbacks<Cursor> mLoaderCallbacks;

  public static SQLiteDatabase      db;
  public …
Run Code Online (Sandbox Code Playgroud)

android android-listview simplecursoradapter android-loadermanager android-cursorloader

0
推荐指数
1
解决办法
1054
查看次数