Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何添加自删除firebase实时数据的时间限制_Java_Android_Xml_Firebase - Fatal编程技术网

Java 如何添加自删除firebase实时数据的时间限制

Java 如何添加自删除firebase实时数据的时间限制,java,android,xml,firebase,Java,Android,Xml,Firebase,我想在20分钟后删除我的firebaseRealtimeData,那么我该怎么做呢。 我正在创建一个request food应用程序,其中用户请求并添加有关食物的详细信息,所有其他人都可以看到他们的详细信息,但我希望用户添加的数据在20分钟后被删除,所以我为什么要这样做,以及在这段代码中我应该在哪里做帮助我 package com.example.mynewapp; import android.content.Context; import android.content.DialogInt

我想在20分钟后删除我的firebaseRealtimeData,那么我该怎么做呢。 我正在创建一个request food应用程序,其中用户请求并添加有关食物的详细信息,所有其他人都可以看到他们的详细信息,但我希望用户添加的数据在20分钟后被删除,所以我为什么要这样做,以及在这段代码中我应该在哪里做帮助我

package com.example.mynewapp;

import android.content.Context;
import android.content.DialogInterface;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;

import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.firebase.ui.database.FirebaseRecyclerOptions;

import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Query;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.SearchView;
import androidx.appcompat.widget.Toolbar;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.view.LayoutInflater;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;


public class MainActivity extends AppCompatActivity {

    DatabaseReference myRef ;
    modelClass mClass;
    CoordinatorLayout coordinatorLayout;
    RecyclerView recyclerView;
    FirebaseRecyclerOptions<modelClass>options;
    FirebaseRecyclerAdapter<modelClass,MyVIewHolder> adapter;
    private String post_key;
    Query query;

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


        //for net Connectivity
        checkNetworkConnectionIsAvailable ();

        //cordinatorLayout
        coordinatorLayout=findViewById ( R.id.myCoordinator );

        //toolbar
        Toolbar toolbar = findViewById ( R.id.toolbar );
        setSupportActionBar ( toolbar );
        getSupportActionBar ().setTitle ( "YouR Food Corner" );

        //modelClass and firebase
        modelClass mClass=new modelClass (  );

        //for insert the data into firebase database and also use for the retrive the data from database.
        myRef= FirebaseDatabase.getInstance ().getReference ().child ( "All Data" );
        myRef.keepSynced ( true );//for syncronize the firebase data

        //recyclerView
       recyclerView=findViewById ( R.id.myRecyclerView );
       LinearLayoutManager linearLayoutManager= new LinearLayoutManager ( getApplicationContext () );
       linearLayoutManager.setReverseLayout ( true );
       linearLayoutManager.setStackFromEnd ( true );
       recyclerView.setHasFixedSize ( true );
       recyclerView.setLayoutManager ( linearLayoutManager );

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

    }

    //for only press FloatingActionbutton
