Как записать данные в файл формата CSV через HasMap в Android? - PullRequest
0 голосов
/ 01 марта 2019

Ниже приведен код, если мой класс, в который я извлекаю данные из firebase в HashMap, затем я сохраняю эти данные в arraylist и преобразовываю данные списка массивов в строку, разделенную запятыми, но это не работает, как я ожидаю. Ниже приведенснимок экрана с моей базой данных... enter image description here

SharedPreferences sharedPreferences;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_report);
        sharedPreferences = getSharedPreferences("Pref", Context.MODE_PRIVATE);
        DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference().child("Users");
        databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                ArrayList<Map<String, CompanyData>> myArrList = new ArrayList<>();
                Map<String, CompanyData> userData = (Map<String, CompanyData>) dataSnapshot.getValue();
                myArrList.add(userData);
                Log.d("data", userData.toString());
                csv(myArrList);
                Log.d("99", sharedPreferences.getString("generalStrings", ""));

                String path =
                        Environment.getExternalStorageDirectory() + File.separator + "Mccia";
                // Create the folder.
                File folder = new File(path);
                folder.mkdirs();

                // Create the file.
                File file = new File(folder, "config.csv");
                try {
                    file.createNewFile();
                    FileOutputStream fOut = new FileOutputStream(file);
                    OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut);
                    myOutWriter.append(sharedPreferences.getString("generalStrings", ""));
                    myOutWriter.close();

                    fOut.flush();
                    fOut.close();
                } catch (IOException e) {
                    Log.e("Exception", "File write failed: " + e.toString());
                }

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });


    }

ниже мой метод для преобразования списка данных в строку

private ArrayList<Map<String, CompanyData>> csv(ArrayList<Map<String, CompanyData>> mapArrayList) {
        ArrayList<Map<String, CompanyData>> g = mapArrayList;
        SharedPreferences.Editor editor = sharedPreferences.edit();
        StringBuilder st = new StringBuilder();
        for (Map<String, CompanyData> item : g) {
            st.append(item);
        }
        if (!g.isEmpty()) {
            editor.putString("generalStrings", st.toString().substring(0, st.toString().length() - 1));
            editor.apply();
        } else {
            editor.putString("generalStrings", " ");
            editor.apply();
        }
        return g;
    }

Пожалуйста, помогите мне или дайте мне некоторую идею, каксделай это.У меня есть библиотека openCsv и superCSV, но она мне не помогла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...