Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.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 在android中保存当前位置_Java_Android_Firebase_Save_Location - Fatal编程技术网

Java 在android中保存当前位置

Java 在android中保存当前位置,java,android,firebase,save,location,Java,Android,Firebase,Save,Location,我有一个问题,我更新我的位置后,每10秒。我想把我的起始位置也存储在firebase上。。。。我无法理解如何存储起始点,因为firebase正在更新。。。这是我的密码 i am having an issue that i am updating my location after every 10 sec. i want to store my starting position as well on firebase .... i cant understand how to store

我有一个问题,我更新我的位置后,每10秒。我想把我的起始位置也存储在firebase上。。。。我无法理解如何存储起始点,因为firebase正在更新。。。这是我的密码

 i am having an issue that i am updating my location after every 10 sec. i want to store my starting position as well on firebase .... i cant understand how to store the starting point because the firebase is updating ... here is my code 
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.app.Activity;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.content.Context;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.iid.FirebaseInstanceId;



import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;


public class Location_activity extends Activity implements LocationListener  , ScheduledExecutorService{
    private TextView latituteField, longitudeField;
    private LocationManager lm;
    private String provider;
    private Button startbtn , cancelbtn;
    DatabaseReference mDatabaseref;
    FirebaseUser current_user;


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


        latituteField = (TextView) findViewById(R.id.TextView02);
        longitudeField = (TextView) findViewById(R.id.TextView04);
        startbtn = (Button) findViewById(R.id.btn_start);
        cancelbtn = (Button) findViewById(R.id.btn_cancel);

        startbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                final ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(5);

                scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
                    public void run() {
                        lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
                        Location myLocation = null;
                        if (lm != null) {
                            if (ActivityCompat.checkSelfPermission(Location_activity.this,
                                    android.Manifest.permission.ACCESS_FINE_LOCATION)
                                    != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(Location_activity.this,
                                    android.Manifest.permission.ACCESS_COARSE_LOCATION)
                                    != PackageManager.PERMISSION_GRANTED) {

                                return;
                            }

                                myLocation = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);




                            if (myLocation == null) {
                                Criteria criteria = new Criteria();
                                criteria.setAccuracy(Criteria.ACCURACY_COARSE);
                                String provider = lm.getBestProvider(criteria, true);
                                myLocation = lm.getLastKnownLocation(provider);
                            }

                            if (myLocation == null) {
                                myLocation = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                            }
                            if (myLocation != null){
                                System.out.println("Provider " + provider + " has been selected.");
                                onLocationChanged(myLocation);
                            }
                        }

                    }
                }, 1, 10, TimeUnit.SECONDS);

                cancelbtn.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                      scheduleTaskExecutor.shutdown();
                    }
                });
            }
        });

    }



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

    }


    @Override
    protected void onPause() {
        super.onPause();
        lm.removeUpdates(this);
    }

    @Override
        public void onLocationChanged(Location location) {

            double lat = (double) (location.getLatitude());
            double lng = (double) (location.getLongitude());



            current_user = FirebaseAuth.getInstance().getCurrentUser();
            String uid = current_user.getUid();
            mDatabaseref = FirebaseDatabase.getInstance().getReference().child("location").child(uid);
            String device_token = FirebaseInstanceId.getInstance().getToken();

            HashMap<String, String> userMap = new HashMap<>();
            userMap.put("latitude", String.valueOf(lat));
            userMap.put("longitude" , String.valueOf(lng));

            userMap.put("device_token", device_token);
            mDatabaseref.setValue(userMap).addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    Toast.makeText(getApplicationContext() , "Location updated" , Toast.LENGTH_SHORT ).show();
                }
            });


    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub




    }

    @Override
    public void onProviderEnabled(String provider) {
        Toast.makeText(this, "Enabled new provider " + provider,
                Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onProviderDisabled(String provider) {
        Toast.makeText(this, "Disabled provider " + provider,
                Toast.LENGTH_SHORT).show();
    }

    @NonNull
    @Override
    public ScheduledFuture<?> schedule(@NonNull Runnable command, long delay, @NonNull TimeUnit unit) {
        return null;
    }

    @NonNull
    @Override
    public <V> ScheduledFuture<V> schedule(@NonNull Callable<V> callable, long delay, @NonNull TimeUnit unit) {
        return null;
    }

    @NonNull
    @Override
    public ScheduledFuture<?> scheduleAtFixedRate(@NonNull Runnable command, long initialDelay, long period, @NonNull TimeUnit unit) {
        return null;
    }

    @NonNull
    @Override
    public ScheduledFuture<?> scheduleWithFixedDelay(@NonNull Runnable command, long initialDelay, long delay, @NonNull TimeUnit unit) {
        return null;
    }

    @Override
    public void shutdown() {

    }

    @NonNull
    @Override
    public List<Runnable> shutdownNow() {
        return null;
    }

    @Override
    public boolean isShutdown() {
        return false;
    }

    @Override
    public boolean isTerminated() {
        return false;
    }

    @Override
    public boolean awaitTermination(long timeout, @NonNull TimeUnit unit) throws InterruptedException {
        return false;
    }

    @NonNull
    @Override
    public <T> Future<T> submit(@NonNull Callable<T> task) {
        return null;
    }

    @NonNull
    @Override
    public <T> Future<T> submit(@NonNull Runnable task, T result) {
        return null;
    }

    @NonNull
    @Override
    public Future<?> submit(@NonNull Runnable task) {
        return null;
    }

    @NonNull
    @Override
    public <T> List<Future<T>> invokeAll(@NonNull Collection<? extends Callable<T>> tasks) throws InterruptedException {
        return null;
    }

    @NonNull
    @Override
    public <T> List<Future<T>> invokeAll(@NonNull Collection<? extends Callable<T>> tasks, long timeout, @NonNull TimeUnit unit) throws InterruptedException {
        return null;
    }

    @NonNull
    @Override
    public <T> T invokeAny(@NonNull Collection<? extends Callable<T>> tasks) throws InterruptedException, ExecutionException {
        return null;
    }

    @Override
    public <T> T invokeAny(@NonNull Collection<? extends Callable<T>> tasks, long timeout, @NonNull TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {
        return null;
    }

    @Override
    public void execute(@NonNull Runnable command) {

    }
}
我有一个问题,我更新我的位置后,每10秒。我想把我的起始位置也存储在firebase上。。。。我无法理解如何存储起始点,因为firebase正在更新。。。这是我的密码

 i am having an issue that i am updating my location after every 10 sec. i want to store my starting position as well on firebase .... i cant understand how to store the starting point because the firebase is updating ... here is my code 
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.app.Activity;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.content.Context;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.iid.FirebaseInstanceId;



import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;


public class Location_activity extends Activity implements LocationListener  , ScheduledExecutorService{
    private TextView latituteField, longitudeField;
    private LocationManager lm;
    private String provider;
    private Button startbtn , cancelbtn;
    DatabaseReference mDatabaseref;
    FirebaseUser current_user;


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


        latituteField = (TextView) findViewById(R.id.TextView02);
        longitudeField = (TextView) findViewById(R.id.TextView04);
        startbtn = (Button) findViewById(R.id.btn_start);
        cancelbtn = (Button) findViewById(R.id.btn_cancel);

        startbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                final ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(5);

                scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
                    public void run() {
                        lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
                        Location myLocation = null;
                        if (lm != null) {
                            if (ActivityCompat.checkSelfPermission(Location_activity.this,
                                    android.Manifest.permission.ACCESS_FINE_LOCATION)
                                    != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(Location_activity.this,
                                    android.Manifest.permission.ACCESS_COARSE_LOCATION)
                                    != PackageManager.PERMISSION_GRANTED) {

                                return;
                            }

                                myLocation = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);




                            if (myLocation == null) {
                                Criteria criteria = new Criteria();
                                criteria.setAccuracy(Criteria.ACCURACY_COARSE);
                                String provider = lm.getBestProvider(criteria, true);
                                myLocation = lm.getLastKnownLocation(provider);
                            }

                            if (myLocation == null) {
                                myLocation = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                            }
                            if (myLocation != null){
                                System.out.println("Provider " + provider + " has been selected.");
                                onLocationChanged(myLocation);
                            }
                        }

                    }
                }, 1, 10, TimeUnit.SECONDS);

                cancelbtn.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                      scheduleTaskExecutor.shutdown();
                    }
                });
            }
        });

    }



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

    }


    @Override
    protected void onPause() {
        super.onPause();
        lm.removeUpdates(this);
    }

    @Override
        public void onLocationChanged(Location location) {

            double lat = (double) (location.getLatitude());
            double lng = (double) (location.getLongitude());



            current_user = FirebaseAuth.getInstance().getCurrentUser();
            String uid = current_user.getUid();
            mDatabaseref = FirebaseDatabase.getInstance().getReference().child("location").child(uid);
            String device_token = FirebaseInstanceId.getInstance().getToken();

            HashMap<String, String> userMap = new HashMap<>();
            userMap.put("latitude", String.valueOf(lat));
            userMap.put("longitude" , String.valueOf(lng));

            userMap.put("device_token", device_token);
            mDatabaseref.setValue(userMap).addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    Toast.makeText(getApplicationContext() , "Location updated" , Toast.LENGTH_SHORT ).show();
                }
            });


    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub




    }

    @Override
    public void onProviderEnabled(String provider) {
        Toast.makeText(this, "Enabled new provider " + provider,
                Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onProviderDisabled(String provider) {
        Toast.makeText(this, "Disabled provider " + provider,
                Toast.LENGTH_SHORT).show();
    }

    @NonNull
    @Override
    public ScheduledFuture<?> schedule(@NonNull Runnable command, long delay, @NonNull TimeUnit unit) {
        return null;
    }

    @NonNull
    @Override
    public <V> ScheduledFuture<V> schedule(@NonNull Callable<V> callable, long delay, @NonNull TimeUnit unit) {
        return null;
    }

    @NonNull
    @Override
    public ScheduledFuture<?> scheduleAtFixedRate(@NonNull Runnable command, long initialDelay, long period, @NonNull TimeUnit unit) {
        return null;
    }

    @NonNull
    @Override
    public ScheduledFuture<?> scheduleWithFixedDelay(@NonNull Runnable command, long initialDelay, long delay, @NonNull TimeUnit unit) {
        return null;
    }

    @Override
    public void shutdown() {

    }

    @NonNull
    @Override
    public List<Runnable> shutdownNow() {
        return null;
    }

    @Override
    public boolean isShutdown() {
        return false;
    }

    @Override
    public boolean isTerminated() {
        return false;
    }

    @Override
    public boolean awaitTermination(long timeout, @NonNull TimeUnit unit) throws InterruptedException {
        return false;
    }

    @NonNull
    @Override
    public <T> Future<T> submit(@NonNull Callable<T> task) {
        return null;
    }

    @NonNull
    @Override
    public <T> Future<T> submit(@NonNull Runnable task, T result) {
        return null;
    }

    @NonNull
    @Override
    public Future<?> submit(@NonNull Runnable task) {
        return null;
    }

    @NonNull
    @Override
    public <T> List<Future<T>> invokeAll(@NonNull Collection<? extends Callable<T>> tasks) throws InterruptedException {
        return null;
    }

    @NonNull
    @Override
    public <T> List<Future<T>> invokeAll(@NonNull Collection<? extends Callable<T>> tasks, long timeout, @NonNull TimeUnit unit) throws InterruptedException {
        return null;
    }

    @NonNull
    @Override
    public <T> T invokeAny(@NonNull Collection<? extends Callable<T>> tasks) throws InterruptedException, ExecutionException {
        return null;
    }

    @Override
    public <T> T invokeAny(@NonNull Collection<? extends Callable<T>> tasks, long timeout, @NonNull TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {
        return null;
    }

    @Override
    public void execute(@NonNull Runnable command) {

    }
}
导入android.content.pm.PackageManager;
导入android.os.Bundle;
导入android.app.Activity;
导入android.support.annotation.NonNull;
导入android.support.v4.app.ActivityCompat;
导入android.content.Context;
导入android.location.Criteria;
导入android.location.location;
导入android.location.LocationListener;
导入android.location.LocationManager;
导入android.view.view;
导入android.widget.Button;
导入android.widget.TextView;
导入android.widget.Toast;
导入com.google.android.gms.tasks.OnCompleteListener;
导入com.google.android.gms.tasks.Task;
导入com.google.firebase.auth.FirebaseAuth;
导入com.google.firebase.auth.FirebaseUser;
导入com.google.firebase.database.DatabaseReference;
导入com.google.firebase.database.FirebaseDatabase;
导入com.google.firebase.iid.FirebaseInstanceId;
导入java.util.Collection;
导入java.util.HashMap;
导入java.util.List;
导入java.util.concurrent.Callable;
导入java.util.concurrent.ExecutionException;
导入java.util.concurrent.Executors;
导入java.util.concurrent.Future;
导入java.util.concurrent.ScheduledExecutorService;
导入java.util.concurrent.ScheduledFuture;
导入java.util.concurrent.TimeUnit;
导入java.util.concurrent.TimeoutException;
公共类Location_活动扩展活动实现LocationListener、ScheduledExecutorService{
私有文本视图latituteField、LONGTITUTEFIELD;
私人位置经理lm;
私有字符串提供者;
专用按钮startbtn、cancelbtn;
数据库引用mDatabaseref;
FirebaseUser当前用户;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u location\u activity);
latituteField=(TextView)findViewById(R.id.TextView02);
longitudeField=(TextView)findViewById(R.id.TextView04);
startbtn=(按钮)findViewById(R.id.btn\U start);
cancelbtn=(按钮)findViewById(R.id.btn\u cancel);
startbtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
最终ScheduledExecutorService scheduleTaskExecutor=Executors.newScheduledThreadPool(5);
scheduleTaskExecutor.scheduleAtFixedRate(新的可运行(){
公开募捐{
lm=(LocationManager)getSystemService(Context.LOCATION\u服务);
位置myLocation=null;
如果(lm!=null){
如果(ActivityCompat.checkSelfPermission(位置)\u activity.this,
android.Manifest.permission.ACCESS\u FINE\u位置)
!=PackageManager.PERMISSION\u已授予和&ActivityCompat.checkSelfPermission(位置\u activity.this,
android.Manifest.permission.ACCESS\u\u位置)
!=PackageManager.权限(已授予){
返回;
}
myLocation=lm.getLastKnownLocation(LocationManager.GPS\U提供程序);
if(myLocation==null){
标准=新标准();
标准.设定精度(标准.精度\u粗略);
字符串提供程序=lm.getBestProvider(条件为true);
myLocation=lm.getLastKnownLocation(提供者);
}
if(myLocation==null){
myLocation=lm.getLastKnownLocation(LocationManager.NETWORK\u提供程序);
}
if(myLocation!=null){
System.out.println(“已选择提供程序”+提供程序+”);
onLocationChanged(我的位置);
}
}
}
},1,10,时间单位为秒);
cancelbtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
scheduleTaskExecutor.shutdown();
}
});
}
});
}
@凌驾
受保护的void onResume(){
super.onResume();
}
@凌驾
受保护的void onPause(){
super.onPause();
lm.移除更新(本);
}
@凌驾
已更改位置上的公共无效(位置){
double lat=(double)(location.getLatitude());
double lng=(double)(location.getLongitude());
current_user=FirebaseAuth.getInstance().getCurrentUser();
字符串uid=current_user.getUid();
mDatabaseref=FirebaseDatabase.getInstance().getReference().child(“位置”).child(uid);
字符串device_token=FirebaseInstanceId.getInstance().getToken();
HashMap userMap=新的HashMap();
userMap.put(“纬度”,String.valueOf(lat));
userMap.put(“经度”,String.valueOf(lng));
put(“设备令牌”,设备令牌);
mDatabaseref.setValue(userMap).addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共无效(@NonNull T
if(!isStartingPointWritten) {
    // write your userMap to the database
    isStartingPointWritten = true;
}