欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在Android界面上顯示和獲取Logcat日志輸出的方法

 更新時(shí)間:2018年03月15日 14:54:50   作者:死磕自己  
這篇文章主要介紹了在Android界面上顯示和獲取Logcat日志輸出的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

一、首先我們要獲取Logcat中的日志

如何獲取呢?

首先我們要先定義一個(gè)String[]數(shù)組,里面的代碼是

//第一個(gè)是Logcat ,也就是我們想要獲取的log日志
//第二個(gè)是 -s 也就是表示過濾的意思
//第三個(gè)就是 我們要過濾的類型 W表示warm ,我們也可以換成 D :debug, I:info,E:error等等
String[] running = new String[]{"logcat","-s","adb logcat *: W"};

當(dāng)我們?cè)O(shè)置好之后,我們還需要一個(gè)process類,作用通俗來講就是用Java代碼來進(jìn)行adb命令行操作代碼是:

Process exec = Runtime.getRuntime().exec(running);

通過以上的方法我們就可以獲得和過濾Logcat中的方法。

二、接下來開始使用IO流進(jìn)行字符操作,把數(shù)據(jù)保存在Android SDCard中

首先:我們定義一個(gè)InputStream,

final InputStream is = exec.getInputStream

接下來開啟一個(gè)線程,線程中的方法就是通過IO流先讀取Logcat中的數(shù)據(jù),然后再把數(shù)據(jù)通過OutPutStream方法寫入到SDCard中。

  new Thread() {
        @Override
        public void run() {
          FileOutputStream os = null;
          try {
            //新建一個(gè)路徑信息
            os = new FileOutputStream("/sdcard/Log/Log.txt");
            int len = 0;
            byte[] buf = new byte[1024];
            while (-1 != (len = is.read(buf))) {
              os.write(buf, 0, len);
              os.flush();
            }
          } catch (Exception e) {
            Log.d("writelog",
                "read logcat process failed. message: "
                    + e.getMessage());
          } finally {
            if (null != os) {
              try {
                os.close();
                os = null;
              } catch (IOException e) {
                // Do nothing
              }
            }
          }
        }
      }.start();
    } catch (Exception e) {
      Log.d("writelog",
          "open logcat process failed. message: " + e.getMessage());
    }
  }

當(dāng)我們這個(gè)類寫完之后,我們?cè)侔褭?quán)限添加進(jìn)去就可以了。

  <!-- 讀取Log權(quán)限 -->
  <uses-permission android:name="android.permission.READ_LOGS" />
  <!-- 在SDCard中創(chuàng)建與刪除文件權(quán)限 -->
  <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
  <!-- 往SDCard寫入數(shù)據(jù)權(quán)限 -->
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  <!-- 從SDCard讀出數(shù)據(jù)權(quán)限 -->
  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

添加完權(quán)限,我們運(yùn)行試試。


然后我們?cè)俅蜷_我們的SDCard中的文件目錄:


這樣我們就已經(jīng)獲取到了Logcat中的日志(可以和控制臺(tái)的對(duì)比一下):


由于我開啟了兩次所以打印出了兩次的log.

三、之后我們先創(chuàng)建頁面,然后在按行讀取Txt文本中的內(nèi)容

首先我們開始編寫XMl視圖文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical"
  tools:context=".MainActivity" >
  
  <LinearLayout 
      android:layout_width="match_parent"
      android:layout_weight="7"
      android:orientation="vertical"
    >
    <ListView 
      android:id="@+id/ListLog"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      ></ListView>
    
  </LinearLayout>

  <LinearLayout
    android:layout_width="match_parent"
    android:layout_weight="1"
    android:gravity="center"
    android:orientation="horizontal" >

    <Button 
    android:layout_gravity="center"
      android:gravity="center"
      android:id="@+id/BtnLog"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="清空日志"
      />
    
  </LinearLayout>
</LinearLayout>

編寫完成后,我們開始在MainActivity里面初始化我們的類

private ListView listView;
  private Button btn;  
    
  listView = (ListView) findViewById(R.id.ListLog);
  btn = (Button) findViewById(R.id.BtnLog);

之后,我們開始編寫我們的讀取TXT文件的方法

/** 
   * 根據(jù)行讀取內(nèi)容 
   * @return 
   */ 
  public List<String> Txt() {  
    //將讀出來的一行行數(shù)據(jù)使用List存儲(chǔ)  
    String filePath = "/sdcard/Log.txt";  
 
    List newList=new ArrayList<String>(); 
    try {  
      File file = new File(filePath);  
      int count = 0;//初始化 key值  
      if (file.isFile() && file.exists()) {//文件存在  
        InputStreamReader isr = new InputStreamReader(new FileInputStream(file));  
        BufferedReader br = new BufferedReader(isr);  
        String lineTxt = null;  
        while ((lineTxt = br.readLine()) != null) { 
          if (!"".equals(lineTxt)) {  
            String reds = lineTxt.split("\\+")[0]; //java 正則表達(dá)式  
            newList.add(count, reds); 
            count++;  
          }  
        }  
        isr.close();  
        br.close();  
      }else {  
        Log.e("tag", "can not find file");
      }  
    } catch (Exception e) {  
      e.printStackTrace();  
    }  
    return newList;  
  }  

