Android 将JSON对象写入文件时出现问题
我正在编写一个小应用程序,它每10秒获取一次您的位置,并将纬度和经度放入一个JSON对象中。然后将Lat和Lon写入外部存储器中的文件。我让你运行这个应用程序,我可以看到文件.json,但是里面只有一个字符串。相反,每次位置改变时,它应该在Lon Lat上写入两个值。有什么问题 代码如下:Android 将JSON对象写入文件时出现问题,android,json,file,Android,Json,File,我正在编写一个小应用程序,它每10秒获取一次您的位置,并将纬度和经度放入一个JSON对象中。然后将Lat和Lon写入外部存储器中的文件。我让你运行这个应用程序,我可以看到文件.json,但是里面只有一个字符串。相反,每次位置改变时,它应该在Lon Lat上写入两个值。有什么问题 代码如下: import android.os.Environment; import android.support.v7.app.AppCompatActivity; import android.os.Bundle
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.widget.TextView;
import android.util.Log;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.logging.Logger;
public class MainActivity extends AppCompatActivity implements LocationListener {
protected LocationManager locationManager;
protected LocationListener locationListener;
protected Context context;
TextView txtLat;
String lat;
String provider;
protected String latitude,longitude;
protected boolean gps_enabled,network_enabled;
JSONObject jsonObject;
FileOutputStream outputStream;
String latlon;
String filename;
File sdCardFile;
FileWriter fw;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtLat = (TextView) findViewById(R.id.textview1);
filename="salvataggi.json";
sdCardFile = new File(getExternalFilesDir(null), filename);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 0, this);
}
@Override
public void onLocationChanged(Location location) {
txtLat = (TextView) findViewById(R.id.textview1);
txtLat.setText("Latitude:" + location.getLatitude() + ", Longitude:" + location.getLongitude());
try {
jsonObject = new JSONObject();
jsonObject.put("Lat", location.getLatitude());
jsonObject.put("Lon", location.getLongitude());
latlon=jsonObject.toString();
writeToFile(latlon, sdCardFile, fw);
}catch (JSONException je) { }
}
public static void writeToFile(String latlon, File sdCardFile, FileWriter fw) {
try{
fw = new FileWriter(sdCardFile, true);
fw.write(latlon);
fw.flush();
fw.close();
}catch(Exception e){
e.printStackTrace();
}
}
我哪里做错了?当您在某个时间间隔请求位置更新时,您无法保证您将在该时间间隔内收到更新。根据,您可以确定的是更新不会超过给定的持续时间。如果GPS没有得到更新的位置,侦听器可能永远不会被调用。首先,可能需要一些时间才能获得GPS锁定
如果你真的需要每隔10秒提供一些坐标,请考虑使用一个处理程序来调度每10秒运行一个可运行的值,以查看值并确保返回值不是NULL。返回的位置可能不准确,但至少有一些信息。
文件应至少包含一个lat-lon对。不是吗?你的问题让它听起来像只包含一个纵向对象。所以,我不确定LocationManager对象的详细信息,但是如果你的设备根本没有移动(或者不到几米),我认为不应该触发onLocationChanged
,实际上,只有一个纵向值,没有其他任何东西。。。即使设备不移动,我有时也能看到位置有点变化。那么,我该怎么办呢?我应该在哪里调用调用Runnable的处理程序?对不起,我还不太擅长安卓系统。我在练习。