我目前正在研究一个需要像在终端中运行sqlite3一样运行sqlite3的android项目。有了这个,我使用了以下方法:
使用Runtime exec()方法:
private void startProcess(String cmd){
//ProcessBuilder processBuilder = new ProcessBuilder("echo hello world");
//processBuilder.redirectErrorStream(true);
try {
final Process process = Runtime.getRuntime().exec(new String[]{"sqlite3 ", cmd});
final BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
new Thread(new Runnable() {
String result = "";
@Override
public void run() {
String line;
try {
while((line = reader.readLine()) != null){
result += line + "\n";
}
reader.close();
process.getInputStream().close();
} catch (IOException e) {
e.printStackTrace();
}
Log.d("response", result);
}
}).start();
} catch (IOException e) {
e.printStackTrace();
}
}
使用Process Builder:
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startProcess(new String[]{"sqlite3", code_area.getText().toString()});
}
});
}
private void startProcess(String[] cmd){
ProcessBuilder processBuilder = new ProcessBuilder(cmd);
processBuilder.redirectErrorStream(true);
try {
final Process process = processBuilder.start();
final BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
new Thread(new Runnable() {
String result = "";
@Override
public void run() {
String line;
try {
while((line = reader.readLine()) != null){
result += line + "\n";
}
reader.close();
process.getInputStream().close();
} catch (IOException e) {
e.printStackTrace();
}
Log.d("response", result);
}
}).start();
} catch (IOException e) {
e.printStackTrace();
}
}
两种方法都没有返回任何结果,也没有在logcat中抛出任何错误。
现在,我的问题是,1)如果有的话,它不会返回结果,也不会抛出错误, 2)是否有其他方法以在终端中运行sqlite3的方式运行sqlite3? 3)是否有任何我忽略的逻辑错误?
感谢您的帮助!
修改
我正在使用模拟器测试项目,并且尚未在真实设备上尝试过。