No se puede reanudar la actividad
Soy principiante y tratando de permitir que mi ListView
para actualizar después de mi base de datos SQLite se actualiza. No estoy recibiendo un error de compilación después de revisar mi método onResume()
. Estoy utilizando un SimpleCursorAdapter
para SimpleCursorAdapter
pero no funciona. El error recibido fue de logcat y está por debajo. Por favor avise … ejemplos ayudan mejor.
Logcat:
- AutoCompleteTextView con CursorLoader y SimpleCursorAdapter
- NullPointer cuando findViewById () en SimpleCursorAdapter
- Obtener el valor String de un Spinner respaldado por CursorAdapter de la consulta SQL en Android
- SimpleCursorAdapter obsoleto en la versión 15 de la API?
- Android - Visualización de los resultados del cursor de DB en ListView
02-19 21:31:49.933: E/AndroidRuntime(714): java.lang.RuntimeException: Unable to resume activity {com.loginplus.home/com.loginplus.home.LoginList}: java.lang.NullPointerException 02-19 21:31:49.933: E/AndroidRuntime(714): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2444) 02-19 21:31:49.933: E/AndroidRuntime(714): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2472) 02-19 21:31:49.933: E/AndroidRuntime(714): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1986) 02-19 21:31:49.933: E/AndroidRuntime(714): at android.app.ActivityThread.access$600(ActivityThread.java:123) 02-19 21:31:49.933: E/AndroidRuntime(714): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 02-19 21:31:49.933: E/AndroidRuntime(714): at android.os.Handler.dispatchMessage(Handler.java:99) 02-19 21:31:49.933: E/AndroidRuntime(714): at android.os.Looper.loop(Looper.java:137) 02-19 21:31:49.933: E/AndroidRuntime(714): at android.app.ActivityThread.main(ActivityThread.java:4424) 02-19 21:31:49.933: E/AndroidRuntime(714): at java.lang.reflect.Method.invokeNative(Native Method) 02-19 21:31:49.933: E/AndroidRuntime(714): at java.lang.reflect.Method.invoke(Method.java:511) 02-19 21:31:49.933: E/AndroidRuntime(714): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 02-19 21:31:49.933: E/AndroidRuntime(714): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 02-19 21:31:49.933: E/AndroidRuntime(714): at dalvik.system.NativeStart.main(Native Method) 02-19 21:31:49.933: E/AndroidRuntime(714): Caused by: java.lang.NullPointerException 02-19 21:31:49.933: E/AndroidRuntime(714): at com.loginplus.home.LoginList.onResume(LoginList.java:101) 02-19 21:31:49.933: E/AndroidRuntime(714): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1154) 02-19 21:31:49.933: E/AndroidRuntime(714): at android.app.Activity.performResume(Activity.java:4539) 02-19 21:31:49.933: E/AndroidRuntime(714): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2434)
Actividad:
public class LoginList extends Activity implements OnClickListener, OnItemClickListener { private ListView loginList; private Button webLogin; private ListAdapter loginListAdapter; private ArrayList<LoginDetails> loginArrayList; List<String> arrayList = new ArrayList<String>(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); arrayList = populateList(); loginListAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, populateList()); setContentView(R.layout.login_listview); loginList = (ListView) findViewById(R.id.loginlist); loginList.setOnItemClickListener(this); webLogin = (Button) findViewById(R.id.button3); webLogin.setOnClickListener(this); } @Override public void onClick (View v) { Intent webLoginIntent = new Intent (this, LoginPlusActivity.class); startActivity(webLoginIntent); } public List<String> populateList (){ List<String> webNameList = new ArrayList<String>(); dataStore openHelperClass = new dataStore (this); SQLiteDatabase sqliteDatabase = openHelperClass.getReadableDatabase(); Cursor cursor = sqliteDatabase.query(dataStore.TABLE_NAME_INFOTABLE, null, null, null, null, null, dataStore.COLUMN_NAME_SITE, null); startManagingCursor(cursor); while (cursor.moveToNext()){ String sName = cursor.getString(cursor.getColumnIndex(dataStore.COLUMN_NAME_SITE)); String wUrl = cursor.getString(cursor.getColumnIndex(dataStore.COLUMN_NAME_ADDRESS)); String uName = cursor.getString(cursor.getColumnIndex(dataStore.COLUMN_NAME_USERNAME)); String pWord = cursor.getString(cursor.getColumnIndex(dataStore.COLUMN_NAME_PASSWORD)); String lNotes = cursor.getString(cursor.getColumnIndex(dataStore.COLUMN_NAME_NOTES)); LoginDetails lpDetails = new LoginDetails(); lpDetails.setsName(sName); lpDetails.setwUrl(wUrl); lpDetails.setuName(uName); lpDetails.setpWord(pWord); lpDetails.setlNotes(lNotes); loginArrayList.add(lpDetails); webNameList.add(sName); } sqliteDatabase.close(); return webNameList; } @Override protected void onResume() { super.onResume(); loginArrayList.clear(); arrayList.clear(); arrayList = populateList(); dataStore refreshHelper = new dataStore (this); SQLiteDatabase sqliteDatabase = refreshHelper.getWritableDatabase(); Cursor cursor = sqliteDatabase.query(dataStore.TABLE_NAME_INFOTABLE, null, null, null, null, null, dataStore.COLUMN_NAME_SITE, null); String[]columns = new String[] { dataStore.COLUMN_NAME_SITE, dataStore.COLUMN_NAME_ADDRESS, dataStore.COLUMN_NAME_USERNAME, dataStore.COLUMN_NAME_PASSWORD, dataStore.COLUMN_NAME_NOTES }; int[] to = new int[]{R.id.rusName, R.id.ruwUrl, R.id.ruuName, R.id.rupWord, R.id.ruNotes}; SimpleCursorAdapter loginListAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cursor, columns, to); loginListAdapter.notifyDataSetChanged(); } @Override public void onItemClick(AdapterView<?> arg0 , View arg1, int arg2, long arg3) { Toast.makeText(getApplicationContext(), "Selected ID :" + arg2, Toast.LENGTH_SHORT).show(); Intent updateDeleteLoginInfo = new Intent (this, UpdateDeleteLoginList.class); LoginDetails clickedObject = loginArrayList.get(arg2); Bundle loginBundle = new Bundle(); loginBundle.putString("clickedWebSite",clickedObject.getsName()); loginBundle.putString("clickedWebAddress",clickedObject.getwUrl()); loginBundle.putString("clickedUserName",clickedObject.getuName()); loginBundle.putString("clickedPassWord",clickedObject.getpWord()); loginBundle.putString("clickedNotes",clickedObject.getlNotes()); updateDeleteLoginInfo.putExtras(loginBundle); startActivityForResult(updateDeleteLoginInfo, 0); } }
RennoDiniro EditResultados:
Logcat:
02-21 23:40:18.419: E/AndroidRuntime(705): FATAL EXCEPTION: main 02-21 23:40:18.419: E/AndroidRuntime(705): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.loginplus.home/com.loginplus.home.LoginList}: java.lang.NullPointerException 02-21 23:40:18.419: E/AndroidRuntime(705): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 02-21 23:40:18.419: E/AndroidRuntime(705): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 02-21 23:40:18.419: E/AndroidRuntime(705): at android.app.ActivityThread.access$600(ActivityThread.java:123) 02-21 23:40:18.419: E/AndroidRuntime(705): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 02-21 23:40:18.419: E/AndroidRuntime(705): at android.os.Handler.dispatchMessage(Handler.java:99) 02-21 23:40:18.419: E/AndroidRuntime(705): at android.os.Looper.loop(Looper.java:137) 02-21 23:40:18.419: E/AndroidRuntime(705): at android.app.ActivityThread.main(ActivityThread.java:4424) 02-21 23:40:18.419: E/AndroidRuntime(705): at java.lang.reflect.Method.invokeNative(Native Method) 02-21 23:40:18.419: E/AndroidRuntime(705): at java.lang.reflect.Method.invoke(Method.java:511) 02-21 23:40:18.419: E/AndroidRuntime(705): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 02-21 23:40:18.419: E/AndroidRuntime(705): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 02-21 23:40:18.419: E/AndroidRuntime(705): at dalvik.system.NativeStart.main(Native Method) 02-21 23:40:18.419: E/AndroidRuntime(705): Caused by: java.lang.NullPointerException 02-21 23:40:18.419: E/AndroidRuntime(705): at com.loginplus.home.LoginList.populateList(LoginList.java:88) 02-21 23:40:18.419: E/AndroidRuntime(705): at com.loginplus.home.LoginList.onCreate(LoginList.java:37) 02-21 23:40:18.419: E/AndroidRuntime(705): at android.app.Activity.performCreate(Activity.java:4465) 02-21 23:40:18.419: E/AndroidRuntime(705): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 02-21 23:40:18.419: E/AndroidRuntime(705): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
Clase de actividad:
public class LoginList extends Activity implements OnClickListener, OnItemClickListener { private ListView loginList; private Button webLogin; private ListAdapter loginListAdapter; private ArrayList<LoginDetails> loginArrayList; List<String> arrayList = new ArrayList<String>(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); loginListAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, populateList()); arrayList = populateList(); setContentView(R.layout.login_listview); loginList = (ListView) findViewById(R.id.loginlist); loginList.setOnItemClickListener(this); webLogin = (Button) findViewById(R.id.button3); webLogin.setOnClickListener(this); } @Override public void onClick (View v) { Intent webLoginIntent = new Intent (this, LoginPlusActivity.class); startActivity(webLoginIntent); } public List<String> populateList (){ List<String> webNameList = new ArrayList<String>(); dataStore openHelperClass = new dataStore (this); SQLiteDatabase sqliteDatabase = openHelperClass.getReadableDatabase(); Cursor cursor = sqliteDatabase.query(dataStore.TABLE_NAME_INFOTABLE, null, null, null, null, null, dataStore.COLUMN_NAME_SITE, null); startManagingCursor(cursor); while (cursor.moveToNext()){ String sName = cursor.getString(cursor.getColumnIndex(dataStore.COLUMN_NAME_SITE)); String wUrl = cursor.getString(cursor.getColumnIndex(dataStore.COLUMN_NAME_ADDRESS)); String uName = cursor.getString(cursor.getColumnIndex(dataStore.COLUMN_NAME_USERNAME)); String pWord = cursor.getString(cursor.getColumnIndex(dataStore.COLUMN_NAME_PASSWORD)); String lNotes = cursor.getString(cursor.getColumnIndex(dataStore.COLUMN_NAME_NOTES)); LoginDetails lpDetails = new LoginDetails(); lpDetails.setsName(sName); lpDetails.setwUrl(wUrl); lpDetails.setuName(uName); lpDetails.setpWord(pWord); lpDetails.setlNotes(lNotes); loginArrayList.add(lpDetails); webNameList.add(sName); } sqliteDatabase.close(); return webNameList; } @Override protected void onResume() { super.onResume(); try{ loginArrayList = new ArrayList<LoginDetails>(); arrayList = new ArrayList<String>(); loginArrayList.clear(); arrayList.clear(); arrayList = populateList(); dataStore refreshHelper = new dataStore (this); SQLiteDatabase sqliteDatabase = refreshHelper.getWritableDatabase(); Cursor cursor = sqliteDatabase.query(dataStore.TABLE_NAME_INFOTABLE, null, null, null, null, null, dataStore.COLUMN_NAME_SITE, null); String[]columns = new String[] { dataStore.COLUMN_NAME_SITE, dataStore.COLUMN_NAME_ADDRESS, dataStore.COLUMN_NAME_USERNAME, dataStore.COLUMN_NAME_PASSWORD, dataStore.COLUMN_NAME_NOTES }; int[] to = new int[]{R.id.rusName, R.id.ruwUrl, R.id.ruuName, R.id.rupWord, R.id.ruNotes}; SimpleCursorAdapter loginListAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cursor, columns, to); loginListAdapter.notifyDataSetChanged(); }catch(Exception e) { e.printStackTrace(); } } @Override public void onItemClick(AdapterView<?> arg0 , View arg1, int arg2, long arg3) { Toast.makeText(getApplicationContext(), "Selected ID :" + arg2, Toast.LENGTH_SHORT).show(); Intent updateDeleteLoginInfo = new Intent (this, UpdateDeleteLoginList.class); LoginDetails clickedObject = loginArrayList.get(arg2); Bundle loginBundle = new Bundle(); loginBundle.putString("clickedWebSite",clickedObject.getsName()); loginBundle.putString("clickedWebAddress",clickedObject.getwUrl()); loginBundle.putString("clickedUserName",clickedObject.getuName()); loginBundle.putString("clickedPassWord",clickedObject.getpWord()); loginBundle.putString("clickedNotes",clickedObject.getlNotes()); updateDeleteLoginInfo.putExtras(loginBundle); startActivityForResult(updateDeleteLoginInfo, 0); } }
- SimpleCursorAdapter con ImageView y TextView
- ¿Usando SimpleCursorAdapter con Spinner?
- Android listview item altura
- ListView vacío si SimpleCursorAdapter cerrado ()
- Android, usando SimpleCursorAdapter para establecer el color no sólo las cadenas
- Android: ¿Cómo Requerir un Cursor para actualizar ListView después de eliminar la fila de la base de datos?
- SimpleCursorAdapter vs CursorAdapter?
- ¿Cómo insertar elementos adicionales en un SimpleCursorAdapter o Cursor para un Spinner?
Cree el adaptador usando el cursor que señala a los datos deseados así como la información de la disposición.
SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cursor, columns, to);
En su caso como ur utilizando R.layout.simple_list_item_1
columns
serán null
o Particular column data which you get from cursor
Será android.R.id.text1
Por ejemplo
Cursor cursor = getContentResolver().query(People.CONTENT_URI, new String[]{People._ID, People.NAME, People.NUMBER}, null, null, null); startManagingCursor(cursor); // THE DESIRED COLUMNS TO BE BOUND String[] columns = new String[] { People.NAME, People.NUMBER }; // THE XML DEFINED VIEWS WHICH THE DATA WILL BE BOUND TO int[] to = new int[] { R.id.name_entry, R.id.number_entry }; SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this,R.layout.list_example_entry, cursor, columns, to);
Obviamente no se inicializa ArrayList. Pero .. para su caso considere el uso de un cargador en su lugar. Hay ejemplos completos en ApiDemos (listados en la parte inferior de la página de Loader ).
Nota , Youre nunca instantiating loginArrayList
, por lo tanto, cuando intenta acceder a ella dentro de su onResume()
, es nulo, por lo tanto, se bloquea. Instantiate que antes de acceder a ella.
ACTUALIZACIÓN 22/02/2013:
Ahh, se le olvidó instanciar el loginArrayList
para cuando la aplicación se ejecuta al principio.
En su onCreate()
, coloque el siguiente código justo después de la super.OnCreate(...)
loginArrayList = new ArrayList<LoginDetails>();
Así que parece:
loginArrayList = new ArrayList<LoginDetails>(); loginListAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,populateList()); arrayList = populateList(); setContentView(R.layout.login_listview); //rest of your code...
Un ajuste rápido para que su aplicación se ejecute es el siguiente, pero tenga en cuenta que para solucionar todo este problema se necesitará un análisis más profundo de qué información se está perdiendo durante toda la pausa y reanudación.
Dentro de su onResume()
, haga
try{ // your code }catch(Exception e) { //Have the printStackTrace to the problems see what's going on without crashing. //e.printStackTrace(); }
Pero esto no soluciona el problema todavía,
En onResume()
. Haz lo siguiente:
- Cuando obtenga los datos por primera vez, guárdelos en la base de datos.
- En el onResume () recrear la lista y actualizar con los datos almacenados en la base de datos.
Así que para empezar
@Override protected void onResume() { super.onResume(); loginArrayList = new ArrayList<LoginDetails>(); arrayList = new ArrayList<String>(); arrayList = populateList(); // any other code you require to be done after the list is populated. }
Buena suerte.
Parece que el cursor es nulo, una manera rápida de arreglar esto y obtener su aplicación en ejecución es cambiar:
SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cursor,null,null); mAdapter.notifyDataSetChanged();
a
if (cursor != null) { SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cursor,null,null); mAdapter.notifyDataSetChanged(); }
De lo contrario, parece que su cursor puede ser nulo y podría estar consultando con la proyección equivocada.
Es necesario proporcionar la asignación de nombres de columna a identificadores de recursos en el constructor SimpleCursorAdapter – los parámetros from
y to
, para los que está pasando null.
El problema es el cursor administrado –
startManagingCursor(cursor);
Trate de mantener el cursor usted mismo en lugar de utilizar el cursor de 'actividad gestionada' que está obsoleto.
Dirijo exactamente el mismo problema hace 2 días con las llamadas de onResume después de manejar un cursor.
Nunca inicializas loginArrayList
(y por lo tanto es null
).
- Alinear el texto del elemento del menú del centro en android
- Dónde encontrar las versiones antiguas de android ndk