2017-05-05 74 views
-2

我想輸出一個可讀的html或文本文件的數組列表。我認爲這應該是非常簡單的,但它只是在逃避我。所以在這裏。我有一個日誌文件,當玩家被淘汰出局時,這些日誌文件就會被填充。這裏的屏幕截圖:
screen cap of busted player log簡單的ArrayList到可讀的HTML

然後我點擊保存日誌按鈕將其導出到一個文件。無論該文件是HTML或TXT,輸出實在是不可用的:
output file


那麼,如何讓我的HTML或文本文件,以表明它在做屏幕上的活動?

感謝, Hendo

下面是該活動的代碼...

import static com.feltinghendo.www.pokerdbtest.MainActivity.userList; 

公共類GameLog擴展AppCompatActivity { 私有靜態最後絃樂TAG = 「GameLog」;

TextView gameLog; 
ListView lvLog; 
Button btnSave, btnClear; 

private static ArrayList<String> bustOutLog = new ArrayList<>(); 
ArrayAdapter arrayAdapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_game_log); 

    gameLog = (TextView) findViewById(R.id.tvGameLog); 
    lvLog = (ListView) findViewById(R.id.lvLog); 
    btnSave = (Button) findViewById(R.id.btnSave); 
    btnClear = (Button) findViewById(R.id.btnClear); 

    gameLog.setText("Game Log"); 

    Bundle extras = getIntent().getExtras(); 
    if (extras != null) { 
     String bustLog = extras.getString("BUSTED"); 
     Log.d(TAG, "onCreate: " + bustLog); 
     bustOutLog.add(bustLog); 
    } 

    lvLog.setChoiceMode(ListView.CHOICE_MODE_NONE); 
    arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, bustOutLog); 
    lvLog.setAdapter(arrayAdapter); 

    lvLog.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 
      Log.d(TAG, "onItemLongClick: starts"); 

      String undoBust = bustOutLog.get(position); 
      Log.d(TAG, "onItemLongClick: UNDO str = " + undoBust); 

      String[] cut = undoBust.split(" "); 
      String undo = cut[0]; 
      Log.d(TAG, "onItemLongClick: remove player " + undo); 

      String sql = "UPDATE players SET active = 1 WHERE name = '" + undo + "'"; 

      Log.d(TAG, "onItemLongClick: undo sql" + sql); 
      userList.execSQL(sql); 

// MainActivity.userList.execSQL( 「UPDATE SET玩家活性= 1 WHERE NAME = '」 +撤消+ 「'」);

  UserList.boughtIn.add(undo); 

      bustOutLog.remove(position); 
      arrayAdapter.notifyDataSetChanged(); 
      return true; 
     } 
    }); 

    arrayAdapter.notifyDataSetChanged(); 
    UserList.spinnerArrayAdapter.notifyDataSetChanged(); 
} 



public void saveLog(View view) { 

    // get permission - if we don't already have permission, we must request it from the user. 
    // Very quick solution - DO NOT JUST DO THIS IN PRODUCTION CODE! Refer to Section 10. 
    int hasWriteESPermission = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE); 
    if (hasWriteESPermission == PackageManager.PERMISSION_GRANTED) { 
     Log.d(TAG, "onCreate: permission granted"); 
    } else { 
     Log.d(TAG, "onCreate: requesting permission"); 
     ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); 
    } 

    try { 
     FileOutputStream fos = 
       new FileOutputStream(
         new File(Environment.getExternalStoragePublicDirectory(
           Environment.DIRECTORY_DOWNLOADS), "gamelog.html")); 
     ObjectOutputStream os = new ObjectOutputStream(fos); 
     os.writeObject(bustOutLog); 
     os.close(); 

     Log.d(TAG, "saveLog: File written"); 
     Toast.makeText(this, "File Written", Toast.LENGTH_SHORT).show(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     Log.d(TAG, "saveLog: File Not Written"); 
     Toast.makeText(this, "File Not Written", Toast.LENGTH_SHORT).show(); 
    } 
} 

public void clearLog(View view) { 
    bustOutLog.clear(); 
    arrayAdapter.notifyDataSetChanged(); 
} 

}

+4

你的代碼在哪裏? – DCON

回答

0

我已經成功地進入了積極成果這條路線。

File logFile = new File(basePath, "gamelog.txt"); 
      FileWriter ofs = new FileWriter(logFile); 
      BufferedWriter outStream = new BufferedWriter(ofs); 
      for (int i=0; i < bustOutLog.size(); i++) { 
       Log.d(TAG, "onClick: writing " + bustOutLog.get(i)); 
       outStream.write(bustOutLog.get(i)); 
       outStream.write(String.format("\n")); 
      } 
      outStream.close(); 
      ofs.close(); 

在我的一位導師的幫助下,我能夠很好地工作。

我會說,我不得不使用Notepad ++正確讀取文本文件(帶有換行符),因爲Windows記事本不會識別文本中的換行符。我覺得很好奇。

我非常感謝您對此的所有幫助。正如這裏所建議的那樣,我使用StringBuilder嘗試了這一點。它確實有效,儘管它並沒有消除所有似乎放入文本文件的額外字符。我認爲這是我的newby代碼工作。 :-)

謝謝大家! Hendo

0

這裏沒有代碼,所以我們真的不能告訴什麼是你的問題,但我認爲它是與你的日誌寫入。所以,如果你存儲中的字串ArrayList中,你可以做這在一個非常類似的情況工作得很好,我下面

FileWriter logger = new FileWriter("log.txt"); 
for(String line: listLog) { //listLog being 
logger.write(line); 
} 
logger.close(); 

PS:您可以通過使用lambda表達式的數組列表循環,這是一個更好實踐。

0

我不知道你的代碼,但它看起來像你缺少給予一定的格式輸出。

創建一個StringBuffer。

遍歷列表,並追加到的StringBuffer

StringBuffer的toString()方法會給你整個字符串,就可以再輸出。

0

你可以試試下面的代碼到你的ArrayList轉換爲字符串。

StringBuilder sb = new StringBuilder(); 
for (String s : list) 
{ 
    sb.append(s); sb.append("\n"); 
} 

然後你可以使用sb.toString(),同時將內容寫到一個文件。