Есть ли способ сохранить скриншоты в Firebase?В реальном времени или Firestore? - PullRequest
1 голос
/ 10 мая 2019

Я сделал это мобильное приложение, которое может добавлять строки таблицы после нажатия кнопки.Каждая строка содержит текст редактирования, четыре раскрывающихся меню (счетчики) и кнопку, которая удаляет строку.Каждый ряд похож на дубликат после того, как я нажимаю кнопку «добавить».Теперь моя единственная проблема заключается в том, как сохранить этот конкретный контент в базе данных Firebase в режиме реального времени или в пожарном хранилище.Ребята, у вас есть рекомендации, как это сделать, какие-либо ресурсы, или этот вопрос является широким?Я могу указать некоторые вещи, которые вы запутали.

Я могу сохранить текст редактирования, который содержит заголовок документа, и он успешно работает, за исключением строк таблицы, поскольку он содержит несколько типов данных.Я только что слышал, что firebase может содержать только примитивные типы данных.

Это код, который имеет отношение к проблеме, поэтому мне не придется вставлять все 357 строк кода.

    private android.support.v7.widget.Toolbar maintoolbar, editToolBar;
    private FirebaseAuth mAuth;
    private FloatingActionButton fab;


    private RelativeLayout layoutMain;
    private RelativeLayout layoutButtons;
    private RelativeLayout layoutContent;
    private boolean isOpen = false;


    private Button addnewRowButton, saveItButton;
    private EditText titleofDoc;
    private Context context = null;
    private ProgressBar pb;




    private DatabaseReference dr;

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


        mAuth = FirebaseAuth.getInstance();
        dr = FirebaseDatabase.getInstance().getReference().child("Notes").child(mAuth.getCurrentUser().getUid());

        maintoolbar = findViewById(R.id.mainToolBar);
        setSupportActionBar(maintoolbar);

        getSupportActionBar().setTitle("Files");

        layoutMain = findViewById(R.id.mainLays);
        layoutButtons = findViewById(R.id.layoutButtons);
        layoutContent = findViewById(R.id.layoutContent);


        addnewRowButton = findViewById(R.id.AddRow);
        saveItButton = findViewById(R.id.SaveThis);
        titleofDoc = findViewById(R.id.TitleofDoc);
        editToolBar = findViewById(R.id.main_edit_toolbar);
        pb = findViewById(R.id.progressBar2);


        saveItButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String title = titleofDoc.getText().toString().trim();

                if (!TextUtils.isEmpty(title)) {
                    pb.setVisibility(View.VISIBLE);
                    createNew(title);
                    pb.setVisibility(View.INVISIBLE);
                } else {
                    Snackbar.make(v, "Fill Empty Fields", Snackbar.LENGTH_SHORT).show();
                    pb.setVisibility(View.INVISIBLE);
                }
            }
        });


        addnewRowButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                addNewRow();
            }
        });

        fab = findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                viewMenu();
            }
        });

    }

Этот метод создает строки таблицы.

    private void addNewRow() {
        final TableLayout tl = findViewById(R.id.tbllays);
        String[] teamRoles = {"Director", "Marketing", "Team", "All"};
        final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, teamRoles);

        context = getApplicationContext();
        //adds new row

        final TableRow tbr = new TableRow(context);

        TableRow.LayoutParams layoutParams = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT);
        tbr.setLayoutParams(layoutParams);

        //add edittext to name the task
        EditText editText = new EditText(context);
        editText.setHint("Add Task");
        tbr.addView(editText, 0);

        //add spinner to assign teams
        Spinner toDo = new Spinner(context);
        toDo.setAdapter(adapter);
        tbr.addView(toDo, 1);

        //add spinner to assign teams
        Spinner InProgress = new Spinner(context);
        InProgress.setAdapter(adapter);
        tbr.addView(InProgress, 2);

        //add spinner to assign teams
        Spinner Test = new Spinner(context);
        Test.setAdapter(adapter);
        tbr.addView(Test, 3);

        //add spinner to assign teams
        Spinner Done = new Spinner(context);
        Done.setAdapter(adapter);
        tbr.addView(Done, 4);


        // Add a button in the second column
        Button button = new Button(context);
        button.setText("X");
        tbr.addView(button, 5);
        button.setBackgroundColor(Color.rgb(159, 168, 218));

        // Get delete table row button.
        Button deleteRowButton = (Button) button;
        deleteRowButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                tbr.removeAllViews();
            }
        });


        tl.addView(tbr);

    }

Этот метод позволяет сохранять только заголовок, а не содержимое (в данном случае строки таблицы).,

    private void createNew(String title) {
        if (mAuth.getCurrentUser() != null) {
            final DatabaseReference newThingRef = dr.push();

            final Map thingMap = new HashMap();
            thingMap.put("title", title);
            thingMap.put("timestamp", ServerValue.TIMESTAMP);

            Thread mainThread = new Thread(new Runnable() {
                @Override
                public void run() {
                    newThingRef.setValue(thingMap).addOnCompleteListener(new OnCompleteListener<Void>() {
                        @Override
                        public void onComplete(@NonNull Task<Void> task) {


                            if (task.isSuccessful()) {
                                Toast.makeText(MainActivity.this, "Note added", Toast.LENGTH_SHORT).show();
                                Intent MainIntent = new Intent(MainActivity.this, MainActivity.class);
                                startActivity(MainIntent);
                            } else {
                                String error = task.getException().getMessage();
                                Toast.makeText(MainActivity.this, "ERROR: " + error, Toast.LENGTH_LONG).show();
                            }
                        }
                    });
                }
            });
            mainThread.start();


        } else {...}

    }

