Android SQLite - небольшая сложность ввода / вывода - PullRequest
0 голосов
/ 07 февраля 2012

Я создал базовую программу для изучения SQLite и Android.Приложение имеет в общей сложности 2 действия:

Упражнение 1. Пользователь вводит имя и фамилию, нажимает кнопку отправки.При отправке эти данные будут добавлены в базу данных, и будет вызвано задание № 2.

Упражнение 2: Это задание просто берет последние данные из базы данных и отображает их на экране.

Проблема в том, что я получаю исключение NullPointer при выполнении кода.Я добавил соответствующий код для обеих операций и код базы данных в надежде, что кто-нибудь покажет мне, где я ошибаюсь.Спасибо за любую помощь.

Упражнение 1:

public class DBExampleActivity extends Activity implements OnClickListener{


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Declare the database object and open.
    MyDBManager db = new MyDBManager(this);
    db.open();

    // Take names from EditTexts and store in string.
    first_name  = fname.getText().toString();
    last_name   = lname.getText().toString();   
}

@Override
public void onClick(View view) {
    // In the onclick method, add values to database, call next activity
    db.insertData(first_name, last_name);
    Intent intent = new Intent(this, Display.class);
    startActivity(intent);
}}

Упражнение 2:

public class Display extends Activity {

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Cursor myCursor = db.getDetails();

    // Get relevant data from columns in cursor.
    username =  c.getString(c.getColumnIndex("first_name")); 
    password =  c.getString(c.getColumnIndex("last_name")); 

    // set textview values.
    fname.setText(first_name);
    lname.setText(last_name);    
}}

Код базы данных:

public class MyDBManager {
public static final String KEY_ROWID = "id";
public static final String KEY_USERNAME = "firstname";
public static final String KEY_PASSWORD = "lastname";

private static final String DATABASE_NAME = "User_Information";
private static final String DATABASE_TABLE = "User_name";
private static final int DATABASE_VERSION = 1;

private static final String DATABASE_CREATE = 
                    "create table " + DATABASE_TABLE + 
                    " (_id integer primary key autoincrement, " + 
                    "username text not null, " + 
                    "password text not null); "  ;

private final Context context;
private DatabaseHelper DBHelper;
private SQLiteDatabase db;


public MyDBManager(Context context){
    this.context = context;
    DBHelper = new DatabaseHelper(context);
}

private static class DatabaseHelper extends SQLiteOpenHelper{

    DatabaseHelper(Context context){
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    // Creates the database
    @Override
    public void onCreate(SQLiteDatabase db){
        db.execSQL(DATABASE_CREATE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
        // on triggered if the database version has increased. 
        // used if you want to change structure of column: eg add new column.
    }
} // end helper class



// Methods used to access and change data in DB:
public MyDBManager open() throws SQLException{
    db = DBHelper.getWritableDatabase();
    return this;
}   


public void close(){
    DBHelper.close();
}

public long insertData(String username, String password){
    ContentValues initialValues = new ContentValues();
    initialValues.put(KEY_USERNAME, username);
    initialValues.put(KEY_PASSWORD, password);

    return db.insert(DATABASE_TABLE, null, initialValues);
}


public Cursor getDetails(long rowId){
    Cursor c = db.query(true, DATABASE_TABLE, new String[]{
                    KEY_ROWID,
                    KEY_USERNAME,
                    KEY_PASSWORD},
                    KEY_ROWID + "=" + rowId,
                    null,
                    null,
                    null,
                    null,
                    null);

    if(c != null){
        c.moveToFirst();
    }
    return c;
}}// End myDBManager Class.

РЕДАКТИРОВАТЬ:ДОБАВЛЕННЫЙ LOGCAT

02-07 16: 36: 59.376: E / AndroidRuntime (7138): ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: главное 02-07 16: 36: 59.376: E / AndroidRuntime (7138): java.lang.RuntimeException: не удалось запустить действие ComponentInfo {com.android.dbex / com.android.dbex.Display}: java.lang.NullPointerException 02-07 16: 36: 59.376: E / AndroidRuntime (7138): в android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2787) 02-07 16: 36: 59.376: E / AndroidRuntime (7138): на android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2803) 02-07 16: 36: 59.376:E / AndroidRuntime (7138): на android.app.ActivityThread.access $ 2300 (ActivityThread.java:135) 02-07 16: 36: 59.376: E / AndroidRuntime (7138): на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:2136) 02-07 16: 36: 59.376: E / AndroidRuntime (7138): на android.os.Handler.dispatchMessage (Handler.java:99) 02-0716: 36: 59.376: E / AndroidRuntime (7138): на android.os.Looper.loop (Looper.java:144) 02-07 16: 36: 59.376: E / AndroidRuntime (7138): на android.app.ActivityThread.main (ActivityThread.java:4937) 02-07 16: 36: 59.376: E / AndroidRuntime (7138): в java.lang.reflect.Method.invokeNative (собственный метод) 02-07 16: 36: 59.376: E /AndroidRuntime (7138): в java.lang.reflect.Method.invoke (Method.java:521) 02-07 16: 36: 59.376: E / AndroidRuntime (7138): в com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:868) 02-07 16: 36: 59.376: E / AndroidRuntime (7138): на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:626) 02-07 16:36: 59.376: E / AndroidRuntime (7138): в dalvik.system.NativeStart.main (собственный метод) 02-07 16: 36: 59.376: E / AndroidRuntime (7138): вызвано: java.lang.NullPointerException 02-07 16: 36: 59.376: E / AndroidRuntime (7138): на com.android.dbex.Display.onCreate (Display.java:26) 02-07 16: 36: 59.376: E / AndroidRuntime (7138): на android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1069) 02-07 16: 36: 59.376: E / AndroidRuntime (7138): на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2751) 02-07 16: 36: 59.376: E / AndroidRuntime (7138): ... еще 11

1 Ответ

0 голосов
/ 07 февраля 2012

Вы не создали свои представления во втором упражнении:

TextView fname = (TextView) findViewById(R.id.mytextview1);
TextView lname = (TextView) findViewById(R.id.mytextview2);
 // set textview values.
    fname.setText(first_name);
    lname.setText(last_name); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...