7

Tôi là người mới và cố gắng cho phép ListView làm mới sau khi DB SQLite của tôi được cập nhật. Tôi không nhận được lỗi biên dịch sau khi tôi sửa đổi phương thức onResume() của mình. Tôi đang sử dụng số SimpleCursorAdapter để yêu cầu nhưng không hoạt động. Lỗi nhận được là từ logcat và dưới đây. Xin vui lòng tư vấn cho ... ví dụ giúp đỡ tốt nhất.Không thể tiếp tục hoạt động

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) 

Hoạt động:

 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) 

Hoạt động Class:

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

nơi onPause của bạn()? –

+0

dòng nào là 101 trong phương thức onResume của bạn – Nickolaus

+0

Không onPause() Sergry – user1165694

Trả lời

0

Dường như con trỏ là null, một cách nhanh chóng để khắc phục điều này và nhận được ứng dụng đang chạy của bạn là để thay đổi:

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

Nếu không, nó có vẻ như con trỏ của bạn có thể là null và bạn có thể truy vấn sai chiếu.

+0

nhận được lỗi tương tự sau khi sử dụng đề xuất của bạn. 02-12 14: 48: 38.904: E/AndroidRuntime (646): Gây ra bởi: java.lang.NullPointerException 02-12 14: 48: 38.904: E/AndroidRuntime (646): \t tại android.widget.SimpleCursorAdapter.findColumns (SimpleCursorAdapter.java:327) 02-12 14:48:38.904: E/AndroidRuntime (646): \t tại android.widget.SimpleCursorAdapter. (SimpleCursorAdapter.java:81) 02-12 14: 48: 38.904: E/AndroidRuntime (646): \t tại com.loginplus.home.LoginList.onResume (LoginList.java:105) 02-12 14:48 : 38.904: E/AndroidRuntime (646): – user1165694

0

Bạn cần cung cấp ánh xạ từ tên cột đến id tài nguyên trong hàm tạo SimpleCursorAdapter - tham số fromto, mà bạn đang bỏ qua null.

3

Tạo bộ điều hợp bằng cách sử dụng con trỏ trỏ đến dữ liệu mong muốn cũng như thông tin bố cục.

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

Trong trường hợp của bạn như u r sử dụng R.layout.simple_list_item_1

columns sẽ null hoặc Particular column data which you get from cursor

to sẽ android.R.id.text1


Đối với ví dụ

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

cảm ơn các đề xuất. Tôi đã thực hiện chúng và bây giờ nhận được một nullPointerException. xin vui lòng xem mã sửa đổi. – user1165694

0

Vấn đề là con trỏ quản lý -

startManagingCursor(cursor); 

Cố gắng duy trì con trỏ chính mình thay vì sử dụng 'hoạt động quản lý' con trỏ mà bị phản đối.

Tôi cũng gặp vấn đề tương tự chính xác 2 ngày trước với cuộc gọi onResume sau khi quản lý con trỏ.

0

Bạn không bao giờ khởi tạo loginArrayList (và do đó nó là null).

+0

initialized loginArrayList với: ArrayList loginArrayList = new ArrayList (); ......... bây giờ nhận được lỗi logcat: 02-19 22: 47: 29.336: E/AndroidRuntime (1160): Gây ra bởi: java.lang.NullPointerException 02-19 22: 47: 29.336: E/AndroidRuntime (1160): \t tại com.loginplus.home.LoginList.populateList (LoginList.java:87) ... dòng 87 là loginArrayList.add (lpDetails); – user1165694

+0

@ user1165694 Hãy thử điều này trước dòng 87: 'if (loginArrayList == null) {Log.d (" test "," loginArrayList is NULL ");} else {if (lpDetails == null) {Log.d (" test "," lpDetails là NULL ");}}'. Những gì hiện các bản ghi logcat sau đó? – Phil

+0

khi tôi thêm mã này trên dòng 87, tôi nhận được một dòng màu vàng dưới {Log.d ("test", "lpDetails is NULL");}} có nội dung: Dead Code ?? – user1165694

1

Lưu ý, Bạn không bao giờ instantiating loginArrayList, do đó khi bạn thử truy cập trong số onResume(), nó là rỗng, do đó bị treo. Khởi tạo trước khi truy cập nó.

CẬP NHẬT 22/02/2013:

Ahh, bạn quên để nhanh chóng loginArrayList khi ứng dụng chạy lúc đầu.

Trong onCreate() của bạn, đặt đoạn mã sau ngay sau super.OnCreate(...)

loginArrayList = new ArrayList<LoginDetails>(); 

Vì vậy, nó trông giống như:

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

Một điều chỉnh nhanh chóng để có được ứng dụng đang chạy của bạn như sau, nhưng lưu ý rằng để bạn khắc phục toàn bộ vấn đề này sẽ yêu cầu phân tích sâu hơn về thông tin nào bị mất trong toàn bộ quá trình tạm dừng và tiếp tục.

Trong onResume() của bạn, làm

try{ 

// your code 

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

Nhưng điều này không giải quyết vấn đề được nêu ra,

Trong onResume(). Thực hiện như sau:

  • Khi bạn lần đầu tiên lấy dữ liệu, lưu trữ dữ liệu vào cơ sở dữ liệu.
  • Trong onResume() tạo lại danh sách và cập nhật nó với dữ liệu được lưu trữ trong cơ sở dữ liệu.

Vì vậy, để bạn bắt đầu

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

Chúc may mắn.

+0

Tôi đã thêm mã của mình cùng với các thay đổi ở trên cùng với lỗi logcat – user1165694

+0

Ở đâu? Tôi không nghĩ rằng bạn đã cập nhật nó vì câu hỏi có vẻ giống với mã cũ của mình ... – rennoDeniro

+0

đã thêm mã được sửa đổi của tôi vào bài đăng của bạn bằng cách sử dụng công cụ chỉnh sửa nhưng không có gì hiển thị. Bây giờ đã thêm mọi thứ vào bài đăng của tôi. dòng 88: là loginArrayList.add (lpDetails); và dòng 37: là loginListAdapter = new ArrayAdapter (điều này, android.R.layout.simple_list_item_1, populateList()); – user1165694

3

Rõ ràng là bạn không khởi tạo ArrayList. Nhưng .. cho trường hợp của bạn, hãy xem xét sử dụng một số Loader để thay thế. Có các ví dụ hoàn chỉnh trong ApiDemos (được liệt kê ở cuối trang Loader).

Các vấn đề liên quan