如何使用java打印android中进程返回的数据

时间:2013-12-04 10:17:17

标签: java android xml command-line

我正在尝试从我的系统应用中读取与系统应用相关联的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 ,我在清单中使用了必要的权限。

3 个答案:

答案 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
}