ArrayList() не увеличивается в размере при добавлении нового элемента
Мои бессонные ночи
Доброй ночи, булка! :)
Ситуация следующая:
Пришел ко мне как-то приятель и попросил написать лог для приложения на андроид. В принципе, казалось бы, ничего сложно (хоть я и знаком с жабой еле-еле) - создал файл да записал все собранные данные в него... А вот фиг.
При добавлении нового элемента в ArrayList() новый элемент записывается поверх предыдущего. :4to:
С обычными (с фиксированным количеством элементов) так же.
Пробовал создавать отдельный проект и написать пример с массивом с нуля - всё работает.
Вот код MainActivity, где, в принципе, всё происходит:
http://pastebin.mozilla-russia.org/111911
Или под катом:
PHP код:
package com.NFCProject;
import android.app.Activity; import android.content.Context; import android.content.Intent; import android.nfc.NfcAdapter; import android.os.Bundle; import android.os.Environment; import android.widget.Toast;
import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.ArrayList;
/* Класс Internet, наследник класса AsyncTask. * AsyncTask - системный класс для выполнения * тяжелых задач и передача в UI-поток результатов работы. * В классе Internet выполняется запрос на сервер * Класс HexUtils содержит всего один метод для * перевода байтов в строку * InternetListener - интерфейс, используемый в * качестве слушателя окончания задачи в классе Internet */ public class MainActivity extends Activity implements InternetListener { // private final static String FILENAME = "secOn_log.txt"; // имя файла // private static final String LOG_TAG = "SecOn_log"; Context context = this; NfcAdapter adapter; Internet internet_conn; String id;
//Массивы с данными от меток ArrayList<String> tag = new ArrayList<String>(); ArrayList<String> tagid = new ArrayList<String>(); ArrayList<String> tagtime = new ArrayList<String>(); //Данные для запимси файла final String DIR_SD = "Secоn"; final String FILENAME_SD = "fileSD";
@Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); // adapter = NfcAdapter.getDefaultAdapter(this); onNewIntent(getIntent()); }
@Override protected void onNewIntent(Intent intent){ if(NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction()) || NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction())){ byte[] msgs = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID); id = HexUtils.bytesToHexString(msgs); internet_conn = new Internet(this); internet_conn.execute(id); addTagToList(id); } }
@Override public void onRequestFinished(){ writeFileSD(); }
//Этот метод возвращает текущую дату и время private String getDateTime() { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy.MM.dd / HH:mm:ss"); Date date = new Date(); return dateFormat.format(date); } //Метод записи файла (лога) на телефон void writeFileSD() { // проверяем доступность SD if (!Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { return; } // получаем путь к SD File sdPath = Environment.getExternalStorageDirectory(); // добавляем свой каталог к пути sdPath = new File(sdPath.getAbsolutePath() + "/" + DIR_SD); // создаем каталог sdPath.mkdirs(); // формируем объект File, который содержит путь к файлу File sdFile = new File(sdPath, FILENAME_SD);
try { String res_str; BufferedWriter bw = new BufferedWriter(new FileWriter(sdFile)); // открываем поток для записи bw.write("Лог программы. Не удаляйте его! Пожалуйста!"); bw.newLine(); bw.write("Список пройденных меток за последнее время:"); bw.newLine();
for (int i = 0; i < tag.size(); i++) { //Проходимся по массиву с данными res_str = tag.get(i)+" "+tagid.get(i)+" "+tagtime.get(i)+ "/n"; //Соединяем из в строку bw.write(res_str); //И записываем bw.newLine(); //System.out.println(res_str); } bw.close(); Toast.makeText(context, "Запись завершена.", Toast.LENGTH_SHORT).show(); } catch (IOException e) { e.printStackTrace(); } } //Метод добавления метки в массив программы void addTagToList(String tag_id){ tag.add("---"); tagid.add(tag_id); tagtime.add(getDateTime()); }
}
В чем может быть проблема?
И ещё вопрос:
Как дописать информацию в файл, а не переписывать файл с нуля? Насколько мне известно FileWriter не открывает файл, а тупо создает его заново, вместо предыдущего. А FileReader позволяет файл соответственно только читать. Попробовать скопировать данные в буфер при чтении, а потом уже вставить их при записи нового файла?
|