2016-12-11 6 views
0

Я создаю приложение, в котором я использую базу данных sqlite для генерации случайных значений, но это не дает значения. Он всегда показывает пустое действие, даже не показывающее добавленную запись. Вот мой код. Я хочу отобразить некоторые случайные данные в ListView.Невозможно получить случайную форму данных SQLite

У меня есть еще один класс, с помощью которого я вставить данные и есть кнопка, чтобы показать данные и функцию для вызова активности, которая генерирует случайные данные, но активность не работает должным образом

импорта андроида. content.Context;

import android.database.Cursor; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.widget.TextView; 


public class ViewPeople extends AppCompatActivity { 


    private static final String SELECT_SQL = "SELECT * FROM persons"; 
    private Cursor mCurRandom; 
    private SQLiteDatabase db; 

    private Cursor c; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_view_people); 
     openDatabase(); 
     c = db.rawQuery(SELECT_SQL, null); 
     c.moveToFirst(); 
     showRecords(); 
    } 

    protected void openDatabase() { 
     db = openOrCreateDatabase("PersonDB", Context.MODE_PRIVATE, null); 
    } 

    protected void showRecords() { 

     try { 
      String sql = "SELECT * FROM persons ORDER BY RANDOM() LIMIT 1"; 

      mCurRandom = db.rawQuery(sql, null); 
      if (mCurRandom != null) { 
       mCurRandom.moveToNext(); 
       return; 
      } 
      { 

       showRecords(); 

      } 


     } catch (SQLException mSQLException) { 

      throw mSQLException; 
     } 
     return; 
    } 

} 

Моя раскладка

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:orientation="vertical" 
    tools:context=".ViewPeople"> 


    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Name" 
     android:id="@+id/textViewName" /> 

    <ListView 
     android:id="@+id/listView1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" > 
    </ListView> 
    </LinearLayout> 
+0

_ "но эта деятельность не работает должным образом" _ - Можете ли вы дать нам понять, что это значит? Каким образом он не работает должным образом? –

+1

В нем ничего не отображается, даже не все записи, добавленные в базу данных. –

+0

Вам нужно заполнить ListView через адаптер. Возможно, SimpleCursorAdapter или пользовательский адаптер. Также обратите внимание на логическую ошибку ответа и showRecords, вызывающую себя. Взгляните на это [Android: использование SimpleCursorAdapter для получения данных из базы данных в ListView] (http://stackoverflow.com/questions/12077955/android-using-simplecursoradapter-to-get-data-from-database-to-listview). Тем не менее, вы получите только 1 запись (если вы не измените лимит), поэтому нет необходимости в ListView с LIMIT 1. – MikeT

ответ

1

Похоже, у вас есть логическая ошибка:

mCurRandom = db.rawQuery(sql, null); 
if (mCurRandom != null) { 
    mCurRandom.moveToNext(); 
    return; 
} 
{ 

    showRecords(); 

} 

Во-первых, все, db.rawQuery никогда не вернется null; он либо вернет объект Cursor, либо выбросит исключение. Поэтому отрасль всегда берется. Когда это произойдет, showRecords() не вызывается.

И это, наверное, хорошо, потому что в противном случае у вас будет бесконечная рекурсия, с showRecords(), которая снова и снова будет называть себя.

Это похоже на то, что вы имеете в виду. Что вы, вероятно, хотите:

if (mCurRandom.moveToFirst()) { 
    // Do something with the random record 
} 
+0

Можете ли вы указать правильный код –

+0

@GauravAwasthi - Из вашего кода не видно, чего вы пытаетесь достичь. Предполагается ли, что активность должна отображать одну случайную запись в «TextView»? Предполагается ли он отображать содержимое всей базы данных в «ListView»? –

+0

Простая одна случайная запись, которую я хочу рассказать –

 Смежные вопросы

  • Нет связанных вопросов^_^