关于Uri中的getPathSegments()方法

Vamo 2016-02-12 12:31:45
今天学习了contentprovider,在自定义provider的时候,下面是其中insert和delete方法的代码
public Uri insert(Uri uri, ContentValues values) {
// TODO Auto-generated method stub
SQLiteDatabase db=mydb.getWritableDatabase();
long newid;
Uri uri2=null;
switch (uriMatcher.match(uri)) {
case PEOPLE_TABLE:
case PEOPLE_ITEM:
newid=db.insert("people", null, values);
uri2=Uri.parse(AUTHORITY+"/people/"+newid);
break;
case PEOPLEID_TABLE:
case PEOPLEID_ITEM:
newid=db.insert("peopleid", null, values);
uri2=Uri.parse(AUTHORITY+"/peopleid/"+newid);
break;

default:
break;
}
return uri2;
}

@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
// TODO Auto-generated method stub
SQLiteDatabase db=mydb.getWritableDatabase();
int deleteRows=0;
String deleteId=uri.getPathSegments().get(1);//获取传入的uri最后的id,使用的是uri.getPathSegments().get(1)
switch (uriMatcher.match(uri)) {
case PEOPLE_TABLE:
deleteRows=db.delete("people", selection, selectionArgs);
break;
case PEOPLE_ITEM:
deleteRows=db.delete("people", "id=?", new String[]{deleteId});
break;
case PEOPLEID_TABLE:
deleteRows=db.delete("peopleid", selection, selectionArgs);
break;
case PEOPLEID_ITEM:
deleteRows=db.delete("peopleid", "id=?", new String[]{deleteId});
break;

default:
break;
}
return deleteRows;
}


然后我在另一个程序中使用provider来修改数据的时候,发现add数据的时候有用,但是delete的时候没反应,估计是最后id的问题,于是我用textview显示了insert方法返回的新的uri以及这个newuri.getPathSegments()和newuri.getPathSegments().get(1),显示的不是应该是新的id么,可是显示的是path里面的那个叫people的数据库表格,书上写的是getPathSegments()方法,它会将内容URI权限之后的部分以“/”符号进行分割,并把分割后的结果放入到一个字符串列表中,这是怎么回事呢?下面是另一个程序的部分代码
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.btn_add:
uri=Uri.parse("content://com.example.sqlite.myprovider/people");
ContentValues values=new ContentValues();
values.put("name", "张三"+i);
values.put("age", 20+i);
values.put("sex", "男");
values.put("money", 23.12+i);
Uri newUri=cs.insert(uri, values);
newID=newUri.getPathSegments().get(1);//然后改为get(2)就一切正常了
textView.setText(newUri.toString()+"\n"+newUri.getPathSegments().toString()+"\n"+newID);
i++;
values.clear();
break;
case R.id.btn_query:
uri=Uri.parse("content://com.example.sqlite.myprovider/people");
Cursor cursor=cs.query(uri, null, null, null, null);
show(cursor, textView, sb);
break;
case R.id.btn_delete:
uri=Uri.parse("content://com.example.sqlite.myprovider/people/"+newID);
cs.delete(uri, null, null);
break;
case R.id.btn_update:
uri=Uri.parse("content://com.example.sqlite.myprovider/people/"+newID);
ContentValues values1=new ContentValues();
values1.put("name", "李四");
cs.update(uri, values1, null, null);
break;

default:
break;
}
}


手机上的截图
...全文
550 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
God眯眯眼 2016-02-13
  • 打赏
  • 举报
回复
toString()?

80,362

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