Android mapsActivity异步方法获取JSON

Android mapsActivity异步方法获取JSON,android,Android,我已经创建了一个基本的mapsActivity,我想从JSON字符串中获取坐标。我用于从服务器获取JSON字符串的方法是异步的,因此当我使用调试工具时,我的JSON字符串显示为空 我看到onActivityResult可以帮助解决我的问题,但当我键入“@Override”时,它会说“方法不会从其超类重写方法”。我应该怎么做才能在MapsActivity中获得包含数据的JSON字符串 MapsActivity.java public class MapsActivity extends Fragm

我已经创建了一个基本的mapsActivity,我想从JSON字符串中获取坐标。我用于从服务器获取JSON字符串的方法是异步的,因此当我使用调试工具时,我的JSON字符串显示为空

我看到onActivityResult可以帮助解决我的问题,但当我键入“@Override”时,它会说“方法不会从其超类重写方法”。我应该怎么做才能在MapsActivity中获得包含数据的JSON字符串

MapsActivity.java

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

private GoogleMap mMap;

String json_string; //ici seront stockées les information concernant les établissements

protected static String JSON_STRING;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    // Obtain the SupportMapFragment and get notified when the map is ready to be used.
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
}


@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1 && resultCode == RESULT_OK){
        json_string = data.getStringExtra("JSON_string");
    }
}

@Override
public void onMapReady(GoogleMap googleMap) {



    Intent myIntent = new Intent(this, getJSON.class);
    startActivityForResult(myIntent, 1);


    /*
    LatLng flams = new LatLng(47.221626, -1.557679);
    mMap.addMarker(new MarkerOptions().position(flams).title("Le flams"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(flams));*/
}
}

getJSON.java

public class getJSON extends AppCompatActivity {

String json_string;
protected static String JSON_STRING; //string for both getJSON and mapsActivity

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

        new BackgroundTask().execute();

}


public class BackgroundTask extends AsyncTask<Void, Void, String> {


    String json_url = "the URL of my server";

    @Override
    protected String doInBackground(Void... voids) {

        try {
            URL url = new URL(json_url);
            HttpURLConnection httpURLConnection =(HttpURLConnection) url.openConnection();
            InputStream inputStream = httpURLConnection.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            StringBuilder stringBuilder = new StringBuilder();

            while ((json_string = bufferedReader.readLine()) != null){
                stringBuilder.append(json_string+"\n");
            }

            bufferedReader.close();
            inputStream.close();
            httpURLConnection.disconnect();
            return stringBuilder.toString().trim(); <= while this shows the data

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }

       public BackgroundTask() {
        super();
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected void onPostExecute(String result) {
        JSON_STRING=result;
        Intent intent = new Intent();
        intent.putExtra("JSON_string", JSON_STRING);
        setResult(RESULT_OK, intent);
        finish();
    }
public类getJSON扩展了appcompative活动{
字符串json_字符串;
受保护的静态字符串JSON_String;//getJSON和mapsActivity的字符串
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
新建BackgroundTask().execute();
}
公共类BackgroundTask扩展了AsyncTask{
String json_url=“我的服务器的url”;
@凌驾
受保护的字符串背景(无效…无效){
试一试{
URL=新URL(json_URL);
HttpURLConnection HttpURLConnection=(HttpURLConnection)url.openConnection();
InputStream InputStream=httpURLConnection.getInputStream();
BufferedReader BufferedReader=新的BufferedReader(新的InputStreamReader(inputStream));
StringBuilder StringBuilder=新的StringBuilder();
而((json_string=bufferedReader.readLine())!=null){
追加(json_字符串+“\n”);
}
bufferedReader.close();
inputStream.close();
httpURLConnection.disconnect();

返回stringBuilder.toString().trim();根据您的代码,当您启动activity
getJSON
时,将需要时间从服务器端获取数据,这就是您无法立即获取json_字符串值的原因。顺便说一句,请遵循我的指导原则正确创建逻辑

当活动A
startActivityForResult
时,将在
onActivityResult
方法中获得结果

在代码中,当您启动活动
getJSON
时,JSON_字符串需要发送回
mapsActivity
,如下代码所示:

   Intent intent = new Intent();
   intent.putExtra("JSON_string", JSON_STRING);
   setResult(RESULT_OK, intent);
   finish();
您将在
mapsActivity
中的方法onActivityResult
中获得结果:

   @Override
   protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
      if (requestCode == 1 && resultCode == RESULT_OK){
         json_string = data.getStringExtra("JSON_string");
      }
   }

如果不清楚,请随时询问。

当我尝试为onActivityResult添加重写时,它会说“方法不会从其超类重写方法”这正常吗?@MrRog85您的
mapsaActivity
是否从
活动扩展而来?如果是,您将看到
@Override
方法重写没有问题,但是当我在调试工具上设置断点时(在onActivityResult内),json_字符串仍然显示为空
BackgroundTask
task中的get json_字符串是如何得到的?它有数据吗?请记住,按照我上面的回答将结果设置回原来的值。是的,BackgroundTask得到了数据,我在我的代码中做了更改,就像在你的帖子中一样。你想要完整的MapsActivity类吗?它能帮助你吗?