2

Google マップ API バージョン 2 を使用する Android アプリケーションを作成しようとしています。
デバッグで、次の命令を実行するとアプリケーションがクラッシュします。

        setContentView(R.layout.activity_poi_map);

これはエラーです:

ソースの添付ファイルに Layoutinflater.class ファイルのソースが含まれていない

理由がわかりません。ヘッダーで、クラス全体をインポートしました

android.view.*

ご回答ありがとうございます。

これはコードです:

public class PoiMap extends FragmentActivity {

    private GoogleMap pMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent callerIntent = getIntent();
        final LatLng userCoord = callerIntent.getParcelableExtra("userCoord");
        final Poi poi = (Poi) callerIntent.getSerializableExtra("poi");

        setContentView(R.layout.activity_poi_map);
        setUpMapIfNeeded(userCoord);

        // Sets a callback that's invoked when the camera changes.
        pMap.setOnCameraChangeListener(new OnCameraChangeListener() {

            @Override
            /* Only use the simpler method newLatLngBounds(boundary, padding) to generate 
             * a CameraUpdate if it is going to be used to move the camera *after* the map 
             * has undergone layout. During layout, the API calculates the display boundaries 
             * of the map which are needed to correctly project the bounding box. 
             * In comparison, you can use the CameraUpdate returned by the more complex method 
             * newLatLngBounds(boundary, width, height, padding) at any time, even before the 
             * map has undergone layout, because the API calculates the display boundaries 
             * from the arguments that you pass. 
             * @see com.google.android.gms.maps.GoogleMap.OnCameraChangeListener#onCameraChange(com.google.android.gms.maps.model.CameraPosition)
             */
            public void onCameraChange(CameraPosition arg0) {
                // Move camera.
                if (poi != null){
                    LatLng poiCoord = poi.getLatLng();
                    pMap.addMarker(new MarkerOptions()
                    .position(poiCoord)
                    .title(poi.getName())
                    .snippet(poi.getCategory())
                    .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_star)));

                    Log.d("userCoord", userCoord.toString());
                    Log.d("poiCoord", poiCoord.toString());

                    double minY = Math.min(userCoord.latitude, poiCoord.latitude);
                    double minX = Math.min(userCoord.longitude, poiCoord.longitude);
                    double maxY = Math.max(userCoord.latitude, poiCoord.latitude);
                    double maxX = Math.max(userCoord.longitude, poiCoord.longitude);

                    Log.d("minY", " " + minY);
                    Log.d("minX", " " + minX);
                    Log.d("maxY", " " + maxY);
                    Log.d("maxX", " " + maxX);

                    LatLng northEast = new LatLng(maxY, maxX);
                    LatLng southWest = new LatLng(minY, minX);
                    LatLngBounds bounds = new LatLngBounds(southWest, northEast);

                    // move camera
                    pMap.animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, 40));

                    // Remove listener to prevent position reset on camera move.
                    pMap.setOnCameraChangeListener(null);
                }
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_poi_map, menu);
        return true;
    }

    @Override
    protected void onResume() {
        super.onResume();
        setUpMapIfNeeded(new LatLng(0.0, 0.0));
    }

    private void setUpMapIfNeeded(LatLng coord) {
        // Do a null check to confirm that we have not already instantiated the map.
        if (pMap == null) {
            // Try to obtain the map from the SupportMapFragment.
            pMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
                    .getMap();
            // Check if we were successful in obtaining the map.
            if (pMap != null) {
                setUpMap(coord);
            }
        }
    }

    private void setUpMap(LatLng userCoord) {
        pMap.addMarker(new MarkerOptions()
                            .position(userCoord)
                            .title("Your location")
                            .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_user)));
        pMap.animateCamera(CameraUpdateFactory.newLatLng(userCoord));

        /* public static CameraUpdate newLatLngZoom (LatLng latLng, float zoom) 
         * Returns a CameraUpdate that moves the center of the screen to a latitude 
         * and longitude specified by a LatLng object, and moves to the given zoom 
         * level.
         * Parameters
         * latLng   a LatLng object containing the desired latitude and longitude.
         * zoom     the desired zoom level, in the range of 2.0 to 21.0. 
         * Values below this range are set to 2.0, and values above it are set to 21.0. 
         * Increase the value to zoom in. Not all areas have tiles at the largest zoom levels.
         * Returns
         * a CameraUpdate containing the transformation. 
*/
        pMap.animateCamera(CameraUpdateFactory.newLatLngZoom(userCoord, 15));

    }

}
4

2 に答える 2

2

これはよくある質問で、誰にとっても良い答えを見つけることができないので、最善を尽くしてお手伝いします。

これは、Androidのソースコードが欠落しているようです。SDKManagerを使用してEclipseでAndroidSDKのソースをダウンロードする必要があります

  1. EclipseでSDKマネージャーを開きます
  2. ソースが必要なAndroidのバージョンを見つけます。この例では、Android 4.2(API17)
  3. [AndroidSDKのソース]チェックボックスをオンにします
  4. [ #パッケージのインストール]をクリックします

例えば

ここに画像の説明を入力してください

その後、プログラムを実行して、そのエラーが発生するポイントに到達します。次に、ダウンロードしたドキュメントを添付する必要があります

短い

  1. [ソースルックアップパスの編集]ボタンをクリックします
  2. デフォルトフォルダをクリックします
  3. [追加]をクリックします
  4. [ファイルシステムディレクトリ]を選択し、[ OK ]をクリックします
  5. ダウンロードしたソースコードを見つけます。この例では、API17の人造人間17号を探します。次のようなディレクトリにありますadt-bundle\sdk\sources\android-17
  6. [OK]を数回クリックすると、ソースがリンクされます。

長さ

[ソースルックアップパスの編集]ボタンをクリックします

ここに画像の説明を入力してください

[デフォルト]フォルダーをクリックし、[追加]をクリックします

ここに画像の説明を入力してください

[ファイルシステムディレクトリ]を選択し、[ OK ]をクリックします

ここに画像の説明を入力してください

ダウンロードしたソースコードを見つけます。この例では、API17の人造人間17号を探します。次のようなディレクトリにありますadt-bundle\sdk\sources\android-17

ここに画像の説明を入力してください

[ OK]を2回クリックすると、次のようになります。

ここに画像の説明を入力してください

[ OK]をクリックして、ソースコードをお楽しみください

于 2013-02-18T19:25:46.627 に答える
0

これは通常、バイトコードが呼び出されているソース コードにアクセスできないことを意味します。例外をリストするには、元のソースが必要です。残念ながら、通常は jar 形式では入手できません。

オプションは、Android SDK を正しいリビジョンで更新して .jar ファイルを更新し、再度コンパイルして問題を修正することです。

于 2014-07-14T20:53:00.370 に答える