2013-10-28 3 views
0

Я пытаюсь показать данные для моей базы данных sqlite в arraylist, но у кода возникают проблемы, и я не могу его найти. Вот код для моего приложения:Android - ArrayAdapter разбился на фрагмент

public class Event extends Fragment implements OnClickListener { 
Intent intent; 
TextView eventId; 
EventController controller = new EventController(getActivity()); 
Button show; 

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.event, container, false); 

    ArrayList<HashMap<String, String>> eventList = controller 
      .getAllEvents(); 
    if (eventList.size() != 0) { 
     ListView lv = (ListView) rootView.findViewById(R.id.list); 
     lv.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       eventId = (TextView) view.findViewById(R.id.eventId); 
       String valEventId = eventId.getText().toString(); 
       Intent objIndent = new Intent(getActivity(), 
         EditEvent.class); 
       objIndent.putExtra("eventId", valEventId); 
       startActivity(objIndent); 
      } 
     }); 
     ListAdapter adapter = new SimpleAdapter(getActivity(), eventList, 
       R.layout.view_event_entry, new String[] { "eventId", 
         "eventName" }, new int[] { R.id.eventId, 
         R.id.eventName }); 
     lv.setAdapter(adapter); 
    } 
    show = (Button)rootView.findViewById(R.id.button1); 
    show.setOnClickListener(this); 

    return rootView; 
} 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    Intent objIntent = new Intent(getActivity(), AddEvent.class); 
    startActivity(objIntent); 
} 

И в LogCat, может быть, проблема является исключением NullPointer:

10-27 03:37:20.418: E/AndroidRuntime(29577): FATAL EXCEPTION: main 
10-27 03:37:20.418: E/AndroidRuntime(29577): java.lang.NullPointerException 
10-27 03:37:20.418: E/AndroidRuntime(29577): at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224) 
10-27 03:37:20.418: E/AndroidRuntime(29577): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164) 
10-27 03:37:20.418: E/AndroidRuntime(29577): at com.example.hapshare.EventController.getAllEvents(EventController.java:70) 
10-27 03:37:20.418: E/AndroidRuntime(29577): at com.example.hapshare.Event.onCreateView(Event.java:41) 
10-27 03:37:20.418: E/AndroidRuntime(29577): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1478) 
10-27 03:37:20.418: E/AndroidRuntime(29577): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927) 
10-27 03:37:20.418: E/AndroidRuntime(29577): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 
10-27 03:37:20.418: E/AndroidRuntime(29577): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 
10-27 03:37:20.418: E/AndroidRuntime(29577): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460) 
10-27 03:37:20.418: E/AndroidRuntime(29577): at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472) 
10-27 03:37:20.418: E/AndroidRuntime(29577): at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141) 

Вот код для моей базы данных, EventController:

public class EventController extends SQLiteOpenHelper { 
private static final String LOGCAT = null; 

public EventController(Context applicationcontext) { 
    super(applicationcontext, "androidsqlite.db", null, 1); 
    Log.d(LOGCAT,"Created"); 
} 

@Override 
//create table for the database 
public void onCreate(SQLiteDatabase database) { 
    String query; 
    query = "CREATE TABLE events (eventId INTEGER PRIMARY KEY, eventName TEXT)"; 
    database.execSQL(query);  
    Log.d(LOGCAT,"events Created"); 
} 
@Override 
//drop the database and reset if required 
public void onUpgrade(SQLiteDatabase database, int version_old, int current_version) { 
    String query; 
    query = "DROP TABLE IF EXISTS events"; 
    database.execSQL(query); 
    onCreate(database); 
} 

public void insertEvent(HashMap<String, String> queryValues) { 
    SQLiteDatabase database = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    values.put("eventName", queryValues.get("eventName")); 
    database.insert("events", null, values); 
    database.close(); 
} 

public int updateEvent(HashMap<String, String> queryValues) { 
    SQLiteDatabase database = this.getWritableDatabase();  
    ContentValues values = new ContentValues(); 
    values.put("eventName", queryValues.get("eventName")); 
    return database.update("events", values, "eventId" + " = ?", new String[] { queryValues.get("eventId") }); 
    //String updateQuery = "Update words set txtWord='"+word+"' where txtWord='"+ oldWord +"'"; 
    //Log.d(LOGCAT,updateQuery); 
    //database.rawQuery(updateQuery, null); 
    //return database.update("words", values, "txtWord = ?", new String[] { word }); 
} 

public void deleteEvent(String id) { 
    Log.d(LOGCAT,"delete"); 
    SQLiteDatabase database = this.getWritableDatabase();  
    String deleteQuery = "DELETE FROM events where eventId='"+ id +"'"; 
    Log.d("query",deleteQuery);  
    database.execSQL(deleteQuery); 
} 

public ArrayList<HashMap<String, String>> getAllEvents() { 
    ArrayList<HashMap<String, String>> wordList; 
    wordList = new ArrayList<HashMap<String, String>>(); 
    String selectQuery = "SELECT * FROM events"; 
    SQLiteDatabase database = this.getWritableDatabase(); 
    Cursor cursor = database.rawQuery(selectQuery, null); 
    if (cursor.moveToFirst()) { 
     do { 
      HashMap<String, String> map = new HashMap<String, String>(); 
      map.put("eventId", cursor.getString(0)); 
      map.put("eventName", cursor.getString(1)); 
      wordList.add(map); 
     } while (cursor.moveToNext()); 
    } 

    // return contact list 
    return wordList; 
} 

public HashMap<String, String> getEventInfo(String id) { 
    HashMap<String, String> wordList = new HashMap<String, String>(); 
    SQLiteDatabase database = this.getReadableDatabase(); 
    String selectQuery = "SELECT * FROM events where eventId='"+id+"'"; 
    Cursor cursor = database.rawQuery(selectQuery, null); 
    if (cursor.moveToFirst()) { 
     do { 
       //HashMap<String, String> map = new HashMap<String, String>(); 
      wordList.put("eventName", cursor.getString(1)); 
       //wordList.add(map); 
     } while (cursor.moveToNext()); 
    }     
return wordList; 
} 

Есть ли у кого-нибудь идеи, что я могу делать неправильно? Спасибо

ответ

0

Вам необходимо закрыть базу данных и курсоры, которые работают с базой данных, после того, как вы их закончите.

Добавить cursor.close(); в методы getAllEvents() в конце. Кажется, это вызывает эту проблему.

Аналогичным образом, вы должны сделать то же самое во всех других местах. Взгляните на this tutorial и посмотрите, как курсор закрывается в конце различных методов запросов.

+0

@AmulyaKahre я добавил, но проблема не решена. – AndroidWorld12

+0

Тогда вы должны получить какую-то новую ошибку. Потому что вышеупомянутая проблема имеет решение, которое я опубликовал. Если теперь журнал отличается, отправьте его. –

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