2017-02-19 3 views
0

Ich versuche, meine Markierungen auf google map zu setzen. Aber obwohl ich debugge (alles sieht gut aus), meine Markierungen nicht auf der Karte angezeigt. Kannst du mir helfen, was ist das Problem?BitmapDescriptorFactory.fromPath Bilder, die nicht auf der Karte angezeigt werden

           String imageInSD = Config.APP_IMAGES_URL + sh.cover_image_file;[enter image description here][1] 



                   customMarker = googleMap.addMarker(new MarkerOptions() 
                     .position(markerLatLng) 
                     .title(sh.name) 
                     .snippet(sh.description.substring(0, Math.min(sh.description.length(), 80)) + "...") 
                     .icon(BitmapDescriptorFactory.fromPath(imageInSD)) // in debug looking www.asd.com/abc.jpg(right paths) 
                     .anchor(0.5f, 1)); 

Ich habe auch versucht, diese

.icon (BitmapDescriptorFactory.FromFile (imageInSD))

aber nicht? Wo ist das Problem Suchen Sie den richtigen Pfad im Debug. Screenshot hinzugefügt. Aber in der Anwendung Karte ist Null

+0

Wo * genau * steht 'imageInSD'? Ihr Kommentar ist kein vollständiger Dateisystempfad. – CommonsWare

+0

Ich konnte es nicht entschuldigen. Was hast du gemeint? ist es Bildpfad. Ich habe eine "for" -Schleife. Everytime-Marker müssen ein anderes Bild bekommen. Wenn ich debugge ich kontrollierte ImageInSD jedes Mal erhalten TRUE Pfad. Aber in der Anwendung funktioniert es nicht. Null-Karte zeigt. für exm 1.loop -> imageInSD = www.abc.com/1.jpeg 2.loop -> imageInSD = www.abc.com/2.jpeg ... hier BitmapDescriptorFactory in. fromPath (imageInSD) funktioniert nicht ich denke – user3404273

Antwort

0

www.abc.com/1.jpeg ist kein gültiger Dateisystempfad. Es sieht wie eine HTTP-URL aus, deren Schema fehlt.

fromPath() nimmt einen Dateisystempfad. Geben Sie ein File Objekt, das auf Ihr Bild verweist, mit getAbsolutePath() in eine String Darstellung eines Dateisystempfads um und übergeben Sie diesen Wert an fromPath().

Wenn Ihre imageInSD Werte tatsächlich URLs sind, müssen Sie diese Bilder zuerst herunterladen. BitmapDescriptorFactory lädt diese nicht für Sie herunter. Und die meisten Bibliotheken zum Laden von Bildern zielen auf Dinge wie ImageView, so dass die meisten davon nicht helfen werden. Sie können sehen, ob jemand ein Rezept für die Verwendung einer Bibliothek wie Picasso hat, um einen Marker zu füllen. Andernfalls verwenden Sie HttpURLConnection, OkHttp usw., um das Bild herunterzuladen, bevor Sie den Marker hinzufügen.

+0

Eigentlich kann ich falsch sagen. Ja, ich muss http URL von meinem Server für jedes Bild abrufen. Aber in .icon (BitmapDescriptorFactory.fromPath (imageInSD)) konnte ich nicht. Können Sie mir helfen, wie kann ich lösen? Danke – user3404273

+0

@ user3404273: "Ich brauche http URL von meinem Server für jedes Bild" - Sie müssen diese Bilder selbst herunterladen. Siehe die aktualisierte Antwort. – CommonsWare

+0

Danke, aber haben Sie ein Codebeispiel? Ich bin nicht so professionell. Hängt von deinen Wörtern ab, ich brauche etwas Hilfe, um Daten zu erhalten. – user3404273

0

Hier ist ein Beispiel für eine Klasse, die zum Herunterladen von einer Website und zum Konvertieren in etwas verwendet werden kann, das von gmaps-APIs angezeigt werden kann. Ich hob das von einem Projekt auf, an dem ich arbeite, und zog die nicht anwendbaren Sachen heraus - versuchte nicht, es zu kompilieren, aber es sollte nah sein.

class DownloadWebpageAsynch extends AsyncTask<String, Void, Integer> 
{ 
    private String fileName; 
    private final String TAG = "DownloadWebpageAsynch"; 

    // onPostExecute displays the results of the AsyncTask. 
    @Override 
    protected void onPostExecute(Integer result) 
    { 
     // Perforrm any work here on the UI thread 
    // in your case, create the bitmap for the google map 

    BitmapDescriptor bd = BitmapDescriptorFactory.fromPath(fileName); 

    // use bd in google map calls as the bitmap to add to the map 
    } 

    protected void DownloadComplete(BufferedInputStream inStream) 
    { 
    // Perform work here upon download complete on the background thread 
     // inStream is what was returned by the web server 

    // Safe file to temp storage 
    try 
    { 
     File tempFile = File.createTempFile("1", ".jpg"); 
     tempFile.deleteOnExit(); 
     fileName = tempFile.toString(); 
     FileOutputStream fos = new FileOutputStream(tempFile); 
     byte[] readyBytes = new byte[1000]; 
     int numRead = inStream.read(readyBytes, 0, 999); 
     while(numRead != -1) 
     { 
     fos.write(readyBytes, 0, numRead); 
     numRead = inStream.read(readyBytes, 0, 999); 
     } 
     fos.close(); 
    } catch (IOException e) 
    { 
     e.printStackTrace(); 
    } 
    } 



    @Override 
    protected Integer doInBackground(String... urls) 
    { 
     // params comes from the execute() call: params[0] is the url. 
     try 
     { 
     downloadUrl(urls[0]); 
     } 
     catch (IOException e) 
     { 
      Log.d(TAG, "Failed with exception " + e.toString()); 
     } 
     return 0; 
    } 

    // Given a URL, establishes an HttpUrlConnection and retrieves 
    // the web page content as a InputStream, which it returns as 
    // a string. 
    private void downloadUrl(String myurl) throws IOException 
    { 
     BufferedInputStream is = null; 
     downloadFailed = false; 

     try 
     { 
      URL url = new URL(myurl); 
      HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
      conn.setReadTimeout(10000); // 10 second timeout 
      conn.setConnectTimeout(10000); // 10 second timeout 
      conn.setDoInput(true); 
      // Starts the query 
      conn.connect(); 
      responseCode = conn.getResponseCode(); 
      if(responseCode != 200) 
      { 
       Log.d(TAG, "Download Failed"); 
      } 
      else 
      { 
      DownloadComplete(new BufferedInputStream(conn.getInputStream()); 
      } 
      conn.disconnect(); 
     } 
     catch (SocketTimeoutException e) 
     { 
     Log.d(TAG, "Failed with exception " + e.toString()); 
     } 
     finally 
     { 
      if (is != null) 
      { 
       is.close(); 
      } 
     } 
    }// private String downloadUrl(String myurl) throws IOException 

Hoffe, das hilft.

Verwandte Themen