In the last post, it was shown how to Get address from location name, using Geocoder. But in the example code, the address line is in-correct. Refer to the following code, to retrieve full address line.
package com.AndroidgetFromLocationName;
import java.io.IOException;
import java.util.List;
import android.app.Activity;
import android.location.Address;
import android.location.Geocoder;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class AndroidgetFromLocationNameActivity extends Activity {
EditText searchText;
Button searchButton;
TextView listResult;
Geocoder myGeocoder;
final static int MAX_RESULT = 5;
//final static String DEFAULT_SEARCH = "1600 Amphitheatre Parkway Mountain View";
//final static String DEFAULT_SEARCH = "Times Square";
final static String DEFAULT_SEARCH = "蘋果";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
searchText = (EditText)findViewById(R.id.searchtext);
searchText.setText(DEFAULT_SEARCH);
searchButton = (Button)findViewById(R.id.searchbutton);
listResult = (TextView)findViewById(R.id.result);
searchButton.setOnClickListener(searchButtonOnClickListener);
myGeocoder = new Geocoder(this);
//for API Level 9 or higher
if (!Geocoder.isPresent()){
Toast.makeText(AndroidgetFromLocationNameActivity.this,
"Sorry! Geocoder service not Present.",
Toast.LENGTH_LONG).show();
}
}
Button.OnClickListener searchButtonOnClickListener
= new Button.OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
String searchString = searchText.getText().toString();
searchFromLocationName(searchString);
}};
private void searchFromLocationName(String name){
try {
List<Address> result
= myGeocoder.getFromLocationName(name, MAX_RESULT);
if ((result == null)||(result.isEmpty())){
Toast.makeText(AndroidgetFromLocationNameActivity.this,
"No matches were found or there is no backend service!",
Toast.LENGTH_LONG).show();
}else{
String stringResult = "";
for (int i =0; i < result.size(); i++){
String AddressLine = "";
int maxAddressLineIndex = result.get(i).getMaxAddressLineIndex();
if (maxAddressLineIndex != -1){
for (int j = 0; j <= result.get(i).getMaxAddressLineIndex(); j++){
AddressLine += result.get(i).getAddressLine(j) + "\n";
}
}
stringResult += "i: " + i + "\n"
+ "lat: " + result.get(i).getLatitude() + "\n"
+ "lon: " + result.get(i).getLongitude() + "\n"
+ AddressLine + "\n";
}
listResult.setText(stringResult);
Toast.makeText(AndroidgetFromLocationNameActivity.this,
"Finished!",
Toast.LENGTH_LONG).show();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Toast.makeText(AndroidgetFromLocationNameActivity.this,
"The network is unavailable or any other I/O problem occurs!",
Toast.LENGTH_LONG).show();
}
}
}
package com.AndroidgetFromLocationName;
import java.io.IOException;
import java.util.List;
import android.app.Activity;
import android.location.Address;
import android.location.Geocoder;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class AndroidgetFromLocationNameActivity extends Activity {
EditText searchText;
Button searchButton;
TextView listResult;
Geocoder myGeocoder;
final static int MAX_RESULT = 5;
//final static String DEFAULT_SEARCH = "1600 Amphitheatre Parkway Mountain View";
//final static String DEFAULT_SEARCH = "Times Square";
final static String DEFAULT_SEARCH = "蘋果";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
searchText = (EditText)findViewById(R.id.searchtext);
searchText.setText(DEFAULT_SEARCH);
searchButton = (Button)findViewById(R.id.searchbutton);
listResult = (TextView)findViewById(R.id.result);
searchButton.setOnClickListener(searchButtonOnClickListener);
myGeocoder = new Geocoder(this);
//for API Level 9 or higher
if (!Geocoder.isPresent()){
Toast.makeText(AndroidgetFromLocationNameActivity.this,
"Sorry! Geocoder service not Present.",
Toast.LENGTH_LONG).show();
}
}
Button.OnClickListener searchButtonOnClickListener
= new Button.OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
String searchString = searchText.getText().toString();
searchFromLocationName(searchString);
}};
private void searchFromLocationName(String name){
try {
List<Address> result
= myGeocoder.getFromLocationName(name, MAX_RESULT);
if ((result == null)||(result.isEmpty())){
Toast.makeText(AndroidgetFromLocationNameActivity.this,
"No matches were found or there is no backend service!",
Toast.LENGTH_LONG).show();
}else{
String stringResult = "";
for (int i =0; i < result.size(); i++){
String AddressLine = "";
int maxAddressLineIndex = result.get(i).getMaxAddressLineIndex();
if (maxAddressLineIndex != -1){
for (int j = 0; j <= result.get(i).getMaxAddressLineIndex(); j++){
AddressLine += result.get(i).getAddressLine(j) + "\n";
}
}
stringResult += "i: " + i + "\n"
+ "lat: " + result.get(i).getLatitude() + "\n"
+ "lon: " + result.get(i).getLongitude() + "\n"
+ AddressLine + "\n";
}
listResult.setText(stringResult);
Toast.makeText(AndroidgetFromLocationNameActivity.this,
"Finished!",
Toast.LENGTH_LONG).show();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Toast.makeText(AndroidgetFromLocationNameActivity.this,
"The network is unavailable or any other I/O problem occurs!",
Toast.LENGTH_LONG).show();
}
}
}
No comments:
Post a Comment