2017-02-27 10 views
0

Ich bin neu bei Android-Entwicklung. Ich versuche, einen Google-Marker auf meiner App-Karte hinzuzufügen, er wird jedoch nicht angezeigt. Ich kann einen Marker setzen, wenn der Marker ist & Lng ist eine doppelte Zahl, aber wenn ich die API-Daten in sie einfügen wird es nicht angezeigt.Ein Vorschlag? Danke vielmals.Android google map Marker zeigt nicht

@Override 
public void onMapReady(final GoogleMap googleMap) { 
    this.googleMap = googleMap; 

    // Add a marker in Sydney and move the camera 
    getLocation(); 

    // This marker will show at my app screen ! 
    LatLng latLng = new LatLng(24.9992666, 121.5082287); 
    googleMap.addMarker(new MarkerOptions().position(latLng) 
      .title("This is office Marker") 
    ); 
    googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); 





    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; 
    } 
    this.googleMap.setMyLocationEnabled(true); 




    HttpUtil.sendHttpRequest("http://113.10.198.159/appapi/getWIFIList", new HttpCallbackListener() { 
     @Override 
     public void onFinish(String response) { 
      Gson gson = new Gson(); 
      JsonBean jsonBean = gson.fromJson(response, JsonBean.class); 

      Log.d(TAG, "【】【id】【】" + jsonBean.getResult().get(0).getId()); 
      Log.d(TAG, "【】【merchant_id】【】" + jsonBean.getResult().get(0).getMerchant_id()); 
      Log.d(TAG, "【】【merchant_name】【】" + jsonBean.getResult().get(0).getMerchant_name()); 
      Log.d(TAG, "【】【city】【】" + jsonBean.getResult().get(0).getCity()); 
      Log.d(TAG, "【】【area】【】" + jsonBean.getResult().get(0).getArea()); 
      Log.d(TAG, "【】【address】【】" + jsonBean.getResult().get(0).getAddress()); 
      Log.d(TAG, "【】【lat】【】" + jsonBean.getResult().get(0).getLat()); 
      Log.d(TAG, "【】【lng】【】" + jsonBean.getResult().get(0).getLng()); 
      Log.d(TAG, "【】【addTime】【】" + jsonBean.getResult().get(0).getAddTime()); 
      Log.d(TAG, "【】【dlat】【】" + jsonBean.getResult().get(0).getDlat()); 
      Log.d(TAG, "【】【dlng】【】" + jsonBean.getResult().get(0).getDlng()); 
      Log.d(TAG, "【】【wificode】【】" + jsonBean.getResult().get(0).getWificode()); 
      Log.d(TAG, "【】【upstream】【】" + jsonBean.getResult().get(0).getUpstream()); 
      Log.d(TAG, "【】【downstream】【】" + jsonBean.getResult().get(0).getDownstream()); 

      //// This marker can not show at my app screen 
      LatLng latLng = new LatLng(jsonBean.getResult().get(0).getDlat(), jsonBean.getResult().get(0).getDlng()); 
      Marker marker = googleMap.addMarker(new MarkerOptions().position(latLng) 
        .title("This is Test Marker") 
      ); 

     } 

     @Override 
     public void onError(Exception e) { 

     } 
    }); 
} 



public class HttpUtil { 
public static void sendHttpRequest(final String address, final HttpCallbackListener listener) { 
    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      try { 
       OkHttpClient client = new OkHttpClient(); 
       String s1 = "lat"; 
       String s2 = "24.9992666"; 
       String s3 = "lng"; 
       String s4 = "121.5082287"; 
       RequestBody requestBody = new FormBody.Builder() 
         .add(s1, s2) 
         .add(s3, s4) 
         .build(); 
       Request request = new Request.Builder() 
         .url(address) 
         .post(requestBody) //post 
         .build(); 
       Response response = client.newCall(request).execute(); 
       String responseData = response.body().string(); 
       if (listener != null) { 
        // onFinish() method 
        listener.onFinish(responseData); 
       } 
      } catch (Exception e) { 
       if (listener != null) { 
        // onError() method 
        listener.onError(e); 
       } 

      } 
     } 
    }).start(); 
} 

}

+0

Code bitte. Danke. http://StackOverflow.com/Help/Mcve –

+0

Bitte Code hinzufügen, um eine Idee zu bekommen, was Sie versucht haben? –

+0

@SouravGanguly Hier ist mein Code, dies ist die erste Frage, wenn ich Stackoverflow verwende, tut mir leid, ich bin ein neuer Typ. – JackenLiu

Antwort

0

Ist die Karte shoiwing up? Was ist in Ihrem getLocation(); Funktion, wenn es nicht so etwas wie die folgenden Ergebnisse, dann fügen Sie es

SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
      .findFragmentById(R.id.map); 
mapFragment.getMapAsync(this); 

Auch in vergrößern und verkleinern erinnern und die Karte schwenken um, kann die Markierung aufgetragen ist, wo man es nicht erwartet werden. Wenn es immer noch nicht funktioniert, folgen Sie diesem Tutorial, es muss funktionieren. google maps with marker

+0

Ja, die Karte erscheint auch. Ich kann den ersten Marker auf meinem Kartenbildschirm sehen, aber der zweite kann nicht angezeigt werden. Das bringt mich wirklich um. – JackenLiu

+0

können Sie Ihren gesamten mainActivity.java Code, und was sind die Ergebnisse erhalten von http://113.10.198.159/appapi/getWIFIList, wenn ich es versuchte ich habe fast nichts, stellen Sie sicher, dass es erhält richtige Koordinaten parse sie doppelt vorher versuchen, sie auf der Karte zu plotten, wenn immer noch nicht funktioniert, überprüfen LOGCAT Logs sorgfältig und werfen Sie einen Blick auf diesen Link https://gist.github.com/saxman/5347195 – burgur

+0

Vielen Dank! Aber ich repariere es schon, ich lege den Problemcode in den Handler und es funktioniert schon! Trotzdem danke. – JackenLiu

0

Sind Sie sicher, dass Sie den richtigen Wert aus dem JSON erhalten? Es kann eine Zeichenfolge zurückgeben. Sie können versuchen, es in die valueOf konvertieren, um den gewünschten Typ zu erhalten.

Für ein doppel wäre es so etwas wie:

double lat = Double.valueOf(jsonBean.getResult().get(0).getDlat()); 
+0

Ja der Datentyp ist wahr, ich benutze Postman Check ist. Der zweite Marker hat alle einen Wert, wenn ich die App debugge, aber es kann immer noch nicht auf dem Bildschirm angezeigt werden. Auch das Android Studio zeigt die Debug-Meldungen der App über Handler an. – JackenLiu