private void FloatingActionButtonData()
{
    AlertDialog.Builder myDig= new AlertDialog.Builder ( this );
    LayoutInflater layoutInflater=LayoutInflater.from ( this );
    View v=layoutInflater.inflate ( R.layout.inputlayout ,null);
    myDig.setView ( v );
    final AlertDialog dialog=myDig.create ();
    dialog.setCancelable ( true );
    dialog.show ();

     final EditText fname=(EditText)v.findViewById ( R.id.name );
    final EditText fcontact=(EditText)v.findViewById ( R.id.contact );
    final EditText fcollege=(EditText)v.findViewById ( R.id.college );
    final EditText ffood=(EditText)v.findViewById ( R.id.food );


    Button submit =(Button)v.findViewById ( R.id.submitButton );
    submit.setOnClickListener ( new View.OnClickListener () {
        @Override
        public void onClick(View view) {
            String f_name = fname.getText ().toString ().trim ();
            String f_college = fcollege.getText ().toString ().trim ();
            String f_food = ffood.getText ().toString ().trim ();
           String f_contact = fcontact.getText ().toString ().trim ();


            if (f_name.equals ( "" )) {

                fname.setError ( "Required Field.." );
            }
            else if (f_contact.equals ( "" )) {
                fcontact.setError ( "Required Field.." );
            }

            else if (f_college.equals ( "" )) {
                fcollege.setError ( "Required Field.." );
            } else if (f_food.equals ( "" )) {
               ffood.setError ( "Required Field.." );

            }

            else {
              /*
               we also add like this

               mClass.setName ( f_name );
                mClass.setCollege ( f_college );
                mClass.setContact ( f_contact );
                mClass.setFood ( f_food );
                */

              //for date
              Calendar calendar=Calendar.getInstance ();
                DateFormat dateFormat = new SimpleDateFormat ( "MM-dd-yyyy HH:mm:ss" );
                String date = dateFormat.format ( calendar.getTime () );

              mClass=new modelClass ( f_name,f_college,f_food,f_contact,date );

               myRef.push ().setValue ( mClass );//for insert into database
                dialog.dismiss ();
                Snackbar snackbar = Snackbar
                        .make ( coordinatorLayout , "Done" , Snackbar.LENGTH_LONG );
                snackbar.show ();

            }
        }
    } );
}
//for retrive the data use onStart
    @Override
    protected void onStart() {
        super.onStart ();
        AddData ("");
    }
    public void AddData(String data)
    {
        query=  myRef.orderByChild ( "college" ).startAt ( data ).endAt ( data + "\uf8ff" );//for search
   // options=new FirebaseRecyclerOptions.Builder<modelClass> ().setQuery ( myRef,modelClass.class ).build ();//for retrive
        options=new FirebaseRecyclerOptions.Builder<modelClass> ().setQuery ( query,modelClass.class ).build ();//for search and retrive
    adapter=new FirebaseRecyclerAdapter < modelClass, MyVIewHolder > (options)
    {

        @Override
        protected void onBindViewHolder(@NonNull MyVIewHolder holder , final  int position , @NonNull modelClass model)  //for binding the View of recycler_view_item_layout
        {

            holder.college.setText ( model.getCollege () );
            holder.contact.setText ( model.getContact ()  );
            holder.time.setText ( model.getDateTime ());
            holder.food.setText ( model.getFood () );
            holder.name.setText ( model.getName () );


         //  holder.setFoodPost ( model );

            //for post_key we simply fetch that data postion which we want to delete
            post_key=getRef ( position ).getKey ();

            //for Delete the particular data when press long click
            holder.itemView.setOnLongClickListener ( new View.OnLongClickListener () {
                @Override
                public boolean onLongClick(View view) {
                    openDeleteWindow ();
                    Toast.makeText ( MainActivity.this , "Press" , Toast.LENGTH_SHORT ).show ();
                    return true;
                }
            } );

        }
        @NonNull
        @Override
        public MyVIewHolder onCreateViewHolder(@NonNull ViewGroup parent , int viewType)
        {
          View v=  LayoutInflater.from ( parent.getContext () ).inflate ( R.layout.recycler_view_item_layout,parent,false );
            return new MyVIewHolder ( v );

        }
    };
        adapter.startListening ();
    recyclerView.setAdapter ( adapter );
    }

    @Override
    protected void onStop() {
        super.onStop();

        if (adapter!= null) {
            adapter.stopListening ();
        }
    }
//for openDeleteWindow Window When LongPress on retrive Items and delete that items
public void openDeleteWindow()
{
    AlertDialog myQuittingDialogBox = new AlertDialog.Builder(this)
            // set message, title, and icon
            .setTitle("Delete")
            .setMessage("Do you want to Delete")
            .setIcon(android.R.drawable.ic_delete)

            .setPositiveButton("Delete", new DialogInterface.OnClickListener() {

                public void onClick(DialogInterface dialog, int whichButton) {
                    //your deleting code
                    myRef.child ( post_key ).removeValue ();


                }

            })
            .setNegativeButton("cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                    dialog.dismiss();

                }
            })
            .show ();
}

//for Showing AlertBOx of internetconnection
    public  void internetConnectionDialogboX()
    {
        AlertDialog internetDialog = new AlertDialog.Builder(this)
                // set message, title, and icon
                .setTitle("Connect to a Network")
                .setMessage("To use Application,turn on mobile data of connect to Wi-fi.")
                .setNegativeButton("ok", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {

                        finish(); //for exit with the application

                    }
                })
                .show ();
    }

