===关于我===Android:创建有效的内容提供商URI的问题
我是新来的android开发人员,几乎不能“说出”Java。不过,我在PHP5和C++ C++/CLI(.net> 2.0)方面经验丰富,所以我希望我能够创建这个小应用程序,这是我的想法。
但经过几天的试验,我现在处于一种陷阱,希望你能帮助我。
===有关项目===
我有一个列表视图(嵌套在其他布局内),并尝试从一个SQLite数据来填充它。我设法使用一个简单的“arrayAdapter”来启动并运行,但是研究如果我使用弹出窗口在数据库中插入新元素,我可以更新它,但我发现需要实现自己的内容提供者。
===这个问题===
我浏览了几个教程和这样做,但现在我有称这是因为URI的问题。我不明白它应该如何创建,所以我不能创建一个有效的。
这里是代码的问题:
TBTTManageBudgetsActivity.java
package com.TBTT;
// ...
// some imports
// ...
public class TBTTManageBudgetsActivity extends Activity {
// ...
// some declarations
// ...
@Override
public void onCreate(Bundle savedInstanceState) {
// Initialisation
super .onCreate(savedInstanceState);
setContentView(R.layout.manage_budgets);
// ...
// some stuff concerning other elements
// ...
// Fill List View
// Get the list view
ListView listView = (ListView) findViewById(R.id.list_box);
// Get content provider and cursor
String[] projection = { TBTCPHBudget.KEY_ROWID, TBTCPHBudget.KEY_NAME };
String[] uiBindFrom = { TBTCPHBudget.KEY_ROWID};
int[] uiBindTo = { R.id.name };
TBTCPBdugets ContentProvider = new TBTCPBdugets();
Cursor cursor = ContentProvider.query(TBTCPBdugets.CONTENT_URI, projection,null, null, null);
// Let activity manage the cursor
startManagingCursor(cursor);
// Get value from content provider
cursor.moveToFirst();
ArrayList list = new ArrayList<String>();
do {
list.add(cursor.getString(1));
} while (cursor.moveToNext());
// Set Values with Adapter
CursorAdapter adapter = new SimpleCursorAdapter(this.getApplicationContext(), R.layout.list_budgets_item, cursor, uiBindFrom, uiBindTo);
listView.setAdapter(adapter);
}
// ...
// some other functions
// ...
}
TBTCPBdugets.java
package com.TBTT;
// ...
// some imports
// ...
public class TBTCPBdugets extends ContentProvider {
// ...
// some declarations
// ...
public static final String AUTHORITY = "com.TBTT";
public static final String DATAPATH = "TBTCPHBudget";
public static final Uri CONTENT_URI = Uri.parse("content://"+ AUTHORITY+"/" + DATAPATH);
private static final UriMatcher sUriMatcher;
private static class DatabaseHelper extends SQLiteOpenHelper {
// ...
// some other functions
// ...
}
private DatabaseHelper dbHelper;
// ...
// some other functions
// ...
@Override
public boolean onCreate() {
dbHelper = new DatabaseHelper(getContext());
return true;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
switch (sUriMatcher.match(uri)) {
case BUDGETS:
qb.setTables(BUDGETS_TABLE_NAME);
qb.setProjectionMap(notesProjectionMap);
break;
default:
Log.d(TAG, "Unknown URI " + uri+" with URIMatcher Result "+sUriMatcher.match(uri));
throw new IllegalArgumentException("Unknown URI " + uri);
}
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor c = qb.query(db, projection, selection, selectionArgs, null, null, sortOrder);
c.setNotificationUri(getContext().getContentResolver(), uri);
return c;
}
static {
sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
sUriMatcher.addURI(AUTHORITY, BUDGETS_TABLE_NAME, BUDGETS);
// ...
// some declarations
// ...
}
}
当我运行这一点,打开TBTTManageBudgetsActivity程序会崩溃。来自TBTCPBdugets.java的调试输出显示:“未知的URI内容://com.TBTT/TBTCPBdugets with URIMatcher Result -1”。
有人可以告诉我,请问如何为此创建VALID URI?
与荷马辛普森说:“哦!” 这就是问题所在。非常感谢! – HOK