2013-01-08 69 views
1

我正在使用SQLite數據庫並希望在不使用ContentProvider的情況下加載它。SimpleCursorLoader onCreateLoader錯誤,返回類型不匹配

我無法使我的子類SimpleCursorLoader(取自CursorLoader usage without ContentProvider)與LoaderManager一起使用。

在被覆蓋的方法

@Override 
public Loader<Cursor> onCreateLoader(int ID, Bundle args) { 
    return new ListCursorLoader(this, dBHelper); 

} 

我得到一個類型不匹配的話,它不能從轉換到ListCursorLoaderLoader<Cursor>。我試圖在即時創建ListCursorLoader(即在該方法中),但這也不起作用。

這裏是我的ListCursorLoader代碼:

package utilities; 

import android.content.Context; 
import android.database.Cursor; 
import android.database.SQLException; 

public class ListCursorLoader extends SimpleCursorLoader { 
    private DBAdapter dBAdapter; 

    public ListCursorLoader(Context context, DBAdapter adapter) { 
     super(context); 
     dBAdapter = adapter; 
    } 

    @Override 
    public Cursor loadInBackground() { 
     Cursor cursor = null; 
     dBAdapter.open(); 
     try { 
      cursor = dBAdapter.getAllQueries(); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
     if (cursor != null) { 
      cursor.getCount(); 
     } 
     return cursor; 
    } 
} 

正如你看到的,我只覆蓋了loadInBackground()方法,我根本看不出什麼,我做錯了。

希望你們能幫忙!

回答

6

我只是試過你的代碼,它沒有問題。

您應該仔細檢查您的導入。您鏈接到的SimpleCursorLoader正在使用support library。您沒有提供代碼,但我認爲您可能正在使用默認的LoaderManager,而不是一個provided by the support library

因此,爲了您能夠使用此類,您需要引用android.support.v4.content.Loader並在您的片段中使用SupportLoaderManager加載它。

這裏是我的片段工作的代碼: (注意,這裏使用的支持庫。)

import android.database.Cursor; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.LoaderManager.LoaderCallbacks; 
import android.support.v4.content.Loader; 
... 

public class MainActivity extends FragmentActivity implements LoaderCallbacks<Cursor>{ 
... 
@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     this.getSupportLoaderManager().initLoader(0, null, this); 
    } 

... 

@Override 
    public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) { 
     return new ListCursorLoader(this); 
    } 

... 

} 
+0

謝謝你,這被證明是錯誤的! – saxelsen