Android:无法在SharedReference中存储位置
在这里,我使用用户的当前位置以及之前存储的位置,并显示它们之间的路径。 我能够获得正确的当前位置,但我试图永久存储在共享首选项中的位置只是在应用程序运行之前才被存储。一旦删除并再次打开应用程序,保存的位置将被初始化回0.0 我想在用户按下保存/更改位置按钮后永久存储一次纬度和经度 代码如下:Android:无法在SharedReference中存储位置,android,location,sharedpreferences,Android,Location,Sharedpreferences,在这里,我使用用户的当前位置以及之前存储的位置,并显示它们之间的路径。 我能够获得正确的当前位置,但我试图永久存储在共享首选项中的位置只是在应用程序运行之前才被存储。一旦删除并再次打开应用程序,保存的位置将被初始化回0.0 我想在用户按下保存/更改位置按钮后永久存储一次纬度和经度 代码如下: public class Fragment_ReachHome extends Fragment { WebView wv; ProgressDialog pg; Background bg; Alert
public class Fragment_ReachHome extends Fragment {
WebView wv;
ProgressDialog pg;
Background bg;
AlertDialog.Builder alert;
ConnectionDetector cd;
MediaPlayer exceptionNotifier;
boolean isInternetPresent = false;
LocationManager locationManager;
LocationListener locationListener;
float latitude;
float longitude;
Location loc;
public static float savelati, savelongi;
Boolean islocationmanagerrequested = false;
Button bsaveorchangeloc, bshowsavedloc;
SharedPreferences pref;
SharedPreferences.Editor edit;
Boolean islocsaved = false, isbpressed = false;
public Fragment_ReachHome() {}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_reach_home, container, false);
wv=(WebView)rootView.findViewById(R.id.webView1);
alert = new AlertDialog.Builder(getActivity());
cd = new ConnectionDetector(getActivity());
locationManager = (LocationManager) getActivity()
.getSystemService(Context.LOCATION_SERVICE);
Toast.makeText(getActivity(), "Loading... Please Wait..", Toast.LENGTH_LONG).show();
locationListener = new LocationListener() { //-----X0-- THIS SHOULD ALWAYS COME FIRST THEN X1 SHOULD BE WRITTEN
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
loc = location;
latitude = Float.valueOf((float) loc.getLatitude());
longitude = Float.valueOf((float) loc.getLongitude());
if(isbpressed){
Toast.makeText(getActivity(), "on loc change", Toast.LENGTH_LONG).show();
}
bg = new Background();
bg.execute();
}
};
try {
isInternetPresent = cd.isConnectingToInternet();
} catch (Exception e) {
Toast.makeText(getActivity(), e.toString(),
Toast.LENGTH_LONG).show();
}
if(isInternetPresent){
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER, 0, 0,
locationListener);
}else{
exceptionNotifier = MediaPlayer.create(getActivity(), R.raw.notify);
exceptionNotifier.start();
alert.setTitle("Alert!");
alert.setMessage("Internet Not Present..! ");
alert.setCancelable(true);
alert.setPositiveButton("Ok!",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
exceptionNotifier.release();
}
}).show();
}
pref = this.getActivity().getSharedPreferences("", 0);
edit=pref.edit();
bsaveorchangeloc =(Button)rootView.findViewById(R.id.button1);
bshowsavedloc =(Button)rootView.findViewById(R.id.button2);
islocsaved = pref.getBoolean("locsaved", false);
bsaveorchangeloc.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
progress();
try {
isInternetPresent = cd.isConnectingToInternet();
} catch (Exception e) {
Toast.makeText(getActivity(), e.toString(),
Toast.LENGTH_LONG).show();
}
if(isInternetPresent){
//ONLY AFTER X0 THIS MUST BE WRITTEN
Toast.makeText(getActivity(), "Saving Location!!", Toast.LENGTH_LONG).show();
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER, 0, 0,
locationListener);
isbpressed = true;
islocationmanagerrequested = true;
savelati = pref.getFloat("latestlati", Float.valueOf((float) loc.getLatitude())); //giving default value as 0
savelongi= pref.getFloat("latestlongi", Float.valueOf((float) loc.getLatitude()));
edit.putBoolean("locsaved", true);
edit.commit();
if(islocationmanagerrequested){
locationManager.removeUpdates(locationListener);
}
pg.dismiss();
}else{
exceptionNotifier = MediaPlayer.create(getActivity(), R.raw.notify);
exceptionNotifier.start();
alert.setTitle("Alert!");
alert.setMessage("Internet Not Present..! ");
alert.setCancelable(true);
alert.setPositiveButton("Ok!",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
exceptionNotifier.release();
}
}).show();
}
}
});
bshowsavedloc.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(getActivity(), savelati+","+savelongi, Toast.LENGTH_LONG).show();
}
});
wv.getSettings().setJavaScriptEnabled(true);
wv.getSettings().setLoadWithOverviewMode(true);
wv.getSettings().setUseWideViewPort(true);
wv.getSettings().setBuiltInZoomControls(true);
wv.setWebViewClient(new MyWebClient());
return rootView;
}
public void progress(){
pg = new ProgressDialog(getActivity());
pg.setTitle("");
pg.setMessage("Please Wait.........");
pg.setCancelable(false);
pg.setIndeterminate(true);
pg.show();
}
class Background extends AsyncTask<Void, Void, Void>
{
@SuppressLint("SetJavaScriptEnabled")
@Override
protected Void doInBackground(Void... arg0) {
// TODO Auto-generated method stub
try{
if(islocsaved){
wv.loadUrl("http://maps.google.com/maps?saddr="+savelati+","+savelongi+"&daddr="+loc.getLatitude()+","+loc.getLongitude());
}else{
pg.dismiss();
exceptionNotifier = MediaPlayer.create(getActivity(), R.raw.notify);
exceptionNotifier.start();
alert.setTitle("Alert!");
alert.setMessage("Your home location is not saved yet..! ");
alert.setCancelable(true);
alert.setPositiveButton("Ok!",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
exceptionNotifier.release();
}
}).show();
}
}catch(Exception e){
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
Toast.makeText(getActivity(), latitude+","+longitude, Toast.LENGTH_LONG).show();
locationManager.removeUpdates(locationListener);
}
@Override
protected void onPreExecute() {
progress();
}
}
public class MyWebClient extends WebViewClient
{
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
// TODO Auto-generated method stub
super.onPageStarted(view, url, favicon);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub
super.onPageFinished(view, url);
pg.dismiss();
}
}
}
public类片段\u ReachHome扩展片段{
网络视图;
进展对话;
背景背景;
AlertDialog.Builder警报;
连接检测器cd;
MediaPlayer例外通知程序;
布尔值isInternetPresent=false;
地点经理地点经理;
LocationListener LocationListener;
浮动纬度;
浮动经度;
位置loc;
公共静态浮动savelati、savelongi;
布尔值islocationmanagerrequested=false;
按钮BSAVE或CHANGELOC,bshowsavedloc;
共享参考优先;
SharedReferences.Editor编辑;
布尔值islocsaved=false,isbpressed=false;
公共片段_ReachHome(){}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.fragment\u reach\u home,container,false);
wv=(WebView)rootView.findviewbyd(R.id.webView1);
alert=新建AlertDialog.Builder(getActivity());
cd=新的ConnectionDetector(getActivity());
locationManager=(locationManager)getActivity()
.getSystemService(Context.LOCATION\u服务);
Toast.makeText(getActivity(),“正在加载…请稍候…”,Toast.LENGTH_LONG.show();
locationListener=new locationListener(){//----X0——这应该总是先出现,然后再写入X1
@凌驾
public void onStatusChanged(字符串提供程序、int状态、Bundle extra){
//TODO自动生成的方法存根
}
@凌驾
公共无效onProviderEnabled(字符串提供程序){
//TODO自动生成的方法存根
}
@凌驾
公共无效onProviderDisabled(字符串提供程序){
//TODO自动生成的方法存根
}
@凌驾
已更改位置上的公共无效(位置){
//TODO自动生成的方法存根
loc=位置;
纬度=Float.valueOf((Float)loc.getLatitude());
经度=Float.valueOf((Float)loc.getLongitude());
if(isb压缩){
Toast.makeText(getActivity(),“on loc change”,Toast.LENGTH_LONG.show();
}
bg=新背景();
execute();
}
};
试一试{
isInternetPresent=cd.isConnectingToInternet();
}捕获(例外e){
Toast.makeText(getActivity(),例如toString(),
Toast.LENGTH_LONG).show();
}
如果(isInternetPresent){
locationManager.RequestLocationUpdate(
LocationManager.NETWORK_提供程序,0,0,
位置(监听器);
}否则{
exceptionNotifier=MediaPlayer.create(getActivity(),R.raw.notify);
exceptionNotifier.start();
警报。设置标题(“警报!”);
alert.setMessage(“Internet不存在…”);
alert.setCancelable(真);
警报。设置积极按钮(“确定!”,
新建DialogInterface.OnClickListener(){
@凌驾
公共void onClick(对话框接口对话框,
int(其中){
//TODO自动生成的方法存根
exceptionNotifier.release();
}
}).show();
}
pref=this.getActivity().getSharedReferences(“,0);
编辑=首选编辑();
bsaveorchangeloc=(按钮)rootView.findviewbyd(R.id.button1);
bshowsavedloc=(按钮)rootView.findviewbyd(R.id.button2);
islocsaved=pref.getBoolean(“locsaved”,false);
bsavorchangeloc.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
进步();
试一试{
isInternetPresent=cd.isConnectingToInternet();
}捕获(例外e){
Toast.makeText(getActivity(),例如toString(),
Toast.LENGTH_LONG).show();
}
如果(isInternetPresent){
//只有在X0之后,才必须写入此项
Toast.makeText(getActivity(),“保存位置!!”,Toast.LENGTH\u LONG.show();
locationManager.RequestLocationUpdate(
LocationManager.NETWORK_提供程序,0,0,
位置(监听器);
isbpressed=true;
islocationmanagerrequested=true;
savelati=pref.getFloat(“latestlati”,Float.valueOf((Float)loc.getLatitude());//默认值为0
savelongi=pref.getFloat(“latestlongi”,Float.valueOf((Float)loc.getLatitude());
edit.putBoolean(“locsaved”,true);
edit.commit();
如果(islocationmanagerrequested){
locationManager.RemoveUpdate(locationListener);
}
第()页;
}否则{
exceptionNotifier=MediaPlayer.create(getActivity(),R.raw.notify);
edit.putFloat("latestlati", Float.valueOf((float) loc.getLatitude()))
edit.putFloat("latestlongi", Float.valueOf((float) loc.getLatitude()));
edit.putBoolean("locsaved", true);
edit.commit();
savelati = pref.getFloat("latestlati", 0.0);
savelongi= pref.getFloat("latestlongi", 0.0);
islocsaved=edit.getBoolean("locsaved", true);
edit.putFloat("latestlati", Float.valueOf((float) loc.getLatitude());
edit.putFloat("latestlongi", Float.valueOf((float) loc.getLongitude);
edit.putFloat("latestlati", Float.valueOf((float) loc.getLatitude()))
edit.putFloat("latestlongi", Float.valueOf((float) loc.getLatitude()));
edit.putBoolean("locsaved", false);
edit.commit();
savelati = pref.getFloat("latestlati", 0.0);
savelongi= pref.getFloat("latestlongi", 0.0);
islocsaved=edit.getBoolean("locsaved", false);