如何声明和设置由C#编写的Android中的Cursor

时间:2014-03-02 22:19:42

标签: c# android xamarin declare

我有这样的代码:

public List<Track> getAllSdCardTracks(Context context) {
        List<Track> tracks = new List<Track>();

        Cursor c = context //this is the problem
            .getContentResolver()
            .query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                new String[] { MediaStore.Audio.Media._ID,
                    MediaStore.Audio.Media.DATA,
                    MediaStore.Audio.Media.ARTIST,
                    MediaStore.Audio.Media.ALBUM,
                    MediaStore.Audio.Media.DURATION,
                    MediaStore.Audio.Media.DISPLAY_NAME,
                    MediaStore.Audio.Media.ALBUM_ID }, "1=1",
                null, null);
        if (c.moveToFirst()) {
            do {
                String mArtist = c
                    .getString(c
                        .getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));
                String mTitle = c
                    .getString(c
                        .getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME));
                String mId = c.getString(c
                    .getColumnIndexOrThrow(MediaStore.Audio.Media._ID));
                String mAlbumName = c
                    .getString(c
                        .getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM));
                String mAlbumID = c
                    .getString(c
                        .getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM_ID));

                String mPath = c
                    .getString(c
                        .getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
                long mDuration = c
                    .getLong(c
                        .getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));
                String mFormattedDuration = DateUtils
                    .formatElapsedTime(mDuration / 1000);
                Track track = new SDTrack(mAlbumID, mAlbumName, mArtist, mId, mTitle, mPath , mFormattedDuration);
                tracks.add(track);
            } while (c.moveToNext());
            if (c != null)
                c.close();
        }

        return tracks;
    }

当我想制作这个prj时,xamarin说“无法找到类型或命名空间'Cursor'等等”我想声明Cursor。 有人说我: 试试这个docs.xamarin.com/guides/android/platform_features/…“Cursor”是一个Android类..听起来你应该用ICursor接口声明它然后得到它:

var loader = new CursorLoader(activity, uri, projection, null, null, null);    
var cursor = (ICursor)loader.LoadInBackground();

但我不会动摇,我该怎么办!! :/ 任何人都可以帮我解释一下吗?! (请在c#中键入代码,我无法使用java)

2 个答案:

答案 0 :(得分:2)

好像你错过了一个使用指令?

编辑: 根据Xamarin-Example here

using Android.App;
using Android.Database;
using Android.OS;
using Android.Widget;
using Android.Content;
using Android.Net;

您需要声明ICursor

答案 1 :(得分:2)

应该相当简单:

        var cursor = context.ContentResolver.Query(
            MediaStore.Audio.Media.ExternalContentUri,
            new string[] 
            { 
                /* insert fields here */ 
            }, 
            "1=1",
            null, 
            null);

返回的'光标'将是ICursor。

相关问题