2016-11-07 43 views
3

我想从Android中的SQLite数据库加载数据并将其值设置为ListView。问题是,当我在OnCreate中加载数据时,它不会显示任何内容,但是当我刷新应用程序时,它会显示数据。从SQLite数据库加载数据到ListView

请帮我解决这个问题!

负载任务的代码:

public void loadTasks() { 

    Cursor c = notesDb.rawQuery("SELECT * FROM notes", null); 
    int titleIndex = c.getColumnIndex("title"); 
    int contentIndex = c.getColumnIndex("content"); 
    int dateIndex = c.getColumnIndex("date"); 
    int idIndex = c.getColumnIndex("object"); 
    if (c.moveToFirst()) { 
     if (!titles.isEmpty()) { 
      titles.clear(); 
     } 
     if (!content.isEmpty()) { 
      content.clear(); 
     } 
     if (!dates.isEmpty()) { 
      dates.clear(); 
     } 
     if (!objectId.isEmpty()) { 
      objectId.clear(); 
     } 

     do { 
      titles.add(c.getString(titleIndex)); 
      content.add(c.getString(contentIndex)); 
      dates.add(c.getString(dateIndex)); 
      objectId.add(c.getString(idIndex)); 

      Log.i("Title", c.getString(titleIndex)); 
      Log.i("Content", c.getString(contentIndex)); 
      Log.i("Date", c.getString(dateIndex)); 
      Log.i("Id", c.getString(idIndex)); 

     } while (c.moveToNext()); 

     tasksList.setAdapter(customAdapter); 
     loadingBar.setVisibility(View.INVISIBLE); 

    } else { 

     if (titles.size() > 0 || content.size() > 0) { 
      tasksList.setAdapter(customAdapter); 
      loadingBar.setVisibility(View.INVISIBLE); 
     } else { 
      titles.add("Welcome To App !"); 
      content.add("Start taking notes by clicking the add button below !"); 

      final Calendar c1 = Calendar.getInstance(); 
      final String monthName = new SimpleDateFormat("MMMM").format(c1.getTime()); 
      dates.add(String.valueOf(monthName + " " + c1.get(Calendar.DAY_OF_MONTH)) + " " + c1.get(Calendar.YEAR)); 
      objectId.add("randomId"); 
      tasksList.setAdapter(customAdapter); 
      loadingBar.setVisibility(View.INVISIBLE); 
     } 
    } 
} 

的OnCreate代码

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_dolt); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    loadTasks(); 

传递数据的OnCreate到适配器:

customAdapter = new CustomAdapter(DoltActivity.this, titles, content, dates); 

定制适配器代码:

public class CustomAdapter extends BaseAdapter{ 

ArrayList<String> title; 
ArrayList<String> contents; 
ArrayList<String> dates; 
Context context; 
private static LayoutInflater inflater=null; 
public CustomAdapter(DoltActivity mainActivity, ArrayList<String> titles, ArrayList<String> content, ArrayList<String> date) { 
    // TODO Auto-generated constructor stub 
    title=titles; 
    contents=content; 
    dates=date; 
    context=mainActivity; 
    inflater = (LayoutInflater)context. 
      getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 
@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return title.size(); 
} 

@Override 
public Object getItem(int position) { 
    // TODO Auto-generated method stub 
    return position; 
} 

@Override 
public long getItemId(int position) { 
    // TODO Auto-generated method stub 
    return position; 
} 

@Override 
public int getItemViewType(int position) { 
    return CustomAdapter.IGNORE_ITEM_VIEW_TYPE; 
} 

public static class Holder 
{ 
    TextView tv; 
    TextView content; 
    TextView date; 
} 
@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 
    Holder holder = new Holder(); 
    View rowView = null; 

    rowView = inflater.inflate(R.layout.custom_row, null); 

    holder.tv = (TextView) rowView.findViewById(R.id.textView10); 
    holder.content = (TextView) rowView.findViewById(R.id.textView3); 
    holder.date = (TextView) rowView.findViewById(R.id.textView4); 

    holder.tv.setText(title.get(position)); 
    holder.content.setText(contents.get(position)); 
    holder.date.setText(dates.get(position)); 

    rowView.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      DoltActivity.tapped = true; 
      DoltActivity.id = position; 
      Log.i("Position", String.valueOf(position)); 

      } 
     }); 

    rowView.setOnLongClickListener(new View.OnLongClickListener() { 
     @Override 
     public boolean onLongClick(View view) { 

      DoltActivity.longTapped = true; 
      DoltActivity.id = position; 

      Log.i("Long ", "Tapped"); 

      return true; 
     } 
    }); 


    return rowView; 
} 

}

刷新代码:

swipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
     @Override 
     public void onRefresh() { 
       loadTasks();    
      swipeRefresh.setRefreshing(false); 
     } 
    }); 

提前感谢!

+0

哪里是你的customAdapter代码,以及如何通过你的光标customAdapter。 – shanyour

+0

@shanyour我也添加了这些代码!谢谢你通知我! –

回答

2

试试这个,

初始化您customAdapterloadTask()内将其设置为ListView控件之前,即前

customAdapter = new CustomAdapter(getActivity(), titles, content, dates); 
tasksList.setAdapter(customAdapter); 

有看起来像你的代码的逻辑数据流错误,初始化customAdapter在拨打loadTask()但在loadTask()之内后,您正在使用该对象,但未使用标题的更新列表对其进行初始化,内容日期

+0

谢谢!它现在有效 –

0

更新阵列后创建适配器。移动你行:

customAdapter = new CustomAdapter(DoltActivity.this, titles, content, dates); 

是前:

tasksList.setAdapter(customAdapter); 

也,可以在下面的代码移动到外面你如果只是删除代码重复。您loadTask功能如下:

public void loadTasks() { 

Cursor c = notesDb.rawQuery("SELECT * FROM notes", null); 
int titleIndex = c.getColumnIndex("title"); 
int contentIndex = c.getColumnIndex("content"); 
int dateIndex = c.getColumnIndex("date"); 
int idIndex = c.getColumnIndex("object"); 
if (c.moveToFirst()) { 
    if (!titles.isEmpty()) { 
     titles.clear(); 
    } 
    if (!content.isEmpty()) { 
     content.clear(); 
    } 
    if (!dates.isEmpty()) { 
     dates.clear(); 
    } 
    if (!objectId.isEmpty()) { 
     objectId.clear(); 
    } 

    do { 
     titles.add(c.getString(titleIndex)); 
     content.add(c.getString(contentIndex)); 
     dates.add(c.getString(dateIndex)); 
     objectId.add(c.getString(idIndex)); 

     Log.i("Title", c.getString(titleIndex)); 
     Log.i("Content", c.getString(contentIndex)); 
     Log.i("Date", c.getString(dateIndex)); 
     Log.i("Id", c.getString(idIndex)); 

    } while (c.moveToNext()); 

} else { 

    if (titles.size() > 0 || content.size() > 0) { 

    } else { 
     titles.add("Welcome To App !"); 
     content.add("Start taking notes by clicking the add button below !"); 

     final Calendar c1 = Calendar.getInstance(); 
     final String monthName = new SimpleDateFormat("MMMM").format(c1.getTime()); 
     dates.add(String.valueOf(monthName + " " + c1.get(Calendar.DAY_OF_MONTH)) + " " + c1.get(Calendar.YEAR)); 
     objectId.add("randomId"); 

    } 
} 

customAdapter = new CustomAdapter(DoltActivity.this, titles, content, dates); 
tasksList.setAdapter(customAdapter); 
loadingBar.setVisibility(View.INVISIBLE); 

}