Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 简单适配器无法更新数据库_Java_Android_Database_Android Sqlite_Simpleadapter - Fatal编程技术网

Java 简单适配器无法更新数据库

Java 简单适配器无法更新数据库,java,android,database,android-sqlite,simpleadapter,Java,Android,Database,Android Sqlite,Simpleadapter,嘿,伙计们,我用简单的适配器从我的数据库中创建了一个数据列表视图,但我不知道如何在每次数据库更改时更新它。有什么帮助吗?notifyDataSetChanged();这种方法行不通,我也不知道该怎么办 main活动 @覆盖 创建时的公共void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity\u general\u discussion); db=新的

嘿,伙计们,我用简单的适配器从我的数据库中创建了一个数据列表视图,但我不知道如何在每次数据库更改时更新它。有什么帮助吗?notifyDataSetChanged();这种方法行不通,我也不知道该怎么办

main活动

@覆盖
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u general\u discussion);
db=新的SQLiteHandler(此);
ArrayList emaillist=db.getMessage();
如果(emaillist.size()!=0){
ListAdapter=new SimpleAdapter(MainActivity.this,emaillist,
R.layout.raw_布局,
新字符串[]{“user_posted”、“post”、“posted_at”、“post_id”},新int[]{
R.id.text\u用户名、R.id.text\u用户名、R.id.text\u帖子、R.id.text\u用户名、R.id.text\u用户名});
setListAdapter(适配器);
}
帮助类

public ArrayList getMessage(){
ArrayList消息=新建ArrayList();
String selectQuery=“SELECT*FROM”+表格\过账;
SQLiteDatabase db=this.getReadableDatabase();
Cursor Cursor=db.rawQuery(selectQuery,null);
if(cursor.moveToFirst()){
做{
HashMap=newHashMap();
map.put(“post_id”,cursor.getString(0));
map.put(“user_posted”,cursor.getString(1));
map.put(“post”,cursor.getString(2));
map.put(“posted_at”,cursor.getString(3));
消息。添加(地图);
}while(cursor.moveToNext());
}
返回消息;
}

声明适配器并列出全局级别

class example{
ListAdapter adapter;
ArrayList<HashMap<String, String>> emaillist;

 @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_general_discussion);
    db = new SQLiteHandler(this);

    emaillist = db.getMessage();
    if (emaillist.size() != 0) {
         adapter = new SimpleAdapter(MainActivity.this, emaillist,
                R.layout.raw_layout,
                new String[]{"user_posted", "post", "posted_at", "post_id"}, new int[]{
                R.id.text_user_name, R.id.text_user_post, R.id.text_user_date, R.id.text_user_number});
        setListAdapter(adapter);

    }

将适配器声明为Public,只需调用
适配器。notifyDatasetChange();

无论何时何地,只要你想。这将更新


希望这能有所帮助。

我不认为有直接的方法来检查数据库中是否有更改 但是你可以做一个像刷新这样的动作

将适配器设置为全局适配器,当触发操作时,再次填充适配器并写入
adapter.notifyDatasetChange();

另一种方法是使用
Thread
,将其放入
AsyncTask
然后每分钟重新填充阵列 然后在每次这样的检查之后编写
adapter.notifyDatasetChange();

doInBackground(){
while(true){
    checkDataBase();
refillAdapter();
adapter.notifyDatasetChange();

    Thread.sleep(1000*60);// sec * 60 sec =1min
} 
}

查看此链接如何使用AsyncTask类

是否可以添加更新功能以检查错误您在哪里调用了
notifyDataSetChanged
,您在主线程(即ui线程)上调用了它?嘿,我在发布按钮单击事件中添加了它,因此每次按下按钮,列表都会更新为btnposting.setOnClickListener(new View.OnClickListener(){public void onClick(视图视图){String post=inputPost.getText().toString().trim();String user_posted=txtName.getText().toString().trim();if(!post.isEmpty()){postshreads(post,user_posted);}else{Toast.makeText(getApplicationContext(),“请输入您的详细信息!”,Toast.LENGTH_LONG.show();}}}});没错。但是,这不是全局级别,而是实例级别。
class example{
ListAdapter adapter;
ArrayList<HashMap<String, String>> emaillist;

 @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_general_discussion);
    db = new SQLiteHandler(this);

    emaillist = db.getMessage();
    if (emaillist.size() != 0) {
         adapter = new SimpleAdapter(MainActivity.this, emaillist,
                R.layout.raw_layout,
                new String[]{"user_posted", "post", "posted_at", "post_id"}, new int[]{
                R.id.text_user_name, R.id.text_user_post, R.id.text_user_date, R.id.text_user_number});
        setListAdapter(adapter);

    }
    adapter.notifyDataSetChanged();
doInBackground(){
while(true){
    checkDataBase();
refillAdapter();
adapter.notifyDatasetChange();

    Thread.sleep(1000*60);// sec * 60 sec =1min
} 
}