2017-05-05 10 views
-2

読み込み可能なhtmlファイルまたはテキストファイルにarraylistを出力しようとしています。私はこれがかなりシンプルであるべきだと思っていますが、それは単に私を逃れることです。だからここにある。私は、プレーヤーがゲームをノックアウトしたときに読み込まれるログファイルを持っています。ここにスクリーンショットがあります:
screen cap of busted player log読み込み可能なHTMLへの単純なArrayList

次に、保存ログボタンを押してファイルにエクスポートします。ファイルはHTMLまたはTXTであるかどうか、出力が実際に使用不可能である:
output file


それでは、どのように私はそれは、画面上でのアクティビティの場合のように私のHTMLまたはテキストファイルを表示するようにできますか?

おかげで、 Hendo

ここでの活動のためのコードだ...

import static com.feltinghendo.www.pokerdbtest.MainActivity.userList; 
GameLogがAppCompatActivityを拡張

パブリッククラス{ プライベート静的最終文字列タグ= "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名= '" +元に戻します+ "'");

  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(); 

私のインストラクターの助けを借りて、私はこれをうまく動作させることができました。

Windowsメモ帳がテキストの改行を認識しないため、メモ帳++を使用してテキストファイルを正しく読み込む必要があったとします(改行あり)。私はむしろ好奇心を感じます。

ご協力いただきありがとうございます。私はここで示唆したように、StringBuilderを使ってこれを試みました。それは動作しましたが、テキストファイルに入れられた余分な文字はすべて削除されませんでした。私はそれが私のnewbyコードの仕事だったと仮定します。 :-)

ありがとうございます! Hendo

0

ありここにはコードはませんので、私たちは本当にあなたの問題は何言うことができないが、私はそれはあなたのログの書き込みであると仮定します。あなたは、それがより良いあなたの配列リストをループラムダ式を使用していることができますので、場合にあなたは非常に似たような状況で私のためだけで正常に動作し、次の

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

PSを行うことができ、あなたのArrayList内の文字列を格納しプラチェ。

0

あなたのコードはわかりませんが、出力に何らかのフォーマットを与えるために欠けているようです。

StringBufferを作成します。あなたのリストを

ループとのStringBufferに追加

のStringBufferのtoString()メソッドはあなたにどのあなたがして出力することができ、文字列全体が得られます。

0

以下のコードを試して、ArrayListをStringに変換することができます。

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

ファイルに内容を書き込み中に、あなたがsb.toString()を使用することができます。

関連する問題