7

मैं नौसिखिया हूं और अपने SQLite डीबी अद्यतन होने के बाद रीफ्रेश करने के लिए अपने ListView को अनुमति देने का प्रयास कर रहा हूं। मेरे onResume() विधि को संशोधित करने के बाद मुझे संकलन त्रुटि प्राप्त नहीं हो रही है। मैं आवश्यकता के लिए SimpleCursorAdapter का उपयोग कर रहा हूं लेकिन यह काम नहीं कर रहा है। प्राप्त त्रुटि logcat से था और नीचे है। कृपया सलाह दें ... उदाहरण सर्वोत्तम मदद करते हैं।गतिविधि को फिर से शुरू करने में असमर्थ

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) 

गतिविधि:

 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) 

गतिविधि वर्ग:

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

आपका ऑनपोज़() कहां है? –

+0

आपकी लाइन रीज़्यूम विधि – Nickolaus

+0

में कौन सी पंक्ति 101 है कोई ऑनऑज़() सर्जरी – user1165694

उत्तर

0

ऐसा लगता है कि कर्सर रिक्त है, एक त्वरित तरीका है इसे ठीक करें और अपने अनुप्रयोग चलाने के लिए बदलने के लिए है:

SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cursor,null,null); 
mAdapter.notifyDataSetChanged(); 

if (cursor != null) { 
    SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cursor,null,null); 
    mAdapter.notifyDataSetChanged(); 
} 

अन्यथा करने के लिए, यह अपने कर्सर की तरह लगता है शून्य हो सकता है और आप गलत प्रक्षेपण के साथ पूछताछ कर सकते हैं।

+0

आपके सुझावों का उपयोग करने के बाद ही त्रुटि प्राप्त होती है। 02-12 14: 48: 38.904: ई/एंड्रॉइड रनटाइम (646): इसके कारण: java.lang.NullPointerException 02-12 14: 48: 38.904: ई/एंड्रॉइड रनटाइम (646): \t android.widget.SimpleCursorAdapter.findColumns पर (SimpleCursorAdapter.java:327) 02-12 14:48:38।904: ई/एंड्रॉइड रनटाइम (646): \t android.widget.SimpleCursorAdapter पर। (SimpleCursorAdapter.java:81) 02-12 14: 48: 38.904: ई/एंड्रॉइड रनटाइम (646): \t com.loginplus.home.LoginList.onResume (LoginList.java:105) 02-12 14:48 : 38.904: ई/एंड्रॉइड रनटाइम (646): – user1165694

0

आपको सरल कर्सर एडाप्टर कन्स्ट्रक्टर - from और to पैरामीटर में कॉलम नामों से संसाधन आईडी में मैपिंग की आपूर्ति करने की आवश्यकता है, जिसके लिए आप शून्य से गुज़र रहे हैं।

3

इच्छित डेटा के साथ-साथ लेआउट जानकारी को इंगित करने वाले कर्सर का उपयोग करके एडाप्टर बनाएं।

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

आपके मामले में के रूप में यू R.layout.simple_list_item_1

columns का उपयोग कर रहे आर होगा null या Particular column data which you get from cursor

toandroid.R.id.text1


उदा के लिए किया जाएगा

startManagingCursor(cursor); 

कर्सर खुद को बनाए रखने के बजाय का उपयोग कर की गतिविधि में कामयाब 'कर्सर जो अनुचित बताया गया है की कोशिश करो -

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

सिफारिशों के लिए धन्यवाद। मैंने उन्हें लागू किया है और अब एक nullPointerException प्राप्त करते हैं। कृपया संशोधित कोड देखें। – user1165694

0

समस्या कामयाब कर्सर है।

मैं कर्सर के प्रबंधन के बाद 2 दिनों पहले सटीक समस्या का सामना करता हूं।

0

आपने कभी भी loginArrayList प्रारंभ नहीं किया (और इसलिए यह null है)।

+0

