Проблемы реализации SQLite и курсора в действии - PullRequest
1 голос
/ 30 мая 2011

У меня есть действие, которое показывает 3 случайных изображения из данных JSON из Интернета.Каждое случайное изображение кликабельно и приводит к своей активности в деталях, содержит название, изображение, описание и т. Д. Показанные изображения отличаются друг от друга.

Мне нужно реализовать SQLite и Cursor для этого действиятак что, когда нет подключения к интернету, приложение считывает данные изображения из кэша на внешнем хранилище.У меня уже есть классы базы данных, провайдера и синхронизации.У меня есть база данных SQLite со следующими столбцами:

  • BaseColumns._ID
  • Database.Project.C_SMALLIMAGE

Вот фрагменты кода, который у меня такfar:

void doSync() {
    Intent serviceIntent = new Intent(this, LooserSync.class);
    startService(serviceIntent);
} 

Этот метод вызывает веб-сервис, в который я помещаю свой URL.Это изображение загружено:

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, Database.Project.NAME), Long .toString(id));

Cursor managedCursor = managedQuery( uri, new String[] { BaseColumns._ID, Database.Project.C_BIGIMAGE }, null, null, "RANDOM() LIMIT 3");

Есть предложения о том, как создать код из этих фрагментов?

Ответы [ 2 ]

2 голосов
/ 30 мая 2011

ради 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");   

с этим запросом вы получите первые 3 строки из таблицы проекта в случайном порядке

EDIT:

  1. использовать ListView
  2. неправильно, ури ... вы не сделали домашнее задание (прочитав это ). Попробуй это. Uri uri = Uri.withAppendedPath( LooserProvider.CONTENT_URI, Database.Project.NAME));
  3. Об использовании курсоров:

    Курсор c = query ();

    , если (c.moveToFirst ()) {* * тысяча двадцать-один

    do{
    
        //do something with current row like c.getString(1);
    
    }while(c.moveToNext());
    

    }

  4. но почему вы не используете ListView

EDIT2: изменил похожие строки в моего образца для более слабого на:

    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, null, "RANDOM() LIMIT 3"),
            new String[] { Database.Project.C_PROJECTTITLE,
                    Database.Project.C_ORGANIZATIONTITLE,
                    Database.Project.C_SMALLIMAGE }, new int[] {
                    R.id.tName, R.id.tDescription, R.id.iItem }));

Вы можете сделать Меню-> Синхронизировать, чтобы увидеть, что произошло

избавьтесь от текста из списка и вы получите свою программу

1 голос
/ 30 мая 2011

Я думаю, вам придется задать вопрос, на который относительно просто ответить. Большинство людей не хотят создавать код для вас.

...