无法使用json和onPostExecute绘制标记无响应

时间:2016-09-14 08:58:28

标签: android json google-maps google-maps-markers

我一直试图使用json绘制标记,但无法绘制它,List<Object> list = ... redisson.getBucket("yourKey").set(list); // or use Redis list object redisson.getList("yourKey").addAll(list); 我甚至无法显示吐司,但latlang是单独进入的,我只使用3-4个标记进行测试(json格式) 下面是一个json样本 -

onPostExecute

[{"name":"Thekha desi wine","address":"SR Complex, Naya Bans, Sector 15, Noida","latlang":["28.582122","77.313233"]},{"name":"Thekha desi wine","address":"SR Complex, Naya Bans, Sector 15, Noida","latlang":["28.582122","77.313233"]},{"name":"Thekha desi wine","address":"SR Complex, Naya Bans, Sector 15, Noida","latlang":["28.582122","77.313233"]}] 代码为:

mapsActivity

2 个答案:

答案 0 :(得分:0)

让我们试着在没有OnMapReady()的情况下获得一些基本功能 试试这个:

public class MapsActivity extends FragmentActivity  {
public GoogleMap mMap;

@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);
mMap = ((MapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap();

try {
    String url =  new String("http://www.loofre.com/api-for-webservice/?debug=true&action=getLocations");
    RetriveMarkerTask markerTask = new RetriveMarkerTask(this, mMap);
    markerTask.execute(url);
}catch (Exception e){
    Toast.makeText(this,"Can not fetch data",Toast.LENGTH_LONG).show();
}
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission
        (this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
    // TODO: Consider calling
    //    ActivityCompat#requestPermissions
    // here to request the missing permissions, and then overriding
    //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
    //  int[] grantResults)
    // to handle the case where the user grants the permission. See the documentation
    // for ActivityCompat#requestPermissions for more details.
    return;
}
//tool bar and other tool related on map uiSettings
mMap.setMyLocationEnabled(true);
mMap.getUiSettings().setZoomControlsEnabled(true);
mMap.getUiSettings().setMapToolbarEnabled(true);
mMap.getUiSettings().setMyLocationButtonEnabled(true);
}

public void onMapSearch (View view) throws IOException {

//hide button when button is pressed
InputMethodManager inputManager = (InputMethodManager) getSystemService(this.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);

//preview the entered address as an Tost in bar
EditText locationSearch = (EditText) findViewById(R.id.editText);
String location = locationSearch.getText().toString();

//this will animate camera and zoom 12.0f
mMap.animateCamera(CameraUpdateFactory.zoomTo(12.0f));

//further address search codes
List<Address> addressList = null;

//if nothing will be entered in the edit-text will not show a toast rather than crashing of thekha app
if (locationSearch.getText().toString().equals("")){
    Toast.makeText(this,"Bitch please enter A Value",Toast.LENGTH_LONG).show();
}
else {
    //process of exception handling and finding location
    if (location != null || !location.equals("")) {
        Geocoder geocoder = new Geocoder(this);
        try {
            addressList = geocoder.getFromLocationName(location, 1);
        } catch (IOException e) {
            e.printStackTrace();
          }
        //if address is greater than one then these processes will happen

        if(addressList.size()>0) {
            Address address = addressList.get(0);
            LatLng latLng = new LatLng(address.getLatitude(), address.getLongitude());
            mMap.addMarker(new MarkerOptions()
                    .position(latLng)
                    .title(location + " is Here- ")
                    .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)));
            mMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));

            Toast.makeText(this, location+" is here, Zoom In or Zoom Out to make your Thekha Visible ", Toast.LENGTH_LONG)
                    .show(); //popup type to show entered data
        }
        else {
            //process where entered entry will not gonna find , this will gonna a toast to show popup

            Toast.makeText(this,"Entered Address Not Found", Toast.LENGTH_LONG).show();
        }
    }
}
}

private class RetriveMarkerTask extends AsyncTask<String,Void,String> {
private Context context;
private GoogleMap gMap;

public RetriveMarkerTask(Context context, GoogleMap mMap) {
    this.context = context;
    this.gMap = mMap;
}

protected void onPreExecute(){
    Toast.makeText(context, "pre execute", Toast.LENGTH_LONG).show();
}

protected String doInBackground(String... markerGetUrl) {
    android.os.Debug.waitForDebugger();

    HttpURLConnection conn = null;
    final StringBuilder json = new StringBuilder();
    int read;
    char[] buff = new char[1024];
    try {
        //connect to the web service
        URL url = new URL(markerGetUrl[0]);
        conn = (HttpURLConnection) url.openConnection();
        //This will read the json data into string builder
        InputStreamReader in = new InputStreamReader(conn.getInputStream());
        while ((read = in.read(buff)) != -1) {
            json.append(buff, 0, read);
        }
    } catch (IOException e) {
        return null;
    } catch (Exception ex) {
        return null;
    } finally {
        if (conn != null) {
            conn.disconnect();
        }
    }
    String markersJson = new String(buff).trim();
    return markersJson;
}

protected void onPostExecute(String markers) {

    Toast.makeText(context, "Post Execute", Toast.LENGTH_LONG).show();

    LatLng dwarka = new LatLng(28.570317,77.32182);
    gMap.moveCamera(CameraUpdateFactory.newLatLngZoom(dwarka, 13));
    gMap.addMarker(
            new MarkerOptions()
                    .title("Wine Beer Liquor Shop, Sector 18, Noida")
                    .snippet("Sector 18, Near Centre Stage Mall, Noida")
                    .position(dwarka));

}
}

}

答案 1 :(得分:0)

更改

// Obtain the SupportMapFragment and get notified when the map is ready to be used.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); 

 SupportMapFragment mapFragment = ((SupportMapFragment) getChildFragmentManager()
            .findFragmentById(R.id.safety_map));

我预计,它会完美运作。祝你好运!