从select中读取数据时Android进程挂起

时间:2017-05-11 08:06:04

标签: java android runtime

我有以下代码段:

..
..
..
Process proc = runTimeObject.exec(new String[]{"su"});
        System.out.println("0");
        DataOutputStream outputStream = new DataOutputStream(proc.getOutputStream());
        //String Sql = "sqlite3 -csv /data/data/com.whatsapp/databases/msgstore.db \"SELECT * FROM messages WHERE status<>13 AND key_from_me=0;\" > /data/test.csv";
        String Sql = "sqlite3 -csv /data/data/com.whatsapp/databases/msgstore.db \"SELECT m._id, m.key_remote_jid, m.data, m.media_wa_type, m.media_name FROM messages m, chat_list cl WHERE m.key_remote_jid = cl.key_remote_jid AND m.key_from_me=0 AND cl.unseen_message_count>0 AND m._id>COALESCE(cl.last_read_message_table_id, 0);\"";
        System.out.println("1");
        if (outputStream != null){
            System.out.println("2");
            outputStream.writeBytes(Sql);
            outputStream.flush();
            System.out.println("3");
            outputStream.writeBytes("exit\n");
            outputStream.flush();
            BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
            String line;
            while((line = in.readLine()) != null) {
                System.out.println(line);
                System.out.println("4");
            }
            System.out.println("5");
        }
        System.out.println("6");
        try {
            proc.waitFor();
       ...
       ...
       ...

while循环显示所有选定的数据,但程序挂起并且不向前(我没有看到5)。我是java和Android的新手,不知道我是如何解决这个问题的。请帮帮我

2 个答案:

答案 0 :(得分:1)

您是否在主线程上运行了长时间运行的任务?如果您阻止主线程超过几毫秒,您的应用程序将被终止。 尝试使用AsyncTask在后台运行任务。

答案 1 :(得分:0)

问题解决了,我忘记了&#39; \ n&#39;在select命令的末尾。