Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 谷歌开发者页面android中的位置示例_Java_Android_Eclipse - Fatal编程技术网

Java 谷歌开发者页面android中的位置示例

Java 谷歌开发者页面android中的位置示例,java,android,eclipse,Java,Android,Eclipse,我正在尝试使用在本页上找到的示例获取location对象: 我完成的代码如下所示: package com.example.locationdocseg; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.GooglePlayServicesClient; import com.google.android.gms.common.GooglePlayServi

我正在尝试使用在本页上找到的示例获取location对象:

我完成的代码如下所示:

package com.example.locationdocseg;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesClient;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.location.LocationClient;

import android.location.Location;
import android.os.Bundle;
import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.content.IntentSender;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.Menu;
import android.widget.Toast;

public class MainActivity extends FragmentActivity implements
GooglePlayServicesClient.ConnectionCallbacks,
GooglePlayServicesClient.OnConnectionFailedListener {
     // Global constants
    /*
     * Define a request code to send to Google Play services
     * This code is returned in Activity.onActivityResult
     */
    private final static int
            CONNECTION_FAILURE_RESOLUTION_REQUEST = 9000;
    LocationClient mLocationClient;
    Location mCurrentLocation;
    double current_latitude,current_longitude;

    // Define a DialogFragment that displays the error dialog
    public static class ErrorDialogFragment extends DialogFragment {
        // Global field to contain the error dialog
        private Dialog mDialog;
        // Default constructor. Sets the dialog field to null
        public ErrorDialogFragment() {
            super();
            mDialog = null;
        }
        // Set the dialog to display
        public void setDialog(Dialog dialog) {
            mDialog = dialog;
        }
        // Return a Dialog to the DialogFragment.
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            return mDialog;
        }
    }

    /*
     * Handle results returned to the FragmentActivity
     * by Google Play services
     */
    @Override
    protected void onActivityResult(
            int requestCode, int resultCode, Intent data) {
        // Decide what to do based on the original request code
        switch (requestCode) {

            case CONNECTION_FAILURE_RESOLUTION_REQUEST :
            /*
             * If the result code is Activity.RESULT_OK, try
             * to connect again
             */
                switch (resultCode) {
                    case Activity.RESULT_OK :
                    /*
                     * Try the request again
                     */

                    break;
                }

        }
     }

    private boolean servicesConnected() {
        // Check that Google Play services is available
        int resultCode =
                GooglePlayServicesUtil.
                        isGooglePlayServicesAvailable(this);
        // If Google Play services is available
        if (ConnectionResult.SUCCESS == resultCode) {
            // In debug mode, log the status
            Log.d("Location Updates",
                    "Google Play services is available.");
            // Continue
            return true;
        // Google Play services was not available for some reason.
        // resultCode holds the error code.
        } else {
            // Get the error dialog from Google Play services
            Dialog errorDialog = GooglePlayServicesUtil.getErrorDialog(
                    resultCode,
                    this,
                    CONNECTION_FAILURE_RESOLUTION_REQUEST);

            // If Google Play services can provide an error dialog
            if (errorDialog != null) {
                // Create a new DialogFragment for the error dialog
                ErrorDialogFragment errorFragment =
                        new ErrorDialogFragment();
                // Set the dialog in the DialogFragment
                errorFragment.setDialog(errorDialog);
                // Show the error dialog in the DialogFragment
                errorFragment.show(getSupportFragmentManager(),
                        "Location Updates");
            }
            return false;
        }
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

          mLocationClient = new LocationClient(this, this, this);

          mCurrentLocation=mLocationClient.getLastLocation();

          current_latitude=mCurrentLocation.getLatitude();
          current_longitude=mCurrentLocation.getLongitude();
          Toast.makeText(getApplicationContext(),current_latitude+" "+current_longitude,Toast.LENGTH_LONG).show();


    }

     protected void onStart() {
            super.onStart();
            // Connect the client.
            mLocationClient.connect();
        }

        /*
         * Called when the Activity is no longer visible.
         */
        @Override
        protected void onStop() {
            // Disconnecting the client invalidates it.
            mLocationClient.disconnect();
            super.onStop();
        }


    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {
        /*
         * Google Play services can resolve some errors it detects.
         * If the error has a resolution, try sending an Intent to
         * start a Google Play services activity that can resolve
         * error.
         */
        if (connectionResult.hasResolution()) {
            try {
                // Start an Activity that tries to resolve the error
                connectionResult.startResolutionForResult(
                        this,
                        CONNECTION_FAILURE_RESOLUTION_REQUEST);
                /*
                 * Thrown if Google Play services canceled the original
                 * PendingIntent
                 */
            } catch (IntentSender.SendIntentException e) {
                // Log the error
                e.printStackTrace();
            }
        } else {
            /*
             * If no resolution is available, display a dialog to the
             * user with the error.
             */
            showDialog(connectionResult.getErrorCode());
        }


    }

    @Override
    public void onConnected(Bundle arg0) {
        // Display the connection status
        Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show();


    }

    @Override
    public void onDisconnected() {
        // Display the connection status
        Toast.makeText(this, "Disconnected. Please re-connect.",
                Toast.LENGTH_SHORT).show();


    }

}
我发现以下错误,与使用connect有关:

