2

У меня есть программа с заполнением listview от SQLLiteDB. Начальная загрузка работает, но когда я редактирую запись, программа вылетает и simplecursorAdapter = null.Обновить Listview simpleCursorAdapter всегда null

Обломок:

public class TaskListFragment extends ListFragment 
{ 
DBHelper dbHelper; 
SimpleCursorAdapter simpleCursorAdapter; 
Cursor cursor; 
ListView listView; 
static final int UPDATE_TASK = 1; 
String[] from = {dbHelper.COL_2,dbHelper.COL_3}; 
int[] to = new int[]{R.id.taskName , R.id.taskDescription}; 


public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    View rootView = inflater.inflate(R.layout.tasklistlayout, container, false); 

    listView = (ListView)rootView.findViewById(android.R.id.list); 

    setRetainInstance(true); 
    return rootView; 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) 
{ 
    super.onActivityCreated(savedInstanceState); 
    dbHelper = new DBHelper(getActivity()); 
    prepareCursor(); 
} 

public void prepareCursor() 
{ 
    new Handler().post(new Runnable() 
    { 
     @Override 
     public void run() 
     { 
      cursor = dbHelper.getTasksForListView(); 
      simpleCursorAdapter = new SimpleCursorAdapter (getActivity(),R.layout.taskrowlayout,cursor,from,to,0); 
      fillList(); 
     } 
    }); 
} 

public void updateList() 
{ 
    simpleCursorAdapter.notifyDataSetChanged(); 
    fillList(); 
} 

public void fillList() 
{ 
    setListAdapter(simpleCursorAdapter); 
} 

@Override 
public void onListItemClick(ListView l, View v, int position, long id) 
{ 
    Intent intent = new Intent(getActivity().getApplicationContext(), TaskInformation.class); 
    intent.putExtra("taskId", cursor.getInt(0)); 
    intent.putExtra("taskName", cursor.getString(1)); 
    intent.putExtra("taskDescription", cursor.getString(2)); 
    intent.putExtra("taskStartDate", cursor.getString(3)); 
    intent.putExtra("taskEndDate", cursor.getString(4)); 
    startActivityForResult(intent, UPDATE_TASK); 
} 
} 

Кусок кода в MainActivity Wich называет его:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
     if (resultCode == RESULT_OK) 
     { 
      taskListFragment.updateList(); 
     } 
} 

код в классе TaskInformation ведьмой работает, когда я нажимаю обновить

public void updateTask(View view) 
{ 
    task = new ArrayList<>(); 
    task.add(0,String.valueOf(currentTaskId)); 
    task.add(1,String.valueOf(taskName.getText())); 
    task.add(2,String.valueOf(taskDescription.getText())); 
    task.add(3,String.valueOf(startDate.getText())); 
    task.add(4,String.valueOf(endDate.getText())); 
    dbHelper.updateTask(task); 
    setResult(RESULT_OK, intent); 
    finish(); 
} 

Почему simpleCursorAdapter всегда NULL, когда я его обновляю? Я хочу обновить/перезагрузить listview, когда я его обновил.

EDIT ------------------------------

Я попробовал еще раз, но его по-прежнему нулевой запуск prepareCursor, Я не могу понять, почему :(

EDIT 2 --------------------------------

Я немного дальше, кажется, context мой adapter нужен ушел Fixed его обновления метод следующим образом:.

public void updateList(Context context) 
{ 

    simpleCursorAdapter = new SimpleCursorAdapter (context,R.layout.taskrowlayout,cursor,from,to,0); 
    simpleCursorAdapter.notifyDataSetChanged(); 
    fillList(); 
} 

Только на этот раз мой cursor пуст. При попытке пополнить его с помощью этого:

cursor = dbHelper.getTasksForListView(); 

Я получаю эту ошибку:

05-18 07:30:59.478 7323-7323/com.owlfinity.zeepblok.taskjournal E/AndroidRuntime: FATAL EXCEPTION: main 
                       Process: com.owlfinity.zeepblok.taskjournal, PID: 7323 
                       java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=65537, result=-1, data=Intent { cmp=com.owlfinity.zeepblok.taskjournal/.TaskInformation (has extras) }} to activity {com.owlfinity.zeepblok.taskjournal/com.owlfinity.zeepblok.taskjournal.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.Cursor com.owlfinity.zeepblok.taskjournal.DBHelper.getTasksForListView()' on a null object reference 
                        at android.app.ActivityThread.deliverResults(ActivityThread.java:3699) 
                        at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742) 
                        at android.app.ActivityThread.-wrap16(ActivityThread.java) 
                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393) 
                        at android.os.Handler.dispatchMessage(Handler.java:102) 
                        at android.os.Looper.loop(Looper.java:148) 
                        at android.app.ActivityThread.main(ActivityThread.java:5417) 
                        at java.lang.reflect.Method.invoke(Native Method) 
                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
                       Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.Cursor com.owlfinity.zeepblok.taskjournal.DBHelper.getTasksForListView()' on a null object reference 
                        at com.owlfinity.zeepblok.taskjournal.TaskListFragment.updateList(TaskListFragment.java:61) 
                        at com.owlfinity.zeepblok.taskjournal.MainActivity.onActivityResult(MainActivity.java:37) 
                        at android.app.Activity.dispatchActivityResult(Activity.java:6428) 
                        at android.app.ActivityThread.deliverResults(ActivityThread.java:3695) 
                        at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742)  
                        at android.app.ActivityThread.-wrap16(ActivityThread.java)  
                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393)  
                        at android.os.Handler.dispatchMessage(Handler.java:102)  
                        at android.os.Looper.loop(Looper.java:148)  
                        at android.app.ActivityThread.main(ActivityThread.java:5417)  
                        at java.lang.reflect.Method.invoke(Native Method)  
                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  

А вот метод getTaskForListView:

public Cursor getTasksForListView() 
{ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor result = db.rawQuery("SELECT * FROM " + TABLE_NAME,null); 
    return result; 
} 

EDIT 3 ------ ----------------

Ошибки пропали, но не обновлены ListView :(это код

public void updateList(Context context) 
{ 
    dbHelper = new DBHelper(context); 
    cursor = dbHelper.getTasksForListView(); 
    simpleCursorAdapter = new SimpleCursorAdapter (context,R.layout.taskrowlayout,cursor,from,to,0); 
    fillList(); 

} 

public void fillList() 
{ 
    dbHelper = new DBHelper(getActivity()); 
    setListAdapter(simpleCursorAdapter); 
} 

---- EDIT 4

Мой ListView пуст в методе обновления. Кажется, не может найти способ воссоздать его.

Я думаю, что проблема лежит в этой части кода:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    View rootView = inflater.inflate(R.layout.tasklistlayout, container, false); 
    listView = (ListView)rootView.findViewById(android.R.id.list); 
    setRetainInstance(false); 
    return rootView; 
} 

Как я могу повторно запустить этот кусок кода в методе обновления?

ответ

0

Нашел, у меня было несколько деятельности, которая использует onActivityResult и там отстроить cursor и list. объединил их в один, и он работает: D думаю, мое приложение было смущено, как с ним справиться.Найдено t, потому что код запроса, когда он вернулся, был номером, который я никогда не устанавливал.

1

Вам не нужно создавать новый обработчик. Вы должны просто использовать listView.post(Runnable)

+0

Изменено, thnx для указания этого. к сожалению, это не устраняет проблему :( – Zeepblok

 Смежные вопросы

  • Нет связанных вопросов^_^