2012-03-08 5 views
0

このコードを変更して、逆ジオコーディングも行うようにしています。座標はうまく動作します。私はエラーを取得する:場所は変数に解決することはできません。gps app逆ジオコーディングエラー

List<Address> addresses = geocoder.getFromLocation(location.getLatitude, 
    location.getLongitude, 1); 

私の完全なコードは次のとおりです:このエラーは、このコード行である

package gps.attempt; 

    import java.io.IOException; 
    import java.util.List; 
    import java.util.Locale; 

    import android.app.Activity; 
    import android.content.Intent; 
    import android.location.Address; 
    import android.location.Location; 
    import android.location.Geocoder; 
    import android.location.LocationListener; 
    import android.location.LocationManager; 
    import android.location.LocationProvider; 
    import android.os.Bundle; 
    import android.util.Log; 
    import android.widget.TextView; 
    import android.widget.Toast; 

    public class GpsAttemptActivity extends Activity implements LocationListener { 

/* this class implements LocationListener, which listens for both 
* changes in the location of the device and changes in the status 
* of the GPS system. 
* */ 

static final String tag = "Main"; // for Log 

TextView txtInfo; 
LocationManager lm; 
StringBuilder sb; 
int noOfFixes = 0; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    /* get TextView to display the GPS data */ 
    txtInfo = (TextView) findViewById(R.id.textView1); 
    TextView myAddress = (TextView)findViewById(R.id.myaddress); 

    /* the location manager is the most vital part it allows access 
    * to location and GPS status services */ 
    lm = (LocationManager) getSystemService(LOCATION_SERVICE); 

     Geocoder geocoder = new Geocoder(this, Locale.ENGLISH); 

     try { 
    List<Address> addresses = geocoder.getFromLocation(location.getLatitude, location.getLongitude, 1); 

    if(addresses != null) { 
    Address returnedAddress = addresses.get(0); 
    StringBuilder strReturnedAddress = new StringBuilder("Address:\n"); 
    for(int i=0; i<returnedAddress.getMaxAddressLineIndex(); i++) { 
    strReturnedAddress.append(returnedAddress.getAddressLine(i)).append("\n"); 
    } 
    myAddress.setText(strReturnedAddress.toString()); 
    } 
    else{ 
    myAddress.setText("No Address returned!"); 
    } 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    myAddress.setText("Cannot get Address!"); 
} 

} 




@Override 
protected void onResume() { 
    /* 
    * onResume is is always called after onStart, even if the app hasn't been 
    * paused 
    * 
    * add location listener and request updates every 1000ms or 10m 
    */ 
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 10f, this); 
    super.onResume(); 
} 

@Override 
protected void onPause() { 
    /* GPS, as it turns out, consumes battery like crazy */ 
    lm.removeUpdates(this); 
    super.onPause(); 
} 

@Override 
public void onLocationChanged(Location location) { 
    Log.v(tag, "Location Changed"); 

    sb = new StringBuilder(512); 

    noOfFixes++; 

    /* display some of the data in the TextView */ 

    sb.append("No. of Fixes: "); 
    sb.append(noOfFixes); 
    sb.append('\n'); 
    sb.append('\n'); 

    sb.append("Longitude: "); 
    sb.append(location.getLongitude()); 
    sb.append('\n'); 

    sb.append("Latitude: "); 
    sb.append(location.getLatitude()); 
    sb.append('\n'); 

    sb.append("Accuracy: "); 
    sb.append(location.getAccuracy()); 
    sb.append('\n'); 


    txtInfo.setText(sb.toString()); 
} 

@Override 
public void onProviderDisabled(String provider) { 
    /* this is called if/when the GPS is disabled in settings */ 
    Log.v(tag, "Disabled"); 

    /* bring up the GPS settings */ 
    Intent intent = new Intent(
      android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
    startActivity(intent); 
} 

@Override 
public void onProviderEnabled(String provider) { 
    Log.v(tag, "Enabled"); 
    Toast.makeText(this, "GPS Enabled", Toast.LENGTH_SHORT).show(); 

} 

@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 
    /* This is called when the GPS status alters */ 
    switch (status) { 
    case LocationProvider.OUT_OF_SERVICE: 
     Log.v(tag, "Status Changed: Out of Service"); 
     Toast.makeText(this, "Status Changed: Out of Service", 
       Toast.LENGTH_SHORT).show(); 
     break; 
    case LocationProvider.TEMPORARILY_UNAVAILABLE: 
     Log.v(tag, "Status Changed: Temporarily Unavailable"); 
     Toast.makeText(this, "Status Changed: Temporarily Unavailable", 
       Toast.LENGTH_SHORT).show(); 
     break; 
    case LocationProvider.AVAILABLE: 
     Log.v(tag, "Status Changed: Available"); 
     Toast.makeText(this, "Status Changed: Available", 
       Toast.LENGTH_SHORT).show(); 
     break; 
    } 
} 

@Override 
protected void onStop() { 
    /* may as well just finish since saving the state is not important for this toy app */ 
    finish(); 
    super.onStop(); 
} 
    } 

マニフェスト:

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

<uses-sdk android:minSdkVersion="8" /> 

<uses-permission android:name="android.permission.INTERNET"></uses-permission> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <activity 
     android:name=".GpsAttemptActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> 
<uses-permission android:name="android.permission.CONTROL_LOCATION_UPDATES" /> 

誰かが私を助けることができれば、私は感謝されますこれをもって

+0

エラーは何ですか? – Tim

+1

経度を変数に解決できません。緯度を変数に解決できません。場所を変数に解決できません。 – user1234167

答えて

1

ハブ私の答えを見てくださいhere これは同様の質問ですが、別のセンサーを使用しています。

電話でただちに自分の位置情報を取得できると仮定して(間違えやすい)間違いをしています。あなたは残念ながらできません。基本的には、サービスを開始してから、ロケーションの修正があるときにそれがあなたに戻ってくるのを待ちます。

インスタントロケーションを希望する場合は、getLastKnowLocation()へのコールがnullではない(ただし、不正確かもしれない)かどうかを確認し、それを使用してください。それ以外の場合は、ジオコーディングロジックをonLocationChanged()メソッドに配置し、それが呼び出されるまで待つ必要があります。

+0

位置を変更してエラーを報告していただきありがとうございます。しかし、エミュレータ上で実行されているので、アドレスを取得できません(そして私は座標を入力しました) – user1234167

+0

あなたはエミュレータに位置を送信するためにEclipseのエミュレータコントロールを使用しましたか?ジオコーダーを使って手動で試したことがありますか?ウォールストリートなどの座標を使っていますか?あなたが現在いる場所の座標を入れて、それが動作するかどうかを確認してください。 – Tim

+0

iveは、現在の位置の座標をputtinで試してみました。エミュレータコントロールを使用してそれを完了します。何か案は?私の電話でそれを試してみるつもりです – user1234167