我尝试运行1.2.2版本的soundclouddroid程序代码https://code.google.com/p/soundclouddroid/source/browse/。之前有一个问题,后来在Stackoverflow得到解决,但现在又遇到了一个新的问题,不明白原因。我的问题是:
该程序尝试获取 Soundcloud 数据。在 Soundcloud 页面上,我创建了一个应用程序,并获得了客户端 ID 和客户端密钥,我还添加了重定向 URI 字段进行身份验证:http://es.manu.sd122.provider.soundCloudDroid,该网址前面添加了 http:// Soundcloud 网站。
你能帮我吗?谢谢。
日志记录:
声云安卓版的数据库。
我一直在Stackoverflow上查看与"Unkown Uri Content"错误相关的各种问题,但我仍然无法解决。谢谢。
java.lang.RuntimeException: Unable to start activity ComponentInfo {es.manu.sd122.soundCloudDroid/es.manu.sd122.soundCloudDroid.CustomTrackListsActivity}: java.lang.IllegalArgumentException: Unknown URI content :/ / is .manu.sd122.provider.soundCloudDroid/tracklists
该程序尝试获取 Soundcloud 数据。在 Soundcloud 页面上,我创建了一个应用程序,并获得了客户端 ID 和客户端密钥,我还添加了重定向 URI 字段进行身份验证:http://es.manu.sd122.provider.soundCloudDroid,该网址前面添加了 http:// Soundcloud 网站。
你能帮我吗?谢谢。
日志记录:
10-18 09:07:45.839: E/AndroidRuntime(400): FATAL EXCEPTION: main
10-18 09:07:45.839: E/AndroidRuntime(400): java.lang.RuntimeException: Unable to start activity ComponentInfo{es.manu.sd122.soundCloudDroid/es.manu.sd122.soundCloudDroid.CustomTrackListsActivity}: java.lang.IllegalArgumentException: Unknown URI content://es.manu.sd122.provider.soundCloudDroid/tracklists
10-18 09:07:45.839: E/AndroidRuntime(400): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
10-18 09:07:45.839: E/AndroidRuntime(400): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
10-18 09:07:45.839: E/AndroidRuntime(400): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
10-18 09:07:45.839: E/AndroidRuntime(400): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
10-18 09:07:45.839: E/AndroidRuntime(400): at android.os.Handler.dispatchMessage(Handler.java:99)
10-18 09:07:45.839: E/AndroidRuntime(400): at android.os.Looper.loop(Looper.java:123)
10-18 09:07:45.839: E/AndroidRuntime(400): at android.app.ActivityThread.main(ActivityThread.java:3683)
10-18 09:07:45.839: E/AndroidRuntime(400): at java.lang.reflect.Method.invokeNative(Native Method)
10-18 09:07:45.839: E/AndroidRuntime(400): at java.lang.reflect.Method.invoke(Method.java:507)
10-18 09:07:45.839: E/AndroidRuntime(400): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
10-18 09:07:45.839: E/AndroidRuntime(400): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
10-18 09:07:45.839: E/AndroidRuntime(400): at dalvik.system.NativeStart.main(Native Method)
10-18 09:07:45.839: E/AndroidRuntime(400): Caused by: java.lang.IllegalArgumentException: Unknown URI content://es.manu.sd122.provider.soundCloudDroid/tracklists
10-18 09:07:45.839: E/AndroidRuntime(400): at es.manu.sd122.soundCloudBase.SoundCloudData.query(SoundCloudData.java:244)
10-18 09:07:45.839: E/AndroidRuntime(400): at android.content.ContentProvider$Transport.query(ContentProvider.java:187)
10-18 09:07:45.839: E/AndroidRuntime(400): at android.content.ContentResolver.query(ContentResolver.java:262)
10-18 09:07:45.839: E/AndroidRuntime(400): at es.manu.sd122.soundCloudDroid.CustomTrackListsActivity.onCreate(CustomTrackListsActivity.java:28)
10-18 09:07:45.839: E/AndroidRuntime(400): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-18 09:07:45.839: E/AndroidRuntime(400): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
10-18 09:07:45.839: E/AndroidRuntime(400): ... 11 more
清单文件:
<provider android:name="es.manu.sd122.soundCloudBase.SoundCloudData" android:authorities="es.manu.sd122.provider.soundCloudDroid">
</provider>
声云安卓版的数据库。
import android.net.Uri;
import android.provider.BaseColumns;
public class DB extends es.manu.sd122.soundCloudBase.DB
{
protected DB()
{
super();
}
public static final class TrackLists implements BaseColumns
{
// This class cannot be instantiated
private TrackLists() {}
public static final String TABLE_NAME = "tracklists";
/**
* The content:// style URL for this table
*/
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/tracklists");
/**
* The MIME type of {@link #CONTENT_URI} providing a directory of entries.
*/
public static final String CONTENT_TYPE = "vnd.android.cursor.dir/" + PACKAGE + ".tracklists";
/**
* The MIME type of a {@link #CONTENT_URI} sub-directory of a single entry.
*/
public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/" + PACKAGE + ".tracklists";
public static final String RESOURCE = "resource";
public static final String TITLE = "title";
public static final String DEFAULT_SORT_ORDER = _ID + " ASC";
}
}
soundCloudBase的数据库
import android.net.Uri;
import android.provider.BaseColumns;
import es.manu.sd122.soundCloudBase.Config;
public class DB
{
public static final String AUTHORITY = Config.AUTHORITY;
public static final String PACKAGE = Config.PACKAGE;
// This class cannot be instantiated
protected DB() {}
public static final class Uploads implements BaseColumns
{
// This class cannot be instantiated
private Uploads() {}
public static final String TABLE_NAME = "uploads";
/**
* The content:// style URL for this table
*/
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/uploads");
/**
* The MIME type of {@link #CONTENT_URI} providing a directory of app data entries.
*/
public static final String CONTENT_TYPE = "vnd.android.cursor.dir/" + PACKAGE + ".uploads";
/**
* The MIME type of a {@link #CONTENT_URI} sub-directory of a single app data entry.
*/
public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/" + PACKAGE + ".uploads";
public static final String TITLE = "title";
public static final String PATH = "path";
public static final String STATUS = "status";
public static final String SHARING = "sharing";
public static final String DESCRIPTION = "description";
public static final String GENRE = "genre";
public static final String TRACK_TYPE = "track_type";
public static final String DEFAULT_SORT_ORDER = _ID + " DESC";
}
public static final class Tracks implements BaseColumns
{
// This class cannot be instantiated
private Tracks() {}
public static final String TABLE_NAME = "tracks";
/**
* The content:// style URL for this table
*/
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/tracks");
/**
* The MIME type of {@link #CONTENT_URI} providing a directory of app data entries.
*/
public static final String CONTENT_TYPE = "vnd.android.cursor.dir/" + PACKAGE + ".tracks";
/**
* The MIME type of a {@link #CONTENT_URI} sub-directory of a single app data entry.
*/
public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/" + PACKAGE + ".tracks";
public static final String TITLE = "title";
public static final String ID = "id";
public static final String STREAM_URL = "stream_url";
public static final String DURATION = "duration";
public static final String CLASS = "class";
public static final String DEFAULT_SORT_ORDER = ID + " DESC";
}
}
配置
public class Config
{
public static final String AUTHORITY = "es.manu.sd122.provider.soundCloudDroid";
public static final String PACKAGE = "es.manu.sd122.soundCloudDroid";
private Config()
{}
}
CustomTrackListsActivity
import es.manu.sd122.soundCloudDroid.DB;
import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
public class CustomTrackListsActivity extends ListActivity
{
/**
* The method called when the Activity is created.
* <p>
* Initializes the user interface.
*/
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
this.setContentView(R.layout.custom_track_lists);
// Read uploads
mCursor = getContentResolver().query(DB.TrackLists.CONTENT_URI, null, DB.TrackLists.RESOURCE + "<>\"\"", null, null);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.track_list_item, mCursor,
new String[] { DB.TrackLists.TITLE }, new int[] { android.R.id.text1 });
setListAdapter(adapter);
findViewById(R.id.use_menu).setVisibility(mCursor.getCount()<=2 ? View.VISIBLE : View.INVISIBLE);
}
public void onDestroy()
{
super.onDestroy();
mCursor.close();
}
public boolean onCreateOptionsMenu(Menu menu)
{
super.onCreateOptionsMenu(menu);
mArtistTracksMenuItem = menu.add("Search for Artists").setIcon(android.R.drawable.ic_menu_add);
return true;
}
public boolean onOptionsItemSelected(MenuItem item)
{
if(item == mArtistTracksMenuItem)
{
startActivity(new Intent(getApplication(), NewArtistTracksActivity.class));
return true;
}
else return super.onOptionsItemSelected(item);
}
public void onListItemClick(ListView parent, View v, int position, long id)
{
mCursor.moveToPosition(position);
Intent intent;
if(id == 0)
intent = new Intent(getApplication(), ViewTracksActivity.class);
else
{
intent = new Intent(getApplication(), ViewOtherTracksActivity.class);
intent.putExtra(DB.TrackLists.RESOURCE, mCursor.getString(1));
intent.putExtra(DB.TrackLists.TITLE, mCursor.getString(2));
intent.putExtra(DB.TrackLists._ID, id);
}
startActivity(intent);
}
private MenuItem mArtistTracksMenuItem;
private Cursor mCursor;
}
我一直在Stackoverflow上查看与"Unkown Uri Content"错误相关的各种问题,但我仍然无法解决。谢谢。