记录没有被插入表中,它给了我无法理解的错误。请帮忙。
数据库类
package com.example.nearby_places;
import java.util.ArrayList;
import java.util.List;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class Database extends SQLiteOpenHelper {
//database name & version number
private static final String db_name = "nearby_place";
private static final int db_version = 5;
//tables
private static final String table_placetypes = "placetypes";
private static final String table_places = "table_places";
//column names
private static final String type_id = "type_id";
private static final String type_name = "type_name";
private static final String place_id = "place_id";
private static final String place_name = "place_name";
private static final String place_address = "place_address";
private static final String place_contact = "place_contact";
public Database(Context context) {
super(context, db_name, null, db_version);
// TODO Auto-generated constructor stub
}
// create table queries
String create_table_placetypes = "CREATE TABLE IF NOT EXISTS " + table_placetypes + "("
+ type_id + " INTEGER PRIMARY KEY NOT NULL," + type_name + " TEXT" + ")";
String create_table_places = "CREATE TABLE IF NOT EXISTS table_places (type_id INTEGER, " +
"place_id INTEGER PRIMARY KEY NOT NULL, place_name TEXT, " +
"place_address TEXT, place_contact TEXT, " +
"FOREIGN KEY (type_id) REFERENCES table_placetypes(type_id))";
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(create_table_placetypes);
Log.d("creating", "placetypes created");
db.execSQL(create_table_places);
Log.d("creating", "places created");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS " + table_placetypes);
db.execSQL("DROP TABLE IF EXISTS " + table_places);
onCreate(db);
}
// add placetypes
void addplacetypes (placetypes pt) {
SQLiteDatabase db = getWritableDatabase();
ContentValues values = new ContentValues();
values.put(type_name, pt.getTypename());
db.insert(table_placetypes, null, values);
db.close();
}
// Getting single placetypes
placetypes getPlacetypes(int id) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(table_placetypes, new String[] {type_id,
type_name }, type_id + "=?",
new String[] { String.valueOf(id) }, null, null, null, null);
if (cursor != null)
cursor.moveToFirst();
placetypes pt = new placetypes(Integer.parseInt(cursor.getString(0)),
cursor.getString(1));
// return contact
return pt;
}
// Getting All placetypes
public List<placetypes> getAllPlacetypes() {
List<placetypes> placetypesList = new ArrayList<placetypes>();
// Select All Query
String selectQuery = "SELECT * FROM " + table_placetypes;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
placetypes pt = new placetypes();
pt.setTypeid(Integer.parseInt(cursor.getString(0)));
pt.setTypename(cursor.getString(1));
String name = cursor.getString(1);
//MainActivity.ArrayofName.add(name);
// Adding contact to list
placetypesList.add(pt);
} while (cursor.moveToNext());
}
// return placetype list
return placetypesList;
}
// Getting placetypes Count
public int getPlacetypesCount() {
String countQuery = "SELECT * FROM " + table_placetypes;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(countQuery, null);
cursor.close();
// return count
return cursor.getCount();
}
public void addplaces(places p) {
SQLiteDatabase db = getWritableDatabase();
ContentValues values = new ContentValues();
values.put(place_name, p.getPlace_name());
values.put(place_address, p.getPlace_address());
values.put(place_contact, p.getPlace_contact());
db.insert(table_places, null, values);
db.close();
}
places getPlaces(int pid) {
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.query(table_places, new String[] {place_id, place_name, place_address, place_contact}, place_id + "=?", new String[] { String.valueOf(pid) } , null, null, null, null);
if(cursor != null)
cursor.moveToFirst();
places p = new places(Integer.parseInt(cursor.getString(0)),
cursor.getString(1),
cursor.getString(2),
cursor.getString(3)
);
return p;
}
public List<places> getAllPlaces() {
List<places> placeList = new ArrayList<places>();
String selectQuery = "SELECT * FROM " + table_places;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
if(cursor.moveToFirst()) {
do{
places p = new places();
p.setPlace_id(Integer.parseInt(cursor.getString(0)));
p.setPlace_name(cursor.getString(1));
p.setPlace_address(cursor.getString(2));
p.setPlace_contact(cursor.getString(3));
String p_name = cursor.getString(1);
String p_address = cursor.getString(2);
String p_contact = cursor.getString(3);
placeList.add(p);
}while(cursor.moveToNext());
}
return placeList;
}
public int getPlaceCount () {
String selectQuery = "SELECT * FROM " +table_places;
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.rawQuery(create_table_places, null);
cursor.close();
return cursor.getCount();
}
}
主 Activity2 类(我为 table_place 制作的,即当点击地点类型时,它将根据地点类型显示相应的地点)
package com.example.nearby_places;
import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
public class MainActivity2 extends Activity {
private ListView listView;
public static ArrayList<String> ArrayofName = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Database db = new Database(this);
if(db.getAllPlaces().isEmpty())
{
/**
* CRUD Operations
* */
// Inserting Places
Log.d("Insert: ", "Inserting ..");
//db.addplaces(new places("Pizza Hut",null,null));
/* db.addplacetypes(new placetypes("MALLS"));
db.addplacetypes(new placetypes("GAS STATIONS"));
db.addplacetypes(new placetypes("HOTELS"));
db.addplacetypes(new placetypes("MOTELS"));
*/}
// Reading all Places
Log.d("Reading: ", "Reading all places..");
if(ArrayofName.isEmpty())
{
List<places> places = db.getAllPlaces();
for (places p : places)
{
String log = "Id: "+p.getPlace_id() +" ,Name: " + p.getPlace_name() +" ,ADDRESS: " + p.getPlace_address() +"CONTACT NO. : " +p.getPlace_contact();
//Writing Places to log
Log.d("Name: ", log);
Log.d("ADDRESS: ", log);
Log.d("CONTACT NO : ", log);
System.out.println(log);
ArrayofName.add(p.getPlace_name());
ArrayofName.add(p.getPlace_address());
ArrayofName.add(p.getPlace_contact());
}
}
listView = (ListView) findViewById(R.id.listView1);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, ArrayofName);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent, View v, int position, long id)
{
Toast.makeText(getApplicationContext(), ((TextView) v).getText(), Toast.LENGTH_SHORT).show();
// Intent i = new Intent(this,Activity2.class);
// startActivity(i);
// Intent intent = new Intent(MainActivity.this, Activity2.class);
// startActivity(intent);
}
}
);
}
}
日志文件
10-09 07:19:57.850: I/Process(12740): Sending signal. PID: 12740 SIG: 9
10-09 07:21:04.281: D/dalvikvm(13567): GC_FOR_ALLOC freed 55K, 9% free 2728K/2980K, paused 1964ms, total 1995ms
10-09 07:21:04.791: I/dalvikvm-heap(13567): Grow heap (frag case) to 3.928MB for 1127532-byte allocation
10-09 07:21:06.651: D/dalvikvm(13567): GC_FOR_ALLOC freed 2K, 7% free 3827K/4084K, paused 1852ms, total 1853ms
10-09 07:21:15.641: D/Reading:(13567): Reading all placetypes..
10-09 07:21:15.841: D/Name:(13567): Id: 1 ,Name: RESTURAUNTS
10-09 07:21:15.891: I/System.out(13567): Id: 1 ,Name: RESTURAUNTS
10-09 07:21:15.901: D/Name:(13567): Id: 2 ,Name: MALLS
10-09 07:21:15.921: I/System.out(13567): Id: 2 ,Name: MALLS
10-09 07:21:15.921: D/Name:(13567): Id: 3 ,Name: GAS STATIONS
10-09 07:21:15.941: I/System.out(13567): Id: 3 ,Name: GAS STATIONS
10-09 07:21:15.941: D/Name:(13567): Id: 4 ,Name: HOTELS
10-09 07:21:15.941: I/System.out(13567): Id: 4 ,Name: HOTELS
10-09 07:21:15.941: D/Name:(13567): Id: 5 ,Name: MOTELS
10-09 07:21:15.941: I/System.out(13567): Id: 5 ,Name: MOTELS
10-09 07:21:17.761: I/Choreographer(13567): Skipped 78 frames! The application may be doing too much work on its main thread.
10-09 07:21:27.621: I/Choreographer(13567): Skipped 977 frames! The application may be doing too much work on its main thread.
10-09 07:21:28.011: D/gralloc_goldfish(13567): Emulator without GPU emulation detected.
10-09 07:21:29.401: I/Choreographer(13567): Skipped 41 frames! The application may be doing too much work on its main thread.
10-09 07:21:33.351: I/Choreographer(13567): Skipped 42 frames! The application may be doing too much work on its main thread.
10-09 07:23:04.913: I/Choreographer(13567): Skipped 245 frames! The application may be doing too much work on its main thread.
10-09 07:23:06.793: I/Choreographer(13567): Skipped 121 frames! The application may be doing too much work on its main thread.
10-09 07:23:13.933: D/AndroidRuntime(13567): Shutting down VM
10-09 07:23:13.933: W/dalvikvm(13567): threadid=1: thread exiting with uncaught exception (group=0xb0f04648)
10-09 07:23:14.173: E/AndroidRuntime(13567): FATAL EXCEPTION: main
10-09 07:23:14.173: E/AndroidRuntime(13567): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.nearby_places/com.example.nearby_places.MainActivity2}: java.lang.NumberFormatException: Invalid int: "null"
10-09 07:23:14.173: E/AndroidRuntime(13567): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
10-09 07:23:14.173: E/AndroidRuntime(13567): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
10-09 07:23:14.173: E/AndroidRuntime(13567): at android.app.ActivityThread.access$600(ActivityThread.java:141)
10-09 07:23:14.173: E/AndroidRuntime(13567): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
10-09 07:23:14.173: E/AndroidRuntime(13567): at android.os.Handler.dispatchMessage(Handler.java:99)
10-09 07:23:14.173: E/AndroidRuntime(13567): at android.os.Looper.loop(Looper.java:137)
10-09 07:23:14.173: E/AndroidRuntime(13567): at android.app.ActivityThread.main(ActivityThread.java:5103)
10-09 07:23:14.173: E/AndroidRuntime(13567): at java.lang.reflect.Method.invokeNative(Native Method)
10-09 07:23:14.173: E/AndroidRuntime(13567): at java.lang.reflect.Method.invoke(Method.java:525)
10-09 07:23:14.173: E/AndroidRuntime(13567): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
10-09 07:23:14.173: E/AndroidRuntime(13567): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-09 07:23:14.173: E/AndroidRuntime(13567): at dalvik.system.NativeStart.main(Native Method)
10-09 07:23:14.173: E/AndroidRuntime(13567): Caused by: java.lang.NumberFormatException: Invalid int: "null"
10-09 07:23:14.173: E/AndroidRuntime(13567): at java.lang.Integer.invalidInt(Integer.java:138)
10-09 07:23:14.173: E/AndroidRuntime(13567): at java.lang.Integer.parseInt(Integer.java:355)
10-09 07:23:14.173: E/AndroidRuntime(13567): at java.lang.Integer.parseInt(Integer.java:332)
10-09 07:23:14.173: E/AndroidRuntime(13567): at com.example.nearby_places.Database.getAllPlaces(Database.java:184)
10-09 07:23:14.173: E/AndroidRuntime(13567): at com.example.nearby_places.MainActivity2.onCreate(MainActivity2.java:29)
10-09 07:23:14.173: E/AndroidRuntime(13567): at android.app.Activity.performCreate(Activity.java:5133)
10-09 07:23:14.173: E/AndroidRuntime(13567): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
10-09 07:23:14.173: E/AndroidRuntime(13567): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
10-09 07:23:14.173: E/AndroidRuntime(13567): ... 11 more
10-09 07:28:14.847: I/Process(13567): Sending signal. PID: 13567 SIG: 9