Builder(android.content.Context)在构建器中无法应用到?

时间:2015-05-19 09:26:25

标签: java android

我正在尝试将Google Places API实施到我的应用中,而我目前在尝试运行该应用时遇到了错误日志。

Error:(23, 28) error: no suitable constructor found for Builder(menu_1_fragment)
constructor Builder.Builder(Context,ConnectionCallbacks,OnConnectionFailedListener) is not applicable
(actual and formal argument lists differ in length)
constructor Builder.Builder(Context) is not applicable
(actual argument menu_1_fragment cannot be converted to Context by method invocation conversion)

现在,我正在尝试将Google地图实施为我创建的将显示我的应用的片段。我还想要包含场所API,我是否需要为谷歌地图创建一个单独的类,或者我可以将此代码包含在我目前正在进行的片段类中吗?

    public class menu_1_fragment  extends Fragment {
    MapView mapView;
    GoogleMap map;

    private GoogleApiClient mGoogleApiClient;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.menu1_layout, container, false);
        //--Snippet
        mGoogleApiClient = new GoogleApiClient
                .Builder(this)
                .enableAutoManage(this, 0, this)
                .addApi(Places.GEO_DATA_API)
                .addApi(Places.PLACE_DETECTION_API)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .build();
        return v;
    }

    @Override
    public void onStart() {
        super.onStart();
        if (mGoogleApiClient != null)
            mGoogleApiClient.connect();
    }

    @Override
    public void onStop() {
        if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) {
            mGoogleApiClient.disconnect();
        }
        super.onStop();
    }
}

错误发生在.Builder(this)

编辑:修改代码

`package com.examples.blahblah.blahblah;

import android.app.Activity;
import android.app.Fragment;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.support.v4.app.FragmentActivity;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.places.Places;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapView;


public class menu_1_fragment  extends Fragment implements GoogleApiClient.OnConnectionFailedListener {
    MapView mapView;
    GoogleMap map;

    private Context mContext;
    @Override
    public void onAttach(final Activity activity) {
        super.onAttach(activity);
        mContext = activity;
    }




    private GoogleApiClient mGoogleApiClient;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.menu1_layout, container, false);
        //--Snippet
        mGoogleApiClient = new GoogleApiClient
                .Builder(mContext )
                .enableAutoManage(this, 0, this)
                .addApi(Places.GEO_DATA_API)
                .addApi(Places.PLACE_DETECTION_API)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .build();
        return v;
    }

    @Override
    public void onStart() {
        super.onStart();
        if (mGoogleApiClient != null)
            mGoogleApiClient.connect();
    }

    @Override
    public void onStop() {
        if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) {
            mGoogleApiClient.disconnect();
        }
        super.onStop();
    }

    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {

    }
}
`

现在正在

上发生新错误
   .enableAutoManage(this, 0, this)

并告诉我它错误的第一个参数类型?

2 个答案:

答案 0 :(得分:3)

您需要activity context。所以试试这个。

在你的Fragment类中

private Context mContext
@Override
public void onAttach(final Activity activity) {
    super.onAttach(activity);
    mContext = activity;
} 
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.menu1_layout, container, false);
    //--Snippet
    mGoogleApiClient = new GoogleApiClient
            .Builder(mContext )
            .addApi(Places.GEO_DATA_API)
            .addApi(Places.PLACE_DETECTION_API)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .build();
    return v;
}

跳它会帮助你。

更新:

我已删除.enableAutoManage(this,0,this);

有关详情,请访问here

答案 1 :(得分:2)

您的Fragment未实现所需的界面。使用this作为第三个参数,您声明您的Fragment是方法本身所需的类的对象。构建器还期望Context对象作为第一个参数而不是Fragment的实例,您可以使用getActivity()

来检索该实例