10-11 10:18:11.515: E/AndroidRuntime(7539): FATAL EXCEPTION: main
10-11 10:18:11.515: E/AndroidRuntime(7539): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.locationdocseg/com.example.locationdocseg.MainActivity}: java.lang.IllegalStateException: Not connected. Call connect() and wait for onConnected() to be called.
10-11 10:18:11.515: E/AndroidRuntime(7539):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
10-11 10:18:11.515: E/AndroidRuntime(7539):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
10-11 10:18:11.515: E/AndroidRuntime(7539):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
10-11 10:18:11.515: E/AndroidRuntime(7539):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
10-11 10:18:11.515: E/AndroidRuntime(7539):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-11 10:18:11.515: E/AndroidRuntime(7539):     at android.os.Looper.loop(Looper.java:130)
10-11 10:18:11.515: E/AndroidRuntime(7539):     at android.app.ActivityThread.main(ActivityThread.java:3689)
10-11 10:18:11.515: E/AndroidRuntime(7539):     at java.lang.reflect.Method.invokeNative(Native Method)
10-11 10:18:11.515: E/AndroidRuntime(7539):     at java.lang.reflect.Method.invoke(Method.java:507)
10-11 10:18:11.515: E/AndroidRuntime(7539):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
10-11 10:18:11.515: E/AndroidRuntime(7539):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
10-11 10:18:11.515: E/AndroidRuntime(7539):     at dalvik.system.NativeStart.main(Native Method)
10-11 10:18:11.515: E/AndroidRuntime(7539): Caused by: java.lang.IllegalStateException: Not connected. Call connect() and wait for onConnected() to be called.
10-11 10:18:11.515: E/AndroidRuntime(7539):     at com.google.android.gms.internal.ff.bT(Unknown Source)
10-11 10:18:11.515: E/AndroidRuntime(7539):     at com.google.android.gms.internal.hc.a(Unknown Source)
10-11 10:18:11.515: E/AndroidRuntime(7539):     at com.google.android.gms.internal.hc$c.bT(Unknown Source)
10-11 10:18:11.515: E/AndroidRuntime(7539):     at com.google.android.gms.internal.hb.getLastLocation(Unknown Source)
10-11 10:18:11.515: E/AndroidRuntime(7539):     at com.google.android.gms.internal.hc.getLastLocation(Unknown Source)
10-11 10:18:11.515: E/AndroidRuntime(7539):     at com.google.android.gms.location.LocationClient.getLastLocation(Unknown Source)
10-11 10:18:11.515: E/AndroidRuntime(7539):     at com.example.locationdocseg.MainActivity.onCreate(MainActivity.java:125)
10-11 10:18:11.515: E/AndroidRuntime(7539):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-11 10:18:11.515: E/AndroidRuntime(7539):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
10-11 10:18:11.515: E/AndroidRuntime(7539):     ... 11 more
清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.locationdocseg"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.locationdocseg.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
    </application>

</manifest>


如何修复它?请帮助

将getLastLocation移动到
onConnected
方法,onCreate太早,尚未连接

      mCurrentLocation=mLocationClient.getLastLocation();

      current_latitude=mCurrentLocation.getLatitude();
      current_longitude=mCurrentLocation.getLongitude();
      Toast.makeText(getApplicationContext(),current_latitude+"                 
         "+current_longitude,Toast.LENGTH_LONG).show();

尝试将以上所有内容移动到onConnected

参考if help。@我尝试将connect代码放在onresume方法中,但没有帮助!