我正在构建一个带有listview的应用程序,listview的数据是从SQlite db填充的。我插入了总共11-20列。我一直在尝试从数据库中填充listview,但是我遇到了运行时异常。
以下是代码。我尝试过很多教程,但没有运气。
这是我的数据库代码
public class DataBaseHelper extends SQLiteOpenHelper
{
public DataBaseHelper(Context context, String name,CursorFactory factory, int version)
{
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase _db)
{
_db.execSQL(DataBase_Adapter.CREATE_NEW_LEAD_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase _db, int _oldVersion, int _newVersion)
{
_db.execSQL("DROP TABLE IF EXISTS " + DataBase_Adapter.TABLE_NEW_LEAD);
onCreate(_db);
}
}
public class DataBase_Adapter
{
//Database NAme
static final String DATABASE_NAME = "lead_management.db";
//Database Version
static final int DATABASE_VERSION = 4;
// Variable to hold the database instance
public SQLiteDatabase db;
// Context of the application using the database.
private final Context context;
// Database open/upgrade helper
private DataBaseHelper dbHelper;
public DataBase_Adapter(Context _context)
{
context = _context;
dbHelper = new DataBaseHelper(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public DataBase_Adapter open() throws SQLException
{
db = dbHelper.getWritableDatabase();
return this;
}
public void close()
{
db.close();
}
public SQLiteDatabase getDatabaseInstance()
{
return db;
}
//Table name
public static String TABLE_NEW_LEAD="new_lead";
//Creating New Lead Table Columns
public static final String KEY_NEW_LEAD_ID ="id";
public static final String KEY_NEW_LEAD_NAME ="name";
public static final String KEY_NEW_LEAD_EMAIL ="email";
public static final String KEY_NEW_LEAD_MOBILE="mobile";
public static final String KEY_NEW_LEAD_Product="define_products";
public static final String KEY_NEW_LEAD_BUDGET="budget";
public static final String KEY_NEW_LEAD_PRIORITY="priority";
public static final String KEY_NEW_LEAD_STATUS="status";
public static final String KEY_NEW_LEAD_NOTES="notes";
public static final String KEY_NEW_LEAD_REMINDER_DATE="reminder_date";
public static final String KEY_NEW_LEAD_REMINDER_TIME="reminder_time";
public static final String KEY_NEW_LEAD_ADDtoCONTACTS="add_to_contacts";
//// SQL Statement to create a New Lead Database.
static final String CREATE_NEW_LEAD_TABLE = "CREATE TABLE "+ TABLE_NEW_LEAD + "("
+ KEY_NEW_LEAD_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
+ KEY_NEW_LEAD_NAME + " TEXT,"
+ KEY_NEW_LEAD_EMAIL + " TEXT,"
+ KEY_NEW_LEAD_MOBILE+ " TEXT,"
+ KEY_NEW_LEAD_Product + " TEXT,"
+ KEY_NEW_LEAD_BUDGET + " TEXT,"
+ KEY_NEW_LEAD_PRIORITY +" TEXT,"
+ KEY_NEW_LEAD_STATUS + " TEXT,"
+ KEY_NEW_LEAD_NOTES + " TEXT,"
+ KEY_NEW_LEAD_REMINDER_DATE + " TEXT,"
+ KEY_NEW_LEAD_REMINDER_TIME + " TEXT,"
+ KEY_NEW_LEAD_ADDtoCONTACTS + " TEXT"+");";
//");";
//Insert New Record In New Lead Table
public void insert_NewLead_Entry(New_Lead_BeanClass newLead_BeanClass)
{
SQLiteDatabase sdb = dbHelper.getWritableDatabase();
ContentValues contentNewLead_Val=new ContentValues();
contentNewLead_Val.put(KEY_NEW_LEAD_NAME, newLead_BeanClass.get_Name());
contentNewLead_Val.put(KEY_NEW_LEAD_EMAIL, newLead_BeanClass.get_Email());
contentNewLead_Val.put(KEY_NEW_LEAD_MOBILE, newLead_BeanClass.get_MobileNo());
contentNewLead_Val.put(KEY_NEW_LEAD_Product, newLead_BeanClass.get_Product());
contentNewLead_Val.put(KEY_NEW_LEAD_BUDGET, newLead_BeanClass.get_Budget());
contentNewLead_Val.put(KEY_NEW_LEAD_PRIORITY, newLead_BeanClass.get_Priority());
contentNewLead_Val.put(KEY_NEW_LEAD_STATUS, newLead_BeanClass.get_Status());
contentNewLead_Val.put(KEY_NEW_LEAD_NOTES, newLead_BeanClass.get_Notes());
contentNewLead_Val.put(KEY_NEW_LEAD_REMINDER_DATE, newLead_BeanClass.get_Reminder_Date());
contentNewLead_Val.put(KEY_NEW_LEAD_REMINDER_TIME, newLead_BeanClass.get_Reminder_Time());
contentNewLead_Val.put(KEY_NEW_LEAD_ADDtoCONTACTS, newLead_BeanClass.get_AddtoContact());
sdb.insert(TABLE_NEW_LEAD , null , contentNewLead_Val );
//Close The Database Connection
sdb.close();
}
public ArrayList<HashMap<String,String>> getAllUserData()
{
ArrayList<HashMap<String,String>> newLeadDat_Listl;
newLeadDat_Listl = new ArrayList<HashMap<String,String>>();
SQLiteDatabase sdatabase = dbHelper.getWritableDatabase();
String selectQuery= "SELECT * FROM" + TABLE_NEW_LEAD ;
Cursor cursor = sdatabase.rawQuery(selectQuery, null);
if (cursor.moveToFirst())
{
do
{
HashMap<String, String> map = new HashMap<String, String>();
map.put(KEY_NEW_LEAD_ID, cursor.getString(0));
map.put(KEY_NEW_LEAD_NAME, cursor.getString(1));
map.put(KEY_NEW_LEAD_EMAIL, cursor.getString(2));
map.put(KEY_NEW_LEAD_MOBILE, cursor.getString(3));
map.put(KEY_NEW_LEAD_Product, cursor.getString(4));
map.put(KEY_NEW_LEAD_BUDGET, cursor.getString(5));
map.put(KEY_NEW_LEAD_PRIORITY, cursor.getString(6));
map.put(KEY_NEW_LEAD_STATUS, cursor.getString(7));
map.put(KEY_NEW_LEAD_NOTES, cursor.getString(8));
map.put(KEY_NEW_LEAD_REMINDER_DATE, cursor.getString(9));
map.put(KEY_NEW_LEAD_REMINDER_TIME, cursor.getString(10));
map.put(KEY_NEW_LEAD_ADDtoCONTACTS, cursor.getString(11));
newLeadDat_Listl.add(map);
}
while (cursor.moveToNext());
}
return newLeadDat_Listl;
}
}
这是mY活动代码
public class Serach_Data extends Activity
{
private static ArrayList<String> arrayList_newLead_Id = new ArrayList<String>();
private static ArrayList<String> arrayList_newLead_Name = new ArrayList<String>();
private static ArrayList<String> arrayList_newLead_Email = new ArrayList<String>();
private static ArrayList<String> arrayList_newLead_Mobile = new ArrayList<String>();
private static ArrayList<String> arrayList_newLead_Products = new ArrayList<String>();
private static ArrayList<String> arrayList_newLead_Budget = new ArrayList<String>();
private static ArrayList<String> arrayList_newLead_Priority = new ArrayList<String>();
private static ArrayList<String> arrayList_newLead_Status = new ArrayList<String>();
private static ArrayList<String> arrayList_newLead_Notes = new ArrayList<String>();
private static ArrayList<String> arrayList_newLead_Reminder_Date = new ArrayList<String>();
private static ArrayList<String> arrayList_newLead_Reminder_Time = new ArrayList<String>();
private static ArrayList<String> arrayList_newLead_AddToContact = new ArrayList<String>();
New_Lead_List_Adapter new_Lead_List_Adapter;
private SQLiteDatabase dataBase;
private DataBaseHelper dbHelper;
DataBase_Adapter dbAdapter;
private ListView newLeadDat_List;
Context context;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.search_data);
newLeadDat_List = (ListView)findViewById(R.id.listView_DisplayData);
System.out.println("Data Displayed Succesfully!!!!!!!!!");
}
@Override
protected void onResume() {
displayNewLeadData();
super.onResume();
}
public void displayNewLeadData()
{
dataBase = dbHelper.getWritableDatabase();
Cursor mCursor = dataBase.rawQuery("SELECT * FROM " + DataBase_Adapter.TABLE_NEW_LEAD, null);
arrayList_newLead_Id.clear();
arrayList_newLead_Name.clear();
arrayList_newLead_Email.clear();
arrayList_newLead_Mobile.clear();
arrayList_newLead_Products.clear();
arrayList_newLead_Budget.clear();
arrayList_newLead_Priority.clear();
arrayList_newLead_Status.clear();
arrayList_newLead_Notes.clear();
arrayList_newLead_Reminder_Date.clear();
arrayList_newLead_Reminder_Time.clear();
arrayList_newLead_AddToContact.clear();
{
do
{
arrayList_newLead_Id.add(mCursor.getString(mCursor.getColumnIndex(DataBase_Adapter.KEY_NEW_LEAD_ID)));
arrayList_newLead_Name.add(mCursor.getString(mCursor.getColumnIndex(DataBase_Adapter.KEY_NEW_LEAD_NAME)));
arrayList_newLead_Email.add(mCursor.getString(mCursor.getColumnIndex(DataBase_Adapter.KEY_NEW_LEAD_EMAIL)));
arrayList_newLead_Mobile.add(mCursor.getString(mCursor.getColumnIndex(DataBase_Adapter.KEY_NEW_LEAD_MOBILE)));
arrayList_newLead_Products.add(mCursor.getString(mCursor.getColumnIndex(DataBase_Adapter.KEY_NEW_LEAD_Product)));
arrayList_newLead_Budget.add(mCursor.getString(mCursor.getColumnIndex(DataBase_Adapter.KEY_NEW_LEAD_BUDGET)));
arrayList_newLead_Priority.add(mCursor.getString(mCursor.getColumnIndex(DataBase_Adapter.KEY_NEW_LEAD_PRIORITY)));
arrayList_newLead_Status.add(mCursor.getString(mCursor.getColumnIndex(DataBase_Adapter.KEY_NEW_LEAD_STATUS)));
arrayList_newLead_Notes.add(mCursor.getString(mCursor.getColumnIndex(DataBase_Adapter.KEY_NEW_LEAD_NOTES)));
arrayList_newLead_Reminder_Date.add(mCursor.getString(mCursor.getColumnIndex(DataBase_Adapter.KEY_NEW_LEAD_REMINDER_DATE)));
arrayList_newLead_Reminder_Time.add(mCursor.getString(mCursor.getColumnIndex(DataBase_Adapter.KEY_NEW_LEAD_REMINDER_TIME)));
arrayList_newLead_AddToContact.add(mCursor.getString(mCursor.getColumnIndex(DataBase_Adapter.KEY_NEW_LEAD_ADDtoCONTACTS)));
} while (mCursor.moveToNext());
}
new_Lead_List_Adapter = new New_Lead_List_Adapter(Serach_Data.this , arrayList_newLead_Id ,
arrayList_newLead_Name , arrayList_newLead_Email,
arrayList_newLead_Mobile , arrayList_newLead_Products,
arrayList_newLead_Budget , arrayList_newLead_Priority ,
arrayList_newLead_Status , arrayList_newLead_Notes ,
arrayList_newLead_Reminder_Date , arrayList_newLead_Reminder_Time ,
arrayList_newLead_AddToContact );
newLeadDat_List.setAdapter(new_Lead_List_Adapter);
new_Lead_List_Adapter.notifyDataSetChanged();
mCursor.close();
System.out.println("Data will Be Display.");
}
}
这是我的Log cat stack trace
12-02 17:46:15.301: E/AndroidRuntime(333): FATAL EXCEPTION: main
12-02 17:46:15.301: E/AndroidRuntime(333): java.lang.RuntimeException: Unable to resume activity {com.lead_management_project/com.lead_management_project.Serach_Data}: java.lang.NullPointerException
12-02 17:46:15.301: E/AndroidRuntime(333): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2120)
12-02 17:46:15.301: E/AndroidRuntime(333): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2135)
12-02 17:46:15.301: E/AndroidRuntime(333): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1668)
12-02 17:46:15.301: E/AndroidRuntime(333): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
12-02 17:46:15.301: E/AndroidRuntime(333): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
12-02 17:46:15.301: E/AndroidRuntime(333): at android.os.Handler.dispatchMessage(Handler.java:99)
12-02 17:46:15.301: E/AndroidRuntime(333): at android.os.Looper.loop(Looper.java:123)
12-02 17:46:15.301: E/AndroidRuntime(333): at android.app.ActivityThread.main(ActivityThread.java:3683)
12-02 17:46:15.301: E/AndroidRuntime(333): at java.lang.reflect.Method.invokeNative(Native Method)
12-02 17:46:15.301: E/AndroidRuntime(333): at java.lang.reflect.Method.invoke(Method.java:507)
12-02 17:46:15.301: E/AndroidRuntime(333): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
12-02 17:46:15.301: E/AndroidRuntime(333): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-02 17:46:15.301: E/AndroidRuntime(333): at dalvik.system.NativeStart.main(Native Method)
12-02 17:46:15.301: E/AndroidRuntime(333): Caused by: java.lang.NullPointerException
12-02 17:46:15.301: E/AndroidRuntime(333): at com.lead_management_project.Serach_Data.displayNewLeadData(Serach_Data.java:57)
12-02 17:46:15.301: E/AndroidRuntime(333): at com.lead_management_project.Serach_Data.onResume(Serach_Data.java:50)
12-02 17:46:15.301: E/AndroidRuntime(333): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1150)
12-02 17:46:15.301: E/AndroidRuntime(333): at android.app.Activity.performResume(Activity.java:3832)
12-02 17:46:15.301: E/AndroidRuntime(333): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2110)
12-02 17:46:15.301: E/AndroidRuntime(333): ... 12 more
答案 0 :(得分:0)
Android可能会丢弃并重新创建您的活动,如果它需要内存,并且您没有在活动的dbHelper
方法中设置onCreate
,那么当您尝试阅读时,它是{{1 }}。事实上,我无法看到你设置它的任何地方。您的意思是使用null
吗?
答案 1 :(得分:0)
替换下面的displayNewLeadData()
,
public void displayNewLeadData()
{
dbAdapter=new DataBase_Adapter(Serach_Data.this).open();
dataBase = dbAdapter.getDatabaseInstance();
Cursor mCursor = dataBase.rawQuery("SELECT * FROM " + DataBase_Adapter.TABLE_NEW_LEAD, null);
mCursor.moveToFirst();
arrayList_newLead_Id.clear();
arrayList_newLead_Name.clear();
arrayList_newLead_Email.clear();
arrayList_newLead_Mobile.clear();
arrayList_newLead_Products.clear();
arrayList_newLead_Budget.clear();
arrayList_newLead_Priority.clear();
arrayList_newLead_Status.clear();
arrayList_newLead_Notes.clear();
arrayList_newLead_Reminder_Date.clear();
arrayList_newLead_Reminder_Time.clear();
arrayList_newLead_AddToContact.clear();
do
{
arrayList_newLead_Id.add(mCursor.getString(mCursor.getColumnIndex(DataBase_Adapter.KEY_NEW_LEAD_ID)));
arrayList_newLead_Name.add(mCursor.getString(mCursor.getColumnIndex(DataBase_Adapter.KEY_NEW_LEAD_NAME)));
arrayList_newLead_Email.add(mCursor.getString(mCursor.getColumnIndex(DataBase_Adapter.KEY_NEW_LEAD_EMAIL)));
arrayList_newLead_Mobile.add(mCursor.getString(mCursor.getColumnIndex(DataBase_Adapter.KEY_NEW_LEAD_MOBILE)));
arrayList_newLead_Products.add(mCursor.getString(mCursor.getColumnIndex(DataBase_Adapter.KEY_NEW_LEAD_Product)));
arrayList_newLead_Budget.add(mCursor.getString(mCursor.getColumnIndex(DataBase_Adapter.KEY_NEW_LEAD_BUDGET)));
arrayList_newLead_Priority.add(mCursor.getString(mCursor.getColumnIndex(DataBase_Adapter.KEY_NEW_LEAD_PRIORITY)));
arrayList_newLead_Status.add(mCursor.getString(mCursor.getColumnIndex(DataBase_Adapter.KEY_NEW_LEAD_STATUS)));
arrayList_newLead_Notes.add(mCursor.getString(mCursor.getColumnIndex(DataBase_Adapter.KEY_NEW_LEAD_NOTES)));
arrayList_newLead_Reminder_Date.add(mCursor.getString(mCursor.getColumnIndex(DataBase_Adapter.KEY_NEW_LEAD_REMINDER_DATE)));
arrayList_newLead_Reminder_Time.add(mCursor.getString(mCursor.getColumnIndex(DataBase_Adapter.KEY_NEW_LEAD_REMINDER_TIME)));
arrayList_newLead_AddToContact.add(mCursor.getString(mCursor.getColumnIndex(DataBase_Adapter.KEY_NEW_LEAD_ADDtoCONTACTS)));
} while (mCursor.moveToNext());
new_Lead_List_Adapter = new New_Lead_List_Adapter(Serach_Data.this , arrayList_newLead_Id ,
arrayList_newLead_Name , arrayList_newLead_Email,
arrayList_newLead_Mobile , arrayList_newLead_Products,
arrayList_newLead_Budget , arrayList_newLead_Priority ,
arrayList_newLead_Status , arrayList_newLead_Notes ,
arrayList_newLead_Reminder_Date , arrayList_newLead_Reminder_Time ,
arrayList_newLead_AddToContact );
newLeadDat_List.setAdapter(new_Lead_List_Adapter);
new_Lead_List_Adapter.notifyDataSetChanged();
mCursor.close();
System.out.println("Data will Be Display.");
}