如何解决在Activity中实现SQLite和Cursor的问题
| 我有一个活动,该活动显示了Web上来自JSON数据的3个随机图像。每个随机图像都是可单击的,并导致其详细信息活动,带有其标题,图像,描述等。所显示的图像彼此不同。 我需要为该活动实现SQLite和“ 0”,以便每当没有Internet连接时,应用程序就会从外部存储上的缓存中读取图像数据。我已经有了数据库,提供程序和同步的类。我有一个SQLite数据库,其中包含以下列:BaseColumns._ID
Database.Project.C_SMALLIMAGE
这是到目前为止的代码片段:
void doSync() {
Intent serviceIntent = new Intent(this,LooserSync.class);
startService(serviceIntent);
}
此方法调用我放置URL的Web服务。这是图像加载:
public void setViewImage(ImageView v,String value) {
v.setTag(value);
loader.DisplayImage(value,context,v);
}
这是我的旧函数,该函数随机化图像并使它们可单击:
prjcts = new ArrayList<Project>();
int max = prjcts.size();
System.out.println(max);
List<Integer> indices = new ArrayList<Integer>(max);
for(int c = 1; c < max; ++c) {
indices.add(c);
}
Random r = new Random();
int arrIndex = r.nextInt(indices.size());
int randomIndex1 = indices.get(arrIndex);
indices.remove(arrIndex);
到目前为止,这是我的活动:
int arrIndex2 = r.nextInt(indices.size());
int randomIndex2 = indices.get(arrIndex2);
indices.remove(arrIndex2);
int arrIndex3 = r.nextInt(indices.size());
int randomIndex3 = indices.get(arrIndex3);
indices.remove(arrIndex3);
imageLazy(image1,prjcts.get(randomIndex1),Main.this);
imageLazy(image2,prjcts.get(randomIndex2),Main.this);
imageLazy(image3,prjcts.get(randomIndex3),Main.this);
image1.setOnClickListener(new RandomClickListener(randomIndex1));
image2.setOnClickListener(new RandomClickListener(randomIndex2));
image3.setOnClickListener(new RandomClickListener(randomIndex3));
public void imageLazy(final ImageView image,Project pro,Activity activity) {
String imageurl = pro.smallImageUrl;
image.setTag(imageurl);
loader.DisplayImage(imageurl,activity,image);
}
public class RandomClickListener implements View.OnClickListener {
private final int randomIndex;
public RandomClickListener(final int randomIndex) {
this.randomIndex = randomIndex;
}
@Override
public void onClick(View v) {
Intent top = new Intent(Main.this,DetailsActivity.class);
top.putExtra(\"spendino.de.ProjectDetail.position\",randomIndex);
/*
top.setData(Uri.withAppendedPath(Uri.withAppendedPath(
LooserProvider.CONTENT_URI,Database.Project.NAME),Long.toString(id)));
*/
startActivity(top);
}
}
这是一个检索图像细节的函数:
Uri uri = Uri.withAppendedPath(Uri.withAppendedPath( LooserProvider.CONTENT_URI,Long .toString(id));
Cursor managedCursor = managedQuery( uri,new String[] { BaseColumns._ID,Database.Project.C_BIGIMAGE },null,\"RANDOM() LIMIT 3\");
关于如何从这些代码片段构建代码的任何建议?
解决方法
为了FSM的缘故,将ListView与这样的查询一起使用
Cursor managedCursor = managedQuery( //it seems like you should change your internship
uri,//to somthing esier than programming
projection,// Which columns to return.
null,// WHERE clause.
null,// WHERE clause value substitution
\"RANDOM() LIMIT 3\");
使用此查询,您将以随机顺序从Project表中获得前3行
编辑:
使用ListView
错误的uri ...您没有做作业(通过阅读这篇文章)。试试这个。 Uri uri = Uri.withAppendedPath( LooserProvider.CONTENT_URI,Database.Project.NAME));
关于使用游标:
游标c = query();
if(c.moveToFirst()){
do{
//do something with current row like c.getString(1);
}while(c.moveToNext());
}
但是为什么呢?为什么不使用ListView
编辑2:
更改样本中的相似行以放松到:
listView.setAdapter(new MySimpleCursorAdapter(this,R.layout.itemrow,managedQuery(Uri.withAppendedPath(LooserProvider.CONTENT_URI,Database.Project.NAME),new String[] { BaseColumns._ID,Database.Project.C_PROJECTTITLE,Database.Project.C_ORGANIZATIONTITLE,Database.Project.C_SMALLIMAGE },null,\"RANDOM() LIMIT 3\"),new String[] { Database.Project.C_PROJECTTITLE,new int[] {
R.id.tName,R.id.tDescription,R.id.iItem }));
您可以执行菜单->同步以查看发生了什么
从列表行中删除文本,您就可以得到程序
, 我认为您将不得不提出一个相对容易回答的问题。
大多数人都不想为您生成代码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。