//now check the internet conection
    public void checkNetworkConnectionIsAvailable()
    {
        ConnectivityManager connectivityManager=(ConnectivityManager)getSystemService ( Context.CONNECTIVITY_SERVICE );
        NetworkInfo activNetwork = connectivityManager.getActiveNetworkInfo ();
        boolean isConnected = activNetwork != null && activNetwork.isConnected ();

        if(isConnected)
        {
        // onStart ();
        }
        else
        {
            internetConnectionDialogboX ();
        }

    }

    //menu
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater ().inflate ( R.menu.menu_main , menu );

        //for Search
        MenuItem menuItem=menu.findItem (  R.id.search );
        SearchView searchView=(SearchView )menuItem.getActionView ();
        searchView.setQueryHint ( "Enter College Name" );
        searchView.setOnQueryTextListener ( new SearchView.OnQueryTextListener () {
            @Override
            public boolean onQueryTextSubmit(String query) {
                Toast.makeText ( MainActivity.this , "Text Submit" , Toast.LENGTH_SHORT ).show ();
             // Query query1= myRef.orderByChild ( "name" ).startAt ( query ).endAt ( query + "\uf8ff" );
                return true;
            }

            @Override
            public boolean onQueryTextChange(String newText) {

               AddData ( newText);
                return true;
            }
        } );

        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId ();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }
       /* else if(id==R.id.search)
        {
            Toast.makeText ( this , "hello Search" , Toast.LENGTH_SHORT ).show ();
            return true;
        }*/

        return super.onOptionsItemSelected ( item );
    }
}
package com.example.mynewapp;
导入android.content.Context;
导入android.content.DialogInterface;
导入android.net.ConnectivityManager;
导入android.net.NetworkInfo;
导入android.os.Bundle;
导入com.firebase.ui.database.FirebaseRecyclerAdapter;
导入com.firebase.ui.database.FirebaseRecyclerOptions;
导入com.google.android.material.floatingactionbutton.floatingactionbutton;
导入com.google.android.material.snackbar.snackbar;
导入com.google.firebase.database.DatabaseReference;
导入com.google.firebase.database.FirebaseDatabase;
导入com.google.firebase.database.Query;
导入androidx.annotation.NonNull;
导入androidx.appcompat.app.AlertDialog;
导入androidx.appcompat.app.appcompat活动;
导入androidx.appcompat.widget.SearchView;
导入androidx.appcompat.widget.Toolbar;
导入androidx.coordinatorlayout.widget.coordinatorlayout;
导入androidx.recyclerview.widget.LinearLayoutManager;
导入androidx.recyclerview.widget.recyclerview;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.view.ViewGroup;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.Toast;
导入java.text.DateFormat;
导入java.text.simpleDataFormat;
导入java.util.Calendar;
公共类MainActivity扩展了AppCompatActivity{
数据库参考myRef;
模型类mClass;
协调布局协调布局;
回收视图回收视图;
FirebaseRecyclerOptions选项;
FirebaseRecyclerAdapter适配器;
私钥;
查询;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//用于网络连接
CheckNetworkConnectionsAvailable();
//坐标布局
coordinatorLayout=findViewById(R.id.myCoordinator);
//工具栏
Toolbar Toolbar=findviewbyd(R.id.Toolbar);
设置支持操作栏(工具栏);
getSupportActionBar().setTitle(“您的食物角”);
//modelClass和firebase
modelClass mClass=newmodelclass();
//用于将数据插入firebase数据库,也可用于从数据库检索数据。
myRef=FirebaseDatabase.getInstance().getReference().child(“所有数据”);
myRef.keepSynced(true);//用于同步firebase数据
//回收视图
recyclerView=findViewById(R.id.myRecyclerView);
LinearLayoutManager LinearLayoutManager=新的LinearLayoutManager(getApplicationContext());
linearLayoutManager.setReverseLayout(true);
linearLayoutManager.setStackFromEnd(true);
recyclerView.setHasFixedSize(真);
recyclerView.setLayoutManager(linearLayoutManager);
//浮动操作按钮
FloatingActionButton FloatingActionButton=findViewById(R.id.fab);
floatingActionButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
FloatingActionButtonData();
}
} );
}
//仅适用于按浮动操作按钮
私有void FloatingActionButtonData()
{
AlertDialog.Builder myDig=新建AlertDialog.Builder(此);
LayoutInflater LayoutInflater=LayoutInflater.from(this);
视图v=LayoutFlater.充气(R.layout.inputlayout,null);
myDig.setView(v);
final AlertDialog dialog=myDig.create();
dialog.setCancelable(true);
dialog.show();
最终编辑文本fname=(编辑文本)v.findviewbyd(R.id.name);
最终编辑文本fcontact=(编辑文本)v.findViewById(R.id.contact);
最终编辑文本fcollege=(编辑文本)v.findViewById(R.id.college);
最终编辑文本ffood=(编辑文本)v.findviewbyd(R.id.food);
按钮提交=(按钮)v.findViewById(R.id.submitButton);
submit.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
字符串f_name=fname.getText().toString().trim();
字符串f_college=fcollege.getText().toString().trim();
字符串f_food=ffood.getText().toString().trim();
字符串f_contact=fcontact.getText().toString().trim();
如果(f_name.equals(“”){
fname.setError(“必填字段…”);
}
else if(f_contact.equals(“”){
fcontact.setError(“必填字段…”);
}
else if(f_college.equals(“”){
fcollege.setError(“必填字段”);
}否则如果(f_food.equals(“”){
ffood.setError(“必填字段”);
}
否则{
/*
我们也这样加上
mClass.setName(f_name);
麦卡斯特学院(f_学院);
mClass.setContact(f_contact);
mClass.setFood(f_food);
*/
//约会
Calendar=Calendar.getInstance();
DateFormat DateFormat=新的SimpleDateFormat(“MM-dd-yyyy-HH:MM:ss”);
字符串date=dateFormat.format(calendar.getTime());
mClass=新模型类(f_名称、f_学院、f_食品、f_联系人、日期);
myRef.push().setValue(mClass);//用于插入数据库
dialog.dismise();
Snackbar Snackbar=Snackbar
.使(协调)布局“做”