我們看d的代碼,其實(shí)也就是IO讀寫操作

if (file.isFile() && file.exists()) //這一行是判斷是否有文件存在

然后我們用InputStreamReader讀取我們SDCard中的文件;

使用BufferedReader方法讀取我們獲取的字符流;

最后我們用While循環(huán)和正則表達(dá)式來把每一行都給放入List中;

最后我們返回List;

 InputStreamReader isr = new InputStreamReader(new FileInputStream(file));  
        BufferedReader br = new BufferedReader(isr);  
        String lineTxt = null;  
        while ((lineTxt = br.readLine()) != null) { 
          if (!"".equals(lineTxt)) {  
            String reds = lineTxt.split("\\+")[0]; //java 正則表達(dá)式  
            newList.add(count, reds); 
            count++;  
          }  
        }  

還有一個(gè)XML視圖文件,名稱log_list_item.xml

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent" 
   android:textColor="#000000"
  android:gravity="left"
  android:paddingLeft="20dp"
  android:textSize="20sp"
  android:singleLine="true"
/>

接下來就是把List放入ListView中:

 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.log_list_item,Txt());
 listView.setAdapter(adapter);

好讓我們運(yùn)行一下看看效果:


好了,我們的顯示日志也已經(jīng)成功了。接下來就是要可以清空日志;

最后、清空日志

如何清空日志呢?

其實(shí)非常簡單

 /**
   * 刪除Log文件
   * @param fileName 文件路徑和名稱
   */
  public static void delFile(String fileName){ 
    File file = new File(fileName); 
    if(file.isFile()){ 
      file.delete(); 
    } 
    file.exists(); 
  } 

我們只需要把路徑傳過去,進(jìn)行判斷,如果有就直接刪除。

然后我們對(duì)ListView進(jìn)行刷新就可以了。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android 多線程的實(shí)現(xiàn)方法總結(jié)

    Android 多線程的實(shí)現(xiàn)方法總結(jié)

    這篇文章主要介紹了Android 多線程的實(shí)現(xiàn)方法總結(jié)的相關(guān)資料,這里提供三種方法,幫助大家掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-08-08
  • Android給圖片添加水印

    Android給圖片添加水印

    最近在項(xiàng)目執(zhí)行過程中有這樣一個(gè)需求,要求拍完照的圖片必須添加水印,本文記錄一下實(shí)現(xiàn)過程
    2021-05-05
  • Android組合控件自定義標(biāo)題欄

    Android組合控件自定義標(biāo)題欄

    這篇文章主要為大家詳細(xì)介紹了Android組合控件自定義標(biāo)題欄,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Android自定義上下左右間隔線

    Android自定義上下左右間隔線

    這篇文章主要為大家詳細(xì)介紹了Android自定義上下左右間隔線,自定義SpaceItemDecoration分割線,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Android端使用Modbus協(xié)議的簡單方法

    Android端使用Modbus協(xié)議的簡單方法

    Modbus協(xié)議是全球第一個(gè)用于工業(yè)現(xiàn)場(chǎng)的總線協(xié)議,與外設(shè)交互可以采用串口通信,tcp等方式,這篇文章主要給大家介紹了關(guān)于Android端使用Modbus協(xié)議的簡單方法,需要的朋友可以參考下
    2021-11-11
  • Android中recyclerView底部添加透明漸變效果

    Android中recyclerView底部添加透明漸變效果

    這篇文章主要給大家介紹了關(guān)于Android中recyclerView如何實(shí)現(xiàn)底部添加透明漸變效果的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2018-04-04
  • Android注解框架對(duì)比分析

    Android注解框架對(duì)比分析

    這篇文章主要為大家詳細(xì)對(duì)比分析了Android注解框架,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • 詳解Android?Flutter如何使用相機(jī)實(shí)現(xiàn)拍攝照片

    詳解Android?Flutter如何使用相機(jī)實(shí)現(xiàn)拍攝照片

    在app中使用相機(jī)肯定是再平常不過的一項(xiàng)事情了,相機(jī)肯定涉及到了底層原生代碼的調(diào)用,那么在flutter中如何快速簡單的使用上相機(jī)的功能呢?一起來看看吧
    2023-04-04
  • Android ListView實(shí)現(xiàn)下拉頂部圖片變大效果

    Android ListView實(shí)現(xiàn)下拉頂部圖片變大效果

    這篇文章主要為大家詳細(xì)介紹了Android ListView實(shí)現(xiàn)下拉頂部圖片變大,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Android實(shí)現(xiàn)從本地圖庫/相機(jī)拍照后裁剪圖片并設(shè)置頭像

    Android實(shí)現(xiàn)從本地圖庫/相機(jī)拍照后裁剪圖片并設(shè)置頭像

    玩qq或者是微信的盆友都知道,這些聊天工具里都要設(shè)置頭像,一般情況下大家的解決辦法是從本地圖庫選擇圖片或是從相機(jī)拍照,然后根據(jù)自己的喜愛截取圖片,接下來通過本文給大家介紹Android實(shí)現(xiàn)從本地圖庫/相機(jī)拍照后裁剪圖片并設(shè)置頭像,需要的朋友參考下
    2016-02-02

最新評(píng)論