Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/36.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
Android 使用数据库的异步调用_Android_Sqlite_Asynchronous_Adapter - Fatal编程技术网

Android 使用数据库的异步调用

Android 使用数据库的异步调用,android,sqlite,asynchronous,adapter,Android,Sqlite,Asynchronous,Adapter,我正在尝试为我的android应用程序创建一个列表视图,并在最后添加一个页脚按钮。 我试图从我的数据库中读取元素,每次按下页脚按钮时使用limitsql命令end将它们放入一个列表中,然后我想从我的数据库中加载下一个元素,等等 代码运行良好,直到我按下异步调用按钮,然后出现异常 这是我的班级: public class UIHistoryListActivity extends ListActivity { ProgressDialog pDialog; EfficientAd

我正在尝试为我的android应用程序创建一个列表视图,并在最后添加一个页脚按钮。 我试图从我的数据库中读取元素,每次按下页脚按钮时使用limitsql命令end将它们放入一个列表中,然后我想从我的数据库中加载下一个元素,等等

代码运行良好,直到我按下异步调用按钮,然后出现异常

这是我的班级:

public class UIHistoryListActivity extends ListActivity {

    ProgressDialog pDialog;
    EfficientAdapter adap;
    Databasehandler db = new Databasehandler(this);
    List<Message> messages;
    ArrayList<Message> menuItems = new ArrayList<Message>();
    int current_page = 0;
    int index = 0;
    int limit = 0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);



        android.text.format.DateFormat.format("yyyy-MM-dd hh:mm:ss",
                new java.util.Date());

        db.addMessage(new Message("6983583727", "Hi Lakis", 1,
                (String) android.text.format.DateFormat.format(
                        "yyyy-MM-dd hh:mm:ss", new java.util.Date())));

        db.addMessage(new Message("1234567789", "Hi Takis", 1,
                (String) android.text.format.DateFormat.format(
                        "yyyy-MM-dd hh:mm:ss", new java.util.Date())));

        db.addMessage(new Message("1234344789", "Hi Makis", 1,
                (String) android.text.format.DateFormat.format(
                        "yyyy-MM-dd hh:mm:ss", new java.util.Date())));

        db.addMessage(new Message("1234553229", "Hi Sakis", 0,
                (String) android.text.format.DateFormat.format(
                        "yyyy-MM-dd hh:mm:ss", new java.util.Date())));

        db.addMessage(new Message("1234567781", "Hi Akis", 1,
                (String) android.text.format.DateFormat.format(
                        "yyyy-MM-dd hh:mm:ss", new java.util.Date())));
        db.addMessage(new Message("6983583727", "Hi Qakis", 1,
                (String) android.text.format.DateFormat.format(
                        "yyyy-MM-dd hh:mm:ss", new java.util.Date())));

        db.addMessage(new Message("1234567789", "Hi Wakis", 1,
                (String) android.text.format.DateFormat.format(
                        "yyyy-MM-dd hh:mm:ss", new java.util.Date())));

        db.addMessage(new Message("1234344789", "Hi Eakis", 1,
                (String) android.text.format.DateFormat.format(
                        "yyyy-MM-dd hh:mm:ss", new java.util.Date())));

        db.addMessage(new Message("1234553229", "Hi Yakis", 0,
                (String) android.text.format.DateFormat.format(
                        "yyyy-MM-dd hh:mm:ss", new java.util.Date())));

        db.addMessage(new Message("1234567781", "Hi Ukis", 1,
                (String) android.text.format.DateFormat.format(
                        "yyyy-MM-dd hh:mm:ss", new java.util.Date())));

                //putting the first 5 messages of my db on the list
        messages = db.getMessages(0, 5);
        index += 5;
        limit = limit + 5;
        for (Message mg : messages) {
            menuItems.add(new Message(mg.getID(), mg.getPhoneNumber(), mg
                    .getBody(), mg.getStatus(), mg.getDate()));

        }
        /*
         * menuItems.add(new Message(1, "1234553229", "Hi Sakis", 0, "lala"));
         * menuItems.add(new Message(1, "1234553229", "Hi Lakis", 0, "lala"));
         * menuItems.add(new Message(1, "1234553229", "Hi Takis", 0, "lala"));
         * menuItems.add(new Message(1, "1234553229", "Hi Aakis", 0, "lala"));
         * menuItems.add(new Message(1, "1234553229", "Hi Qakis", 1, "lala"));
         * menuItems.add(new Message(1, "1234553229", "Hi Wakis", 1, "lala"));
         * menuItems.add(new Message(1, "1234553229", "Hi Eakis", 0, "lala"));
         * menuItems.add(new Message(1, "1234553229", "Hi Rakis", 0, "lala"));
         * menuItems.add(new Message(1, "1234553229", "Hi Yakis", 1, "lala"));
         * menuItems.add(new Message(1, "1234553229", "Hi Uakis", 0, "lala"));
         * menuItems.add(new Message(1, "1234553229", "Hi Oakis", 0, "lala"));
         */
        adap = new EfficientAdapter(this, menuItems);

        ListView lv = getListView();

        // Creating a button - Load More
        Button btnLoadMore = new Button(this);
        btnLoadMore.setText("Load More");

        btnLoadMore.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // Starting a new async task
                // CharSequence text = "Ok dude you pressed me ";

                // Toast toast = Toast.makeText(getApplicationContext(), text,
                // Toast.LENGTH_SHORT);
                // toast.show();
                new loadMoreListView().execute();
            }
        });
        // Adding button to listview at footer
        lv.addFooterView(btnLoadMore);

        setListAdapter(adap);
        // adap = new ListViewAdapter(this, messages);
        lv.setAdapter(adap);

    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        // TODO Auto-generated method stub
        super.onListItemClick(l, v, position, id);
        Toast.makeText(this, "Click-" + String.valueOf(position),
                Toast.LENGTH_SHORT).show();
    }

    /**
     * Async Task that send a request to url Gets new list view data Appends to
     * list view
     * */
    private class loadMoreListView extends AsyncTask<List<Message>, Void, Void> {

        @Override
        protected void onPreExecute() {
            // Showing progress dialog before sending http request
            pDialog = new ProgressDialog(UIHistoryListActivity.this);
            pDialog.setMessage("Please wait..");
            pDialog.setIndeterminate(true);
            pDialog.setCancelable(false);
            pDialog.show();
        }

        @Override
        protected Void doInBackground(List<Message>... params) {
            // TODO Auto-generated method stub
            // UIHistoryListActivity.this
            // ListView lv = getListView();
            // for (Message mg : messages) {
            // menuItems.add(new Message(mg.getID(), mg.getPhoneNumber(), mg
            // .getBody(), mg.getStatus(), mg.getDate()));
            //
            // }

            // setListAdapter(adap);
            // adap = new ListViewAdapter(this, messages);
            // lv.setAdapter(adap);
            current_page = current_page + 1;

                        //putting the next 5 messages of my db on the list
            messages = db.getMessages(index, limit);
                        index += limit;
            limit = index + 5;


            ListView lv = getListView();
            for (Message mg : messages) {
                menuItems.add(new Message(mg.getID(), mg.getPhoneNumber(), mg
                        .getBody(), mg.getStatus(), mg.getDate()));
            }
            //setListAdapter(adap); edw petouse exception
            // adap = new ListViewAdapter(this, messages);
            adap = new EfficientAdapter(UIHistoryListActivity.this, menuItems);
            lv.setAdapter(adap);

            // Setting new scroll position
            int currentPosition = lv.getFirstVisiblePosition();
            lv.setSelectionFromTop(currentPosition + 1, 0);
            return null;
        }

        protected void onPostExecute(Void unused) {
            // closing progress dialog
            pDialog.dismiss();
        }

    }

    public static class EfficientAdapter extends ArrayAdapter<Message>
            implements Filterable {
        private LayoutInflater mInflater;
        // private Bitmap mIcon1;
        private final Context context;
        private final ArrayList<Message> values;

        public EfficientAdapter(Context context, ArrayList<Message> values) {
            // Cache the LayoutInflate to avoid asking for a new one each time.
            super(context, R.layout.mycontent, values);
            mInflater = LayoutInflater.from(context);
            this.context = context;
            this.values = values;
        }

        /**
         * Make a view to hold each row.
         * 
         * @see android.widget.ListAdapter#getView1(int, android.view.View,
         *      android.view.ViewGroup)
         */
        @Override
        public View getView(final int position, View convertView,
                ViewGroup parent) {
            // A ViewHolder keeps references to children views to avoid
            // unneccessary calls
            // to findViewById() on each row.
            ViewHolder holder;
            // When convertView is not null, we can reuse it directly, there is
            // no need
            // to reinflate it. We only inflate a new View when the convertView
            // supplied
            // by ListView is null.

            if (convertView == null) {
                convertView = mInflater.inflate(R.layout.mycontent, null);

                holder = new ViewHolder();
                holder.body = (TextView) convertView.findViewById(R.id.body);
                holder.date = (TextView) convertView.findViewById(R.id.date);
                holder.from = (TextView) convertView.findViewById(R.id.from);
                holder.status = (TextView) convertView
                        .findViewById(R.id.status);

                convertView.setTag(holder);
            }

            else {
                // Get the ViewHolder back to get fast access to the TextView
                // and the ImageView.
                holder = (ViewHolder) convertView.getTag();
            }
            convertView.setOnClickListener(new OnClickListener() {
                private int pos = position;

                // private String toId =
                // Integer.toString(values.get(position).getId());
                @Override
                public void onClick(View v) {
                    Toast.makeText(context, "Click-" + pos, Toast.LENGTH_SHORT)
                            .show();
                }
            });
            // holder.textLine.setText(TitleString[position] +
            // String.valueOf(position));

            holder.body.setText(getItem(position).getBody());
            holder.date.setText(getItem(position).getDate());
            holder.from.setText(getItem(position).getPhoneNumber());
            holder.status
                    .setText(String.valueOf(getItem(position).getStatus()));
            return convertView;

        }

        static class ViewHolder {
            TextView from;
            TextView date;
            TextView body;
            TextView status;
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return values.size();
        }

        @Override
        public Message getItem(int position) {
            // TODO Auto-generated method stub
            return values.get(position);
        }

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

        @Override
        public Filter getFilter() {
            // TODO Auto-generated method stub
            return null;
        }

    }

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        db.close();
    }

}
public类UIHistoryListActivity扩展了ListActivity{
ProgressDialog;
adap的效率;
Databasehandler db=新的Databasehandler(此);
列出信息;
ArrayList menuItems=新建ArrayList();
int当前页面=0;
int指数=0;
整数极限=0;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
requestWindowFeature(窗口。功能\u无\u标题);
setContentView(R.layout.activity_main);
android.text.format.DateFormat.format(“yyyy-MM-dd hh:MM:ss”,
新java.util.Date());
db.addMessage(新消息(“6983583727”,“Hi Lakis”,1,
(字符串)android.text.format.DateFormat.format(
“yyyy-MM-dd hh:MM:ss”,新java.util.Date());
db.addMessage(新消息(“1234567789”,“Hi Takis”,1,
(字符串)android.text.format.DateFormat.format(
“yyyy-MM-dd hh:MM:ss”,新java.util.Date());
db.addMessage(新消息(“1234344789”,“Hi Makis”,1,
(字符串)android.text.format.DateFormat.format(
“yyyy-MM-dd hh:MM:ss”,新java.util.Date());
db.addMessage(新消息(“1234553229”,“你好Sakis”,0,
(字符串)android.text.format.DateFormat.format(
“yyyy-MM-dd hh:MM:ss”,新java.util.Date());
db.addMessage(新消息(“1234567781”,“Hi-Akis”,1,
(字符串)android.text.format.DateFormat.format(
“yyyy-MM-dd hh:MM:ss”,新java.util.Date());
db.addMessage(新消息(“6983583727”,“Hi Qakis”,1,
(字符串)android.text.format.DateFormat.format(
“yyyy-MM-dd hh:MM:ss”,新java.util.Date());
db.addMessage(新消息(“1234567789”,“Hi-Wakis”,1,
(字符串)android.text.format.DateFormat.format(
“yyyy-MM-dd hh:MM:ss”,新java.util.Date());
db.addMessage(新消息(“1234344789”,“Hi-Eakis”,1,
(字符串)android.text.format.DateFormat.format(
“yyyy-MM-dd hh:MM:ss”,新java.util.Date());
db.addMessage(新消息(“1234553229”,“Hi Yakis”,0,
(字符串)android.text.format.DateFormat.format(
“yyyy-MM-dd hh:MM:ss”,新java.util.Date());
db.addMessage(新消息(“1234567781”,“Hi Ukis”,1,
(字符串)android.text.format.DateFormat.format(
“yyyy-MM-dd hh:MM:ss”,新java.util.Date());
//将my db的前5条消息放入列表
messages=db.getMessages(0,5);
指数+=5;
极限=极限+5;
用于(消息mg:消息){
添加(新消息(mg.getID(),mg.getPhoneNumber(),mg
.getBody(),mg.getStatus(),mg.getDate());
}
/*
*添加(新消息(1,“1234553229”,“Hi Sakis”,0,“lala”);
*添加(新消息(1,“1234553229”,“Hi-Lakis”,0,“lala”);
*添加(新消息(1,“1234553229”,“Hi Takis”,0,“lala”);
*添加(新消息(1,“1234553229”,“你好”,0,“拉拉”);
*添加(新消息(1,“1234553229”,“Hi Qakis”,1,“lala”);
*添加(新消息(1,“1234553229”,“Hi-Wakis”,1,“lala”);
*添加(新消息(1,“1234553229”,“你好”,0,“拉拉”);
*添加(新消息(1,“1234553229”,“Hi-Rakis”,0,“lala”);
*添加(新消息(1,“1234553229”,“Hi Yakis”,1,“lala”);
*添加(新消息(1,“1234553229”,“Hi Uakis”,0,“lala”);
*添加(新消息(1,“1234553229”,“Hi Oakis”,0,“lala”);
*/
adap=新的效率适配器(此,菜单项);
ListView lv=getListView();
//创建按钮-加载更多
按钮btnLoadMore=新按钮(此按钮);
btnLoadMore.setText(“加载更多”);
btnLoadMore.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图arg0){
//启动新的异步任务
//CharSequence text=“好的,老兄,你按我了”;
//Toast Toast=Toast.makeText(getApplicationContext(),text,
//烤面包片(长/短);
//toast.show();
新建loadMoreListView().execute();
}
});
//在页脚处向listview添加按钮
lv.addFooterView(btnLoadMore);
setListAdapter(adap);
//adap=新的ListViewAdapter(此为消息);
低压设置适配器(adap);
}
@凌驾
受保护的void onListItemClick(列表视图l、视图v、整数位置、长id){
//TODO自动生成的方法存根
super.onListItemClick(左、右、位置、id);
Toast.makeText(这是“单击-”+字符串.valueOf(位置),
吐司。长度(短)。show();
}
/**
*向url发送请求的异步任务将获取新的列表视图数据附加到
*列表视图
* */
私有类loadMoreListView扩展了异步任务{
@凌驾
受保护的void onPreExecute(){
//发送http请求前显示进度对话框
pDialog=newprogressdialog(UIHistoryListActivity.this);
pDialog.setMessage(“请稍候…”);
pDialog.setUndeterminate(真);
pDialog.setCancelable(假);
pD
private class loadMoreListView extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPreExecute() {
        pDialog = new ProgressDialog(UIHistoryListActivity.this);
        pDialog.setMessage("Please wait..");
        pDialog.setIndeterminate(true);
        pDialog.setCancelable(false);
        pDialog.show();
    }

    @Override
    protected Void doInBackground(Void... unused) {
        // TODO Auto-generated method stub
        runOnUiThread(new Runnable() {
            public void run() {
                List<Message> messages;

                current_page = current_page + 1;
                messages = db.getMessages(index, limit);
                index += limit;
                limit = index + 5;
                ListView lv = getListView();
                for (Message mg : messages) {
                    menuItems.add(new Message(mg.getID(), mg
                            .getPhoneNumber(), mg.getBody(),
                            mg.getStatus(), mg.getDate()));
                }
                // Setting new scroll position
                int currentPosition = lv.getFirstVisiblePosition();

                adap = new EfficientAdapter(UIHistoryListActivity.this,
                        menuItems);
                lv.setAdapter(adap);

                lv.setSelectionFromTop(currentPosition + 1, 0);
            }
        });
        return null;
    }

    protected void onPostExecute(Void unused) {
        // closing progress dialog
        pDialog.dismiss();
    }

}