- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了下面的代码,其中根据最终用户输入的地址执行纬度和经度搜索。
类CadastroClientes.java
。它负责查找用户的地址(HttpRequestTask
方法)并将此结果设置到 char_Logradouro
字段 (textvfield)。
在上述字段中设置值后,将调用 BuscaGeolocalizacao
类,并将您输入的地址作为参数传递给 getAddressFromLocation
方法。到目前为止一切都运行正常。
问题开始于在 BuscaGeolocalizacao
类中,我尝试在字段上设置 latitude
和 longitude
结果的值:
cc.char_Lat.setText(sb.append(address.getLatitude()));
cc.char_Long.setText(sb.append(address.getLongitude()));
CadastroClientes.java(调用的第一个代码)
package com.clubee.doggywalker;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.os.Handler;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.client.RestTemplate;
import java.util.ArrayList;
import java.util.List;
public class CadastroClientes extends Activity {
//JSON node
private static final String TAG_SUCCESS = "success";
//url para cadastrar novo usuário
private static String url_cadastraCliente = "http://clubee.com.br/dev/dbDoggyWalker/DoggyWalker_CadastroCliente_Inserir.php";
JSONParser jsonParser = new JSONParser();
EditText char_Nome;
EditText char_CEP;
EditText char_Email;
EditText char_Cidade;
EditText char_Estado;
EditText char_Logradouro;
EditText char_Endereco;
EditText char_Bairro;
TextView char_Lat;
TextView char_Long;
//barra de progressão
private ProgressDialog pDialog;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.cadastro_dw);
char_Nome = (EditText) findViewById(R.id.inputNome);
char_Email = (EditText) findViewById(R.id.inputEmail);
char_Logradouro = (EditText) findViewById(R.id.inputLogradouro);
char_Cidade = (EditText) findViewById(R.id.inputCidade);
char_Estado = (EditText) findViewById(R.id.inputEstado);
char_Bairro = (EditText) findViewById(R.id.inputBairro);
char_CEP = (EditText) findViewById(R.id.inputCEP);
char_Lat = (TextView) findViewById(R.id.inputLatitude);
char_Long = (TextView) findViewById(R.id.inputLongitude);
//Criar botão
Button btnCadastraCliente = (Button) findViewById(R.id.btnCadastraCliente);
Button btnBuscaCEP = (Button) findViewById(R.id.btnBuscaEndereco);
//Criar evento do botão
btnCadastraCliente.setOnClickListener(new View.OnClickListener() {@Override
public void onClick(View view) {
//abre thread em background
new CadastraCliente().execute();
}
});
//Criar evento do botão
btnBuscaCEP.setOnClickListener(new View.OnClickListener() {@Override
public void onClick(View view) {
//abre thread em background
new HttpRequestTask().execute();
}
});
}
private class HttpRequestTask extends AsyncTask < Void, Void, DAOPostmon > {
String charCepTrim = char_CEP.getText().toString().trim();
final String url = "http://api.postmon.com.br/v1/cep/" + charCepTrim;
RestTemplate restTemplate = new RestTemplate();
@Override
protected DAOPostmon doInBackground(Void...params) {
try {
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
DAOPostmon DAOPostmon = restTemplate.getForObject(url, DAOPostmon.class);
return DAOPostmon;
} catch (Exception e) {
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
DAOPostmon DAOPostmon = restTemplate.getForObject(url, DAOPostmon.class);
return DAOPostmon;
}
}
@Override
protected void onPostExecute(DAOPostmon DAOPostmon) {
//quando a tag Logradouro estiver disponiivel no retorno da api rest
if (DAOPostmon.getLogradouro() == null) {
TextView greetingLogradouro = (TextView) findViewById(R.id.inputLogradouro);
TextView greetingBairro = (TextView) findViewById(R.id.inputBairro);
TextView greetingCidade = (TextView) findViewById(R.id.inputCidade);
TextView greetingEstado = (TextView) findViewById(R.id.inputEstado);
TextView greetingCEP = (TextView) findViewById(R.id.inputCEP);
greetingLogradouro.setText(DAOPostmon.getEndereco().toUpperCase());
greetingCidade.setText(DAOPostmon.getCidade().toUpperCase());
greetingBairro.setText(DAOPostmon.getBairro().toUpperCase());
greetingEstado.setText(DAOPostmon.getEstado().toUpperCase());
greetingCEP.setText(DAOPostmon.getCep());
} else {
//senão, quando não tiver a tag logradouro, usar endereco
TextView greetingLogradouro = (TextView) findViewById(R.id.inputLogradouro);
TextView greetingBairro = (TextView) findViewById(R.id.inputBairro);
TextView greetingCidade = (TextView) findViewById(R.id.inputCidade);
TextView greetingEstado = (TextView) findViewById(R.id.inputEstado);
TextView greetingCEP = (TextView) findViewById(R.id.inputCEP);
greetingLogradouro.setText(DAOPostmon.getLogradouro().toUpperCase());
greetingCidade.setText(DAOPostmon.getCidade().toUpperCase());
greetingBairro.setText(DAOPostmon.getBairro().toUpperCase());
greetingEstado.setText(DAOPostmon.getEstado().toUpperCase());
greetingCEP.setText(DAOPostmon.getCep());
}
String address = char_Logradouro.getText().toString();
BuscaGeolocalizacao locationAddress = new BuscaGeolocalizacao();
locationAddress.getAddressFromLocation(address,
getApplicationContext(), new GeocoderHandler());
}
}
private class GeocoderHandler extends Handler {
public void handlerMsg(Message message) {
String locationAddress;
switch (message.what) {
case 1:
Bundle bundle = message.getData();
locationAddress = bundle.getString("char_Logradouro");
char_Lat.setText(locationAddress);
break;
default:
locationAddress = null;
}
}
}
class CadastraCliente extends AsyncTask < String, String, String > {
/**
* Before starting background thread Show Progress Dialog
*/@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(CadastroClientes.this);
pDialog.setMessage("Cadastrando usuário..");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
/**
* Creating product
*/
protected String doInBackground(String...args) {
String Nome = char_Nome.getText().toString();
String Email = char_Email.getText().toString();
String Endereco = char_Endereco.getText().toString();
String TipoLicenca = "DogWalker";
// Building Parameters
List < NameValuePair > params = new ArrayList < NameValuePair > ();
params.add(new BasicNameValuePair("char_Nome", Nome));
params.add(new BasicNameValuePair("char_Email", Email));
params.add(new BasicNameValuePair("char_Endereco", Endereco));
params.add(new BasicNameValuePair("char_TipoLicenca", TipoLicenca));
// getting JSON Object
// Note that create product url accepts POST method
JSONObject json = jsonParser.makeHttpRequest(url_cadastraCliente,
"POST", params);
// check log cat fro response
Log.d("Create Response", json.toString());
// check for success tag
try {
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
// successfully created product
Intent i = new Intent(getApplicationContext(), CadastroClientes.class);
startActivity(i);
// closing this screen
finish();
} else {
// failed to create product
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
/**
* After completing background task Dismiss the progress dialog
* *
*/
protected void onPostExecute(String file_url) {
// dismiss the dialog once done
pDialog.dismiss();
}
}
}
BuscaGeolocalizacao.java(负责返回纬度/经度的类)
package com.clubee.doggywalker;
import android.location.Geocoder;
import android.content.Context;
import android.location.Address;
import android.location.Geocoder;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.TextView;
import java.io.IOException;
import java.util.List;
import java.util.Locale;
public class BuscaGeolocalizacao {
private static final String TAG = "GeocodingLocation";
public static void getAddressFromLocation(final String locationAddress,
final Context context, final Handler handler) {
Thread thread = new Thread() {
@Override
public void run() {
Geocoder geocoder = new Geocoder(context, Locale.getDefault());
String result = null;
try {
List<Address> addressList = geocoder.getFromLocationName(locationAddress, 1);
if (addressList != null && addressList.size() > 0) {
CadastroClientes cc = new CadastroClientes();
Address address = addressList.get(0);
StringBuilder sb = new StringBuilder();
sb.append(address.getLatitude()).append("\n");
sb.append(address.getLongitude()).append("\n");
result = sb.toString();
cc.char_Lat.setText(sb.append(address.getLatitude()));
cc.char_Long.setText(sb.append(address.getLongitude()));
}
} catch (IOException e) {
Log.e(TAG, "Unable to connect to Geocoder", e);
} finally {
Message message = Message.obtain();
message.setTarget(handler);
if (result != null) {
message.what = 1;
Bundle bundle = new Bundle();
result = "Address: " + locationAddress +
"\n\nLatitude and Longitude :\n" + result;
bundle.putString("address", result);
message.setData(bundle);
} else {
message.what = 1;
Bundle bundle = new Bundle();
result = "Address: " + locationAddress +
"\n Unable to get Latitude and Longitude for this address location.";
bundle.putString("address", result);
message.setData(bundle);
}
message.sendToTarget();
}
}
};
thread.start();
}
}
尝试为 Activity 实现发送纬度
和经度
后,系统开始爆炸,并显示以下消息
07-01 00:44:18.412 8978-9170/com.clubee.doggywalker E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-23081 Process: com.clubee.doggywalker, PID: 8978 java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() at android.os.Handler.(Handler.java:200) at android.os.Handler.(Handler.java:114) at android.app.Activity.(Activity.java:793) at com.clubee.doggywalker.CadastroClientes.(CadastroClientes.java:27) at com.clubee.doggywalker.BuscaGeolocalizacao$1.run(BuscaGeolocalizacao.java:33)
最佳答案
您也可以在 UI 线程上发帖,例如
cc.char_Lat.post(new Runnable() {
@Override
public void run() {
cc.char_Lat.setText("what ever value");
}
});
但顺便说一句,我认为你应该使用你的处理程序而不是使用对 CadastroClientes 的引用
关于java - 发送经纬度数据到textview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31152200/
我对纬度和经度有疑问。当我想获取坐标时,只有 24 个 API 检索坐标。其他人没有。不知道为什么 我正在使用 GPSTracker 服务 public Location getLocation()
我有一个表(DB2 数据库),其中包含城市信息和相应的经纬度以及与城市相关的许多其他信息。我的要求是: 我的应用程序的输入将是纬度和经度,它们可能是或许多不是存储在数据库中的精确纬度和经度。我需要借助
我在经度和纬度上有一个位置 (A)。 我有一条线段,起点(B)和终点(C)在经度和纬度上。 我试图计算的是从 A 到 BC 线的最短距离。 换句话说,从 A 到最近点(在 BC 线上)的距离(以米为单
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
这个问题在这里已经有了答案: Find nearest latitude/longitude with an SQL query (18 个答案) 关闭 6 年前。 我正在尝试编写一个在某个位置附近
我正在尝试将 Yelp 的 API 与纬度/经度位置结合使用。我使用了 yelp 给出的 javascript 代码,它基本上有一个参数数组,并像这样将值插入其中: parameters.push([
我有一大组纬度和经度需要存储在 MySQL 数据库中。我正在阅读有关要使用的字段类型的相互矛盾的建议。 数据的一个例子是... Lat | Long -----------------
在我的应用程序中,我通过以特定时间间隔从服务器获取他们的位置(纬度和经度)来显示其他人的位置。 获取后,我必须删除所有注释并删除基于服务器数据的新注释。 但它看起来非常低效,因为当我们以前存在相同用户
我正在尝试将鼠标在谷歌地图上的位置转换为 LatLng 对象。我看到很多关于通过谷歌地图“点击”事件等获取位置的帖子,如下所示: google.maps.event.addListener(map,
我的 SQLite 数据库中存储了经纬度数据,我想获取与我输入的参数最近的位置(例如,我当前的位置 - 纬度/经度等)。 我知道这在 MySQL 中是可能的,并且我已经进行了相当多的研究,认为 SQL
伙计们,我在我的 Android 应用程序中实现了谷歌地图,并开始创建一个标记,我在 map 中间放置了一个标记图像。现在,我希望每当用户拖动 map 时,我都能得到 map 中心的位置(我放置图像的
我正在实现 GPS 跟踪器以从 http://www.androidhive.info/2012/07/android-gps-location-manager-tutorial/ 获取经度和纬度.
我有一个多边形形状文件(可下载 here ),我想从中创建一个包含 3 列的 data.frame ,其中包含: 多边形 ID 质心纬度 质心经度 来自这个答案here ,我知道以 Formal Cl
有没有办法使用facebook api以(纬度和经度格式)获取用户的位置? 我能够获得位置名称和其他属性,但不能获得该地点的经纬度。 javascript中是否有相同的API。 最佳答案 如果您有用户
在我的“原生”Android 应用程序中,我试图计算 map 上两个位置之间以英尺和/或米(如乌鸦飞翔)为单位的距离。理想情况下,会有一种方法将两个 LatLng 值(因为这是我随时可用的)作为输入并
我想使用 Google API 获取 GPS 位置。 我的代码: mGoogleApiClient = new GoogleApiClient.Builder(this)
这个问题在这里已经有了答案: How to calculate the latlng of a point a certain distance away from another? (6 个答案)
我是一名优秀的程序员,十分优秀!