7

Sono alle prime armi e cercando di permettere che il mio ListView per rinfrescarsi dopo il mio SQLite DB viene aggiornato. Non ricevo un errore di compilazione dopo aver rivisto il mio metodo onResume(). Sto usando un SimpleCursorAdapter a richiesta ma non funziona. L'errore ricevuto è stato da logcat ed è di seguito. Si prega di avvisare ... gli esempi aiutano meglio.Incapace di riprendere l'attività

Logcat:

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) 

attività:

 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 EditResults:

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) 

Classe di attività:

012.351.
 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); 
    } 
    } 
+0

dov'è il tuo onPause()? –

+0

quale linea è 101 nel tuo metodo onResume – Nickolaus

+0

No onPause() Sergry – user1165694

risposta

0

Sembra che il cursore è nullo, un modo rapido per risolvere questo problema e ottenere la vostra applicazione in esecuzione è quello di cambiare:

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(); 
} 

In caso contrario, sembra che il cursore può essere nullo e si potrebbe interrogare con la proiezione errata.

+0

si riceve lo stesso errore dopo aver utilizzato i tuoi suggerimenti. 02-12 14: 48: 38.904: E/AndroidRuntime (646): causato da: java.lang.NullPointerException 02-12 14: 48: 38.904: E/AndroidRuntime (646): \t su android.widget.SimpleCursorAdapter.findColumns (SimpleCursorAdapter.java:327) 02-12 14:48:38.904: E/AndroidRuntime (646): \t su android.widget.SimpleCursorAdapter. (SimpleCursorAdapter.java:81) 02-12 14: 48: 38.904: E/AndroidRuntime (646): \t su com.loginplus.home.LoginList.onResume (LoginList.java:105) 02-12 14:48 : 38.904: E/AndroidRuntime (646): – user1165694

0

È necessario fornire la mappatura dai nomi di colonna agli ID risorse nel costruttore SimpleCursorAdapter - i parametri from e to per i quali si sta passando null.

3

Creare l'adattatore utilizzando il cursore che punta ai dati desiderati, nonché le informazioni di layout.

SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cursor, columns, to); 

Nel tuo caso come u R mediante R.layout.simple_list_item_1

columns sarà null o Particular column data which you get from cursor

to sarà android.R.id.text1


Per esempio

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); 
+0

grazie per le raccomandazioni. Li ho implementati e ora ricevo una nullPointerException. si prega di consultare il codice revisionato. – user1165694

0

Il problema è il cursore gestito -

startManagingCursor(cursor); 

Prova mantenendo il cursore da soli invece di utilizzare il 'attività di gestione' del cursore che è deprecato.

Mi capita lo stesso identico problema 2 giorni fa con chiamate OnResume dopo aver gestito un cursore.

0

Non si inizializza mai loginArrayList (e quindi è null).

+0

loginArrayList inizializzato con: ArrayList loginArrayList = new ArrayList (); ......... ora viene visualizzato l'errore logcat: 02-19 22: 47: 29.336: E/AndroidRuntime (1160): causato da: java.lang.NullPointerException 02-19 22: 47: 29,336: E/AndroidRuntime (1160): \t in com.loginplus.home.LoginList.populateList (LoginList.java:87) ... la riga 87 è loginArrayList.add (lpDetails); – user1165694

+0

@ user1165694 Provatelo prima della riga 87: 'if (loginArrayList == null) {Log.d (" test "," loginArrayList è NULL ");} else {if (lpDetails == null) {Log.d (" test "," lpDetails è NULL ");}}'. Cosa stampa allora la logcat? – Phil

+0

quando aggiungo questo codice sopra la riga 87, ricevo una linea gialla sotto {Log.d ("test", "lpDetails è NULL");}} che dice: Codice Morto ?? – user1165694

1

Nota, Youre mai istanziare loginArrayList, quindi, quando si tenta l'accesso all'interno del tuo onResume(), è nullo, quindi si blocca. Istanziare ciò prima di accedervi.

AGGIORNAMENTO 22/02/2013:

Ahh, si è dimenticato di istanziare la loginArrayList per quando l'applicazione viene eseguita in un primo momento.

Nella tua onCreate(), inserire il seguente codice appena dopo la super.OnCreate(...)

loginArrayList = new ArrayList<LoginDetails>(); 

così sembra:

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... 

Una regolazione rapida per ottenere la vostra applicazione in esecuzione è la seguente, ma tieni presente che per risolvere l'intero problema sarà necessaria un'analisi più approfondita di quali informazioni vengono perse durante l'intera pausa e ripresa.

All'interno del vostro onResume(), fare

try{ 

// your code 

}catch(Exception e) 
{ 
//Have the printStackTrace to the problems see what's going on without crashing. 
//e.printStackTrace(); 
} 

Ma questo non è ancora risolvere il problema,

In onResume(). Effettuare quanto segue:

  • Quando si recuperano i dati per la prima volta, salvarli nel database.
  • Nel onResume() ricreare l'elenco e aggiornarlo con i dati memorizzati nel database.

Quindi, per iniziare si spegne

@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. 
} 

Buona fortuna.

+0

ho aggiunto il mio codice con le tue modifiche sopra insieme agli errori logcat – user1165694

+0

Dove? Non penso di averlo aggiornato poiché la domanda sembra la stessa con il vecchio codice ... – rennoDeniro

+0

aggiunto il mio codice rivisto al tuo post usando lo strumento di modifica ma non viene mostrato nulla. Ora ho aggiunto tutto al mio post. riga 88: loginArrayList.add (lpDetails); e line 37: is loginListAdapter = new ArrayAdapter (questo, android.R.layout.simple_list_item_1, populateList()); – user1165694

3

Ovviamente non si inizializza ArrayList. Ma .. per il tuo caso, considera l'utilizzo di un Loader invece. Esistono esempi completi in ApiDemos (elencati nella parte inferiore della pagina Loader).