2013-10-28 2 views
0

arraylist에서 sqlite 데이터베이스의 데이터를 표시하려고하는데 코드에 문제가있어서 찾을 수 없습니다. 여기에 내 응용 프로그램에 대한 코드입니다, 여기에 Android - ArrayAdapter가 조각으로 인해 손상되었습니다.

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 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); 
} 

그리고 로그 캣은, 어쩌면 문제는 nullpointer 예외입니다

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

데이터베이스 사용을 마친 후에 데이터베이스에서 작동하는 커서와 데이터베이스를 닫아야합니다.

getAllEvents() 마지막에 cursor.close();을 추가하십시오. 그게이 문제를 일으키는 것 같습니다.

마찬가지로 다른 모든 장소에서도 동일한 작업을 수행해야합니다. this tutorial을보고 다른 쿼리 방법의 끝에서 커서가 어떻게 닫혀 있는지보십시오.

+0

@AmulyaKahre 내가 추가했지만 문제가 해결되지 않았습니다. – AndroidWorld12

+0

그러면 위와 같은 문제가 제가 게시 한 해결책이 있기 때문에 새로운 오류가 발생했을 것입니다. 로그가 다른 경우 지금 게시하십시오. –

관련 문제