2017-02-19 22 views
0

マーカーをGoogleマップに配置しようとしています。しかし、私はデバッグをしていますが、地図上にはマーカーが表示されません。問題は何か助けてくれますか?BitmapDescriptorFactory.fromPath画像が地図上に表示されない

           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)); 

また、私はこの

.icon(BitmapDescriptorFactory.FromFile(imageInSD))

が、動作していないを試してみましたか?どこに問題がありますか デバッグで正しいパスを探しています。スクリーンショットを追加しました。しかし、アプリケーションマップはnullです

+0

ここで*正確に*は 'imageInSD'を指していますか?あなたのコメントは完全なファイルシステムのパスではありません。 – CommonsWare

+0

申し訳ありませんでした。どういう意味? 画像パスです。 私は "for"ループを持っています。毎回のマーカーは別の画像を取得する必要があります。私が制御されたimageInSDをデバッグするたびにTRUEパスを取得します。しかし、アプリケーションでは動作しません。ヌルマップが表示されます。ここBitmapDescriptorFactory中> imageInSD = www.abc.com/2.jpeg ... - > imageInSD = www.abc.com/1.jpeg 2.loop - EXM 1.loopため 。 fromPath(imageInSD)がうまく動作しないと思います。 – user3404273

答えて

0

www.abc.com/1.jpegは有効なファイルシステムパスではありません。そのスキームが欠落しているHTTP URLのように見えます。

fromPath()はファイルシステムのパスをとります。 Fileオブジェクトがイメージを指している場合は、getAbsolutePath()を使用してファイルシステムのパスをStringに変換し、その値をfromPath()に渡します。

imageInSDの値が実際にURLである場合は、まずそれらの画像をダウンロードする必要があります。 BitmapDescriptorFactoryはそれらをダウンロードしません。ほとんどの画像読み込みライブラリはImageViewのようなものを目指しているので、それらのほとんどはあなたを助けません。誰かがピカソのような図書館を使ってマーカーを埋めるためのレシピを持っているかどうかを見ることができます。それ以外の場合は、マーカーを追加する前にHttpURLConnection、OkHttpなどを使用して画像をダウンロードしてください。

+0

実際に間違っていると言えます。はい、私はすべての画像のために私のサーバーからhttpのURLを取得する必要があります。しかし、.icon(BitmapDescriptorFactory.fromPath(imageInSD))で私はcouldnt。 解決方法をもっと手伝ってもらえますか?ありがとう – user3404273

+0

@ user3404273: "私のサーバーからすべての画像のためにhttp URLを取得する必要があります" - あなたはあなた自身でそれらの画像をダウンロードする必要があります。更新された回答を参照してください。 – CommonsWare

+0

ありがとうございますが、コードサンプルはありますか?私はあまりproffesionalではない。あなたの言葉によって、私はデータを得るためにいくつかの助けが必要です。 – user3404273

0

ここでは、Webサイトからダウンロードし、gmaps APIが表示できるものに変換するために使用できるクラスの例を示します。私は作業中のプロジェクトからこれを持ち上げ、該当しないものを取り除いた。それをコンパイルしようとはしなかったが、それは近いはずだ。

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 

これが役に立ちます。

関連する問題