प्रारंभिक लॉगिनअरेरेलिस्ट के साथ: ArrayList loginArrayList = नया ArrayList (); ......... अब लॉगकैट त्रुटि प्राप्त करें: 02-19 22: 47: 2 9 .3636: ई/एंड्रॉइड रनटाइम (1160): इसके कारण: java.lang.NullPointerException 02-19 22: 47: 29.336: ई/एंड्रॉइड रनटाइम (1160): \t com.loginplus.home.LoginList.populateList (LoginList.java:87) ... लाइन 87 loginArrayList.add (lpDetails) है; – user1165694

+0

@ user1165694 लाइन 87 से पहले इसे आज़माएं: 'if (loginArrayList == null) {Log.d (" test "," loginArrayList NULL ");} else {if (lpDetails == null) {Log.d (" test "," lpDetails पूर्ण है ");}}'। तब लॉगकैट प्रिंट क्या करता है? – Phil

+0

जब मैं इस कोड को लाइन 87 से ऊपर जोड़ता हूं, तो मुझे {Log.d ("test", "lpDetails पूर्ण है") के तहत एक पीला रेखा प्राप्त होती है;}} जो कहती है: मृत कोड ?? – user1165694

1

नोट, तू कभी नहीं loginArrayList instantiating, इसलिए जब आप अपने onResume() भीतर पहुँच की कोशिश, यह शून्य है, इस प्रकार दुर्घटनाओं है। इसे एक्सेस करने से पहले तत्काल करें।

अद्यतन 22/02/2013:

आह, आप जब आवेदन पहली बार में चलाता है के लिए loginArrayList का दृष्टांत भूल गया।

अपने onCreate() में, बस के बाद super.OnCreate(...)

loginArrayList = new ArrayList<LoginDetails>(); 

निम्नलिखित कोड जगह तो ऐसा लगता है कि:,

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

एक त्वरित समायोजन अपने अनुप्रयोग का प्रदर्शन शुरू करने के लिए निम्नलिखित है लेकिन ध्यान दें कि इस पूरी समस्या को ठीक करने के लिए पूरे विराम और पुन: शुरू होने के दौरान कौन सी जानकारी खो जा रही है, इसके गहराई से विश्लेषण की आवश्यकता होगी।

अपने onResume() के भीतर,

try{ 

// your code 

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

करते लेकिन यह अभी तक समस्या हल नहीं होती,

onResume() में। निम्न कार्य करें:

  • जब आप पहली बार डेटा प्राप्त करते हैं, तो इसे डेटाबेस में संग्रहीत करें।
  • ऑनर्यूम() में सूची को फिर से बनाएं और डेटाबेस के भीतर संग्रहीत डेटा के साथ इसे अपडेट करें।

तो तुम बंद

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

गुड लक शुरू करने के लिए।

+0

मैंने लॉग कोड त्रुटियों के साथ उपरोक्त अपने परिवर्तनों के साथ अपना कोड जोड़ा है – user1165694

+0

कहां? मुझे नहीं लगता कि आपने इसे अपडेट किया है क्योंकि सवाल पुराने कोड के साथ दिखता है ... – rennoDeniro

+0

ने संपादन टूल का उपयोग कर अपने पोस्ट में अपना संशोधित कोड जोड़ा लेकिन कुछ भी दिखाई नहीं दे रहा है। अब मेरी पोस्ट में सब कुछ जोड़ा है। लाइन 88: loginArrayList.add (lpDetails) है; और लाइन 37: loginListAdapter = नया ArrayAdapter (यह, android.R.layout.simple_list_item_1, populateList()) है; – user1165694

3

जाहिर है आप ArrayList प्रारंभ नहीं करते हैं। लेकिन .. आपके मामले के लिए Loader का उपयोग करने पर विचार करें। ApiDemos में पूर्ण उदाहरण हैं (Loader पृष्ठ के नीचे सूचीबद्ध)।

संबंधित मुद्दे