【问题标题】:Problems with writing JSON objects into a file将 JSON 对象写入文件的问题
【发布时间】:2016-03-02 23:52:28
【问题描述】:

我正在编写一个小应用程序,它每 10 秒获取一次您的位置,并将纬度和经度放入 JSON 对象。比它应该将 Lat 和 Lon 写入外部存储中的文件。我运行了应用程序,我可以看到 file.json 但只有一个字符串 Lon 进入。相反,它应该在每次位置更改时写入几个值 Lon Lat。问题是什么?

代码如下:

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();
    }
}

我哪里做错了?

【问题讨论】:

  • 该文件应至少包含一对经纬度。不是吗?您的问题听起来好像只包含经度
  • 另外,我不确定 LocationManager 对象的详细信息,但如果您的设备根本没有移动(或不到几米),我不认为 onLocationChanged应该触发
  • 没错,只有一个经度值,没有别的……即使设备不动,我也能看到位置有时会发生一些变化。

标签: android json file


【解决方案1】:

当您在某个时间间隔请求位置更新时,您无法保证您会在该时间间隔内收到更新。根据javadoc,您可以确定的是更新不会比给定的持续时间快。如果 GPS 没有获得更新的位置,则可能永远不会调用侦听器。首先获得 GPS 锁定可能需要一些时间。

如果您确实需要每 10 秒提供一次坐标,请考虑使用 Handler 每 10 秒安排一次 Runnable,轮询 getLastKnownLocation 的值并确保返回值不为空。返回的位置可能不准确,但至少是一些东西。

【讨论】:

  • 那么,我该怎么办?我应该在哪里调用调用 Runnable 的处理程序?抱歉,我还不是很擅长 Android。我在练习。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-18
  • 1970-01-01
  • 2017-06-29
  • 1970-01-01
  • 1970-01-01
  • 2018-07-14
相关资源
最近更新 更多