我正在尝试从我的系统应用中读取与系统应用相关联的xml文件。我在java中使用以下代码:
Process p = Runtime.getRuntime().exec("cat /data/data/app_pkg_name/shared_prefs/file.xml");
据我了解,我可以做到
p.getInputStream()
获取与该进程关联的输入流。如何在 logcat 中获取xml的实际内容,使用say, system.out.println()打印?
当我在adb shell中的命令提示符上执行相同的命令(第一个)时,我获得了控制台上打印的xml文件的内容。如何在应用程序中执行此操作?
仅供参考,我的设备 rooted ,我在清单中使用了必要的权限。
答案 0 :(得分:1)
/* You can use the below code to print the output using system.out.println() */
StringBuilder stringBuilder = new StringBuilder();
try {
String contents = "" ;
Process p = Runtime.getRuntime().exec("cat /data/data/com.admarvel.testerofflineappv242/shared_prefs/myPrefs.xml");
InputStream inputStream = p.getInputStream();`enter code here`
BufferedReader in = new BufferedReader(
new InputStreamReader( inputStream ) );
while ( ( contents = in.readLine() ) != null )
{
stringBuilder.append(contents);
}
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("text" + stringBuilder);
答案 1 :(得分:0)
有很多方法可以做到这一点。一种方法是将TextView添加到您的布局中,然后将其内容设置为您在流中获得的内容,例如。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="" />
然后在你的活动中:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_activity_layout);
TextView text = (TextView) findViewById(R.id.text);
text.setText(YOUR_STRING_HERE, TextView.BufferType.NORMAL);
//rest of the code
}
您无法在Android中使用system.out.println()在屏幕上输出字符串。您必须使用Android提供的内容(TextViews,Dialogs,Toasts等)。请阅读有关创建用户界面的docs。
要在logcat中打印内容,只需使用:
//declare this at the top of your activity
final static String MYTAG = "MyApp";
然后在想要在logcat中打印内容时使用Log.d()。
Log.d(MYTAG, "Whatever content you want to put here");
答案 2 :(得分:0)
使用下面的方法以String格式从InputStream获取数据并打印返回的String ...
private String getDataFromStream(InputStream inputStream) {
try {
final StringBuffer buffer = new StringBuffer();
byte[] bs = new byte[1024];
int read = 0;
while ((read = inputStream.read(bs)) != -1) {
String string = new String(bs, 0, read);
buffer.append(string);
}
inputStream.close();
return buffer.toString();
} catch (Exception exception) {
}
return ""; // we got exception or no data in Stream
}