Это xml-файл (часть, в которой находится редактор)

    <RelativeLayout
        android:id="@+id/layoutContent"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/mainToolBar"
        >


        <RelativeLayout
            android:id="@+id/layoutButtons"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/white"
            android:gravity="center"

            android:visibility="gone">

            <ScrollView
                android:layout_width="match_parent"
                android:layout_height="match_parent"

                tools:context=".MainEditor">

                <LinearLayout
                    android:id="@+id/LinLay"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="vertical"
                    tools:layout_editor_absoluteX="0dp"
                    tools:layout_editor_absoluteY="370dp">


                    <android.support.v7.widget.Toolbar
                        android:id="@+id/main_edit_toolbar"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:background="?attr/colorPrimary"
                        android:minHeight="?attr/actionBarSize"
                        android:theme="?attr/actionBarTheme" />

                    <ProgressBar
                        android:id="@+id/progressBar2"
                        style="?android:attr/progressBarStyleHorizontal"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:indeterminate="true" />

                    <EditText
                        android:id="@+id/TitleofDoc"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:background="@android:color/transparent"
                        android:ellipsize="end"
                        android:hint="@string/title"
                        android:importantForAutofill="no"
                        android:inputType=""
                        android:maxHeight="1dp"
                        android:maxLength="30"
                        android:maxLines="1"
                        android:padding="10dp"
                        tools:targetApi="o" />

                    <View
                        android:layout_width="match_parent"
                        android:layout_height="1dp"
                        android:layout_marginLeft="10dp"
                        android:layout_marginTop="10dp"
                        android:layout_marginRight="10dp"
                        android:layout_marginBottom="10dp"
                        android:alpha=".3"
                        android:background="@android:color/black" />

                    <HorizontalScrollView
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:fillViewport="true">

                        <TableLayout
                            android:id="@+id/tbllays"
                            android:layout_width="wrap_content"
                            android:layout_height="match_parent">

                            <TableRow
                                android:layout_width="match_parent"
                                android:layout_height="match_parent">

                                <Button
                                    android:id="@+id/AddRow"
                                    style="?android:attr/buttonBarButtonStyle"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:layout_column="0"
                                    android:layout_weight=".1"

                                    android:background="@color/colorAccent"
                                    android:text="@string/add_row"
                                    android:textColor="@color/colorPrimaryDark" />


                                <Button
                                    android:id="@+id/SaveThis"
                                    style="?android:attr/buttonBarButtonStyle"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:layout_column="1"
                                    android:layout_weight=".1"

                                    android:background="@color/colorPrimaryDark"
                                    android:text="@string/save" />
                            </TableRow>

                            <TableRow
                                android:layout_width="match_parent"
                                android:layout_height="match_parent"
                                android:stretchColumns="*">


                                <TextView

                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:layout_column="0"

                                    android:text="@string/task" />

                                <TextView

                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:layout_column="1"

                                    android:text="@string/to_do" />

                                <TextView

                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:layout_column="2"
                                    android:layout_weight=".1"
                                    android:text="@string/in_progress" />

                                <TextView

                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:layout_column="3"
                                    android:layout_weight=".1"
                                    android:text="@string/testing" />

                                <TextView

                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:layout_column="4"
                                    android:layout_weight=".1"
                                    android:text="@string/done" />

                                <TextView

                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:layout_column="5"
                                    android:layout_weight=".1"
                                    android:text="@string/delete" />


                            </TableRow>

                        </TableLayout>
                    </HorizontalScrollView>

                </LinearLayout>


            </ScrollView>

        </RelativeLayout>

    </RelativeLayout>

Игнорировать пользовательскую часть, то есть только если пользователь вошел в систему.

Вот как это работает

Ответы [ 2 ]

0 голосов
/ 11 мая 2019

На самом деле вы не хотите сохранять строки, вы хотите сохранить базовый контент .

Вместо того, чтобы думать о экранных строках как о самом контенте, подумайте оих как просто отображение вашего основного контента.Этот базовый контент может быть скопирован, изменен, как вам угодно, а его представление на экране может быть полностью восстановлено в любое время.

Чтобы преобразовать ваш код, я бы предложил следующую серию шагов:

  1. Создайте что-то вроде Task класса, в котором есть все необходимые поля (например, name, team).
  2. Сохраните список Task sв вашем текущем классе Activity / Fragment, например, private List<Task> myTasks.
  3. Напишите метод displayTasks, который удаляет все существующие строки из вашего макета, затем перебирает myTasks и выводит их все на экран.
  4. Измените addNewRow так, чтобы оно добавляло новый Task к myTasks, затем вызывало displayTasks.
  5. Теперь у вас есть список задач, которые можно записать напрямуюв Cloud Firestore , и будут восстановлены позже.

Я полностью осознаю, что этот ответ не простой "просто сделай х", который вам нужен, но это ответ, который вам действительно нужен!Все шаги очень просты, и, конечно, не стесняйтесь изменять их для своего случая использования.

Как только вы освоитесь с понятием «то, что на экране, это не мои данные, а просто представлениеэто ", вы можете посмотреть LiveData и ViewModel .Они хитрее, но с большим количеством преимуществ (объяснено в ссылках).

0 голосов
/ 10 мая 2019

Вам необходимо добавить Listener в конце каждого счетчика и сохранить в переменной, например:

Spinner Done = new Spinner(context);
Done.setAdapter(adapter);
Done.setOnItemSelectedListner(this)
tbr.addView(Done, 4);

Затем сохранить эту переменную Done с помощью DatabaseReference

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