Android mapsActivity异步方法获取JSON
我已经创建了一个基本的mapsActivity,我想从JSON字符串中获取坐标。我用于从服务器获取JSON字符串的方法是异步的,因此当我使用调试工具时,我的JSON字符串显示为空 我看到onActivityResult可以帮助解决我的问题,但当我键入“@Override”时,它会说“方法不会从其超类重写方法”。我应该怎么做才能在MapsActivity中获得包含数据的JSON字符串 MapsActivity.javaAndroid mapsActivity异步方法获取JSON,android,Android,我已经创建了一个基本的mapsActivity,我想从JSON字符串中获取坐标。我用于从服务器获取JSON字符串的方法是异步的,因此当我使用调试工具时,我的JSON字符串显示为空 我看到onActivityResult可以帮助解决我的问题,但当我键入“@Override”时,它会说“方法不会从其超类重写方法”。我应该怎么做才能在MapsActivity中获得包含数据的JSON字符串 MapsActivity.java public class MapsActivity extends Fragm
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();根据您的代码,当您启动activitygetJSON
时,将需要时间从服务器端获取数据,这就是您无法立即获取json_字符串值的原因。顺便说一句,请遵循我的指导原则正确创建逻辑
当活动AstartActivityForResult
时,将在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类吗?它能帮助你吗?