Я считаю, что у вас есть ряд вопросов.
Строка tvEmail.setText(Users.class.getEm);
не будет компилироваться. Я считаю, что вместо этого нужно tvEmail.setText(user);
или tvEmail.setText(email);
(вам не нужно, чтобы строки email
и user
имели одинаковое значение).
Если предположить, что EthicsActivity является допустимым рабочим действием, и что в манифесте имеется соответствующая запись активность , то AndroidManifest.xml , тогда проблема заключается в том, что вы получите сообщение об ошибке строки: -
11-10 19:56:12.863 1170-1170/so53240174.so53240174 E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{so53240174.so53240174/so53240174.so53240174.WelcomeActivity}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
at android.app.ActivityThread.access$600(ActivityThread.java:130)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
at android.database.AbstractCursor.checkPosition(AbstractCursor.java:418)
at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
at so53240174.so53240174.DataBaseHelper.getEmail(DataBaseHelper.java:96)
at so53240174.so53240174.WelcomeActivity.onCreate(WelcomeActivity.java:25)
at android.app.Activity.performCreate(Activity.java:5008)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
at android.app.ActivityThread.access$600(ActivityThread.java:130)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Это говорит о том, что курсор пуст, поэтому вы не можете получить от него никаких данных, и это происходит в строке String user = cursor.getString(cursor.getColumnIndex(COLUMN_EMAIL));
, которая находится в методе getEmail , как указано в строка в журнале: -
at so53240174.so53240174.DataBaseHelper.getEmail(DataBaseHelper.java:96)
Причина, по которой это происходит, заключается в том, что а) в таблице users нет строк и b) что результат метода Cursor moveToFirst не проверяется. Вместо этого делается предположение, что он всегда будет перемещаться в первый ряд в Курсоре.
Вместо метода getEmail используется: -
public String getEmail(String COLUMN_EMAIL)
{
m_db = this.getReadableDatabase();
Cursor cursor = m_db.query(TABLE_USERS, new String[]{COLUMN_EMAIL}, null, null,
null, null, null);
cursor.moveToFirst(); //<<<<<<<<<< WRONG
String user = cursor.getString(cursor.getColumnIndex(COLUMN_EMAIL));
cursor.close();
return user;
}
Это может быть: -
public String getEmail(String COLUMN_EMAIL) {
String user = "No Email Found."; //<<<<<<<<<< Default value in case of empty table
m_db = this.getReadableDatabase();
Cursor cursor = m_db.query(TABLE_USERS, new String[]{COLUMN_EMAIL}, null, null,
null, null, null);
if (cursor.moveToFirst()) { //<<<<<<<<<< checks result of the move
user = cursor.getString(cursor.getColumnIndex(COLUMN_EMAIL));
}
cursor.close();
return user;
}
Конечно, применение этого исправления, если строка не добавлена в таблицу users , всегда приведет к тому, что TextView отобразит Email Email Found . Если имеется несколько строк, то будет отображаться электронное письмо из одной из строк, не обязательно определенной строки.
Добавление строки db.insert("fred@fredmail.com","1234567890");
до получения значения с помощью вызова getEmail приводит к отображению fred@fredmail.com в TextView.