- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
新版本1.1
大家好。我尝试遵循您的建议,现在我正在尝试重做代码。我添加了这部分代码以在主线程上使用 GoogleMaps 标记。
问题是,当我调用 Ubic() 函数时,出现此错误:
http://i.imgur.com/QD7JZjRh.jpg
http://i.imgur.com/xvzJ9ckh.jpg
这是我添加的代码,错误是由 String Latlon[][] = com.Ubic(); 引起的
public class BuscarContrincantes extends FragmentActivity implements
LocationListener {
GoogleMap googlemapa;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.buscarcontrincante);
SupportMapFragment maps = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
googlemapa = maps.getMap();
googlemapa.setMyLocationEnabled(true);
googlemapa.setMapType(GoogleMap.MAP_TYPE_HYBRID);
googlemapa.getUiSettings().setCompassEnabled(true);
googlemapa.getUiSettings().setZoomControlsEnabled(true);
googlemapa.getUiSettings().setAllGesturesEnabled(true);
double latitud;
double longitud;
String nombre;
Datos com = new Datos();
String latlon[][] = com.Ubic(); //HERE IS THE PROBLEM!
for (int i = 0; i < latlon.length - 1; i++) {
latitud = Double.parseDouble(latlon[i][0]);
longitud = Double.parseDouble(latlon[i][3]);
nombre = (latlon[i][2]);
LatLng posicion = new LatLng(latitud, longitud);
googlemapa.addMarker(new MarkerOptions()
.icon(BitmapDescriptorFactory
.fromResource(R.drawable.icono_canchas))
.position(posicion).title(nombre));
}
}
<小时/>
版本1.0
我正在为大学做的一个项目遇到问题。
实际上,我正在尝试在 map 上(使用 Google map )设置一个标记,表明他的信息位于 MySQL 数据库上。
代码是:
BuscarContrincantes.java
public class BuscarContrincantes extends FragmentActivity implements
LocationListener {
GoogleMap googlemapa;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.buscarcontrincante);
SupportMapFragment maps = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
googlemapa = maps.getMap();
googlemapa.setMyLocationEnabled(true);
googlemapa.setMapType(GoogleMap.MAP_TYPE_HYBRID);
googlemapa.getUiSettings().setCompassEnabled(true);
googlemapa.getUiSettings().setZoomControlsEnabled(true);
googlemapa.getUiSettings().setAllGesturesEnabled(true);
new RetreiveFeedTask().execute();
}
class RetreiveFeedTask extends AsyncTask<String, Void, String> {
protected String doInBackground(String... args) {
double lat;
double lon;
String nombre;
Datos com = new Datos(); // File Datos.java
String latlon[][] = com.Ubic();
for (int i = 0; i < latlon.length - 1; i++) {
lat = Double.parseDouble(latlon[i][0]);
lon = Double.parseDouble(latlon[i][4]);
nombre = (latlon[i][2]);
LatLng pos3 = new LatLng(lat, lon);
googlemapa.addMarker(new MarkerOptions()
.icon(BitmapDescriptorFactory
.fromResource(R.drawable.icono_canchas))
.position(pos3).title(nombre));
}
return null;
}
}
@Override
public void onLocationChanged(Location arg0) {
// TODO Auto-generated method stub
}}
Datos.java
public class Datos {
public String[][] Ubic() {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(
"http://MY.IP/FOLDER/QUERY.php");
try {
HttpResponse response = httpclient.execute(httppost);
String jsonResult = inputStreamToString(
response.getEntity().getContent()).toString();
JSONObject object = new JSONObject(jsonResult);
JSONArray arr = object.getJSONArray("products");
String[] lat = new String[arr.length()+1];
String[] lon = new String[arr.length()+1];
String[] nombre = new String[arr.length() + 1];
String[][] latlon = new String[arr.length() + 1][5];
for (int i = 0; i < arr.length(); i++) {
lat[i] = arr.getJSONObject(i).getString("latitude");
lon[i] = arr.getJSONObject(i).getString("longitude");
name[i] = arr.getJSONObject(i).getString("name");
latlon[i][0] = lat[i];
latlon[i][6] = lon[i];
latlon[i][2] = name[i];
}
return latlon;
} catch (JSONException e) {
} catch (ClientProtocolException e) {
} catch (IOException e) {
}
return null;
}
private static String parse(String string) {
return null;
}
private StringBuilder inputStreamToString(InputStream is) {
String rLine = "";
StringBuilder answer = new StringBuilder();
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
try {
while ((rLine = rd.readLine()) != null) {
answer.append(rLine);
}
} catch (IOException e) {
}
return answer;
}}
此代码试图获取 MySQL 数据库上的对象的纬度、经度和名称,并且必须将此对象放在 map 上,但我收到 AsynkTask #1 错误,我不知道为什么会这样正在发生。你能帮我吗?我对这段代码感到非常生气,而且我不知道为什么它不起作用。
P.S:抱歉我的英语不好。我来自智利:P
最佳答案
您无法通过 doInBackground
方法访问 GoogleMap 实例。 GoogleMap 只能从主线程读取和修改。只有 HTTP 请求应该处于后台任务中。
您需要修改 doInBackground
以返回坐标列表,并在 onPostExecute
方法(在主线程)实现 GoogleMap 更新。
以下是基于版本1.1的代码:
GoogleMap googlemapa;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.buscarcontrincante);
SupportMapFragment maps = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
googlemapa = maps.getMap();
googlemapa.setMyLocationEnabled(true);
googlemapa.setMapType(GoogleMap.MAP_TYPE_HYBRID);
googlemapa.getUiSettings().setCompassEnabled(true);
googlemapa.getUiSettings().setZoomControlsEnabled(true);
googlemapa.getUiSettings().setAllGesturesEnabled(true);
new RetreiveFeedTask().execute();
}
class RetreiveFeedTask extends AsyncTask<Void, Void, String[][]> {
@Override
protected String[][] doInBackground(Void... args) {
// Execute the HTTP request on background task
Datos com = new Datos(); // File Datos.java
return com.Ubic();
}
@Override
protected void onPostExecute(String[][] latlon) {
double latitud;
double longitud;
String nombre;
// Update the UI
for (int i = 0; i < latlon.length - 1; i++) {
latitud = Double.parseDouble(latlon[i][0]);
longitud = Double.parseDouble(latlon[i][3]);
nombre = (latlon[i][2]);
LatLng posicion = new LatLng(latitud, longitud);
googlemapa.addMarker(new MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.icono_canchas)).position(posicion).title(nombre));
}
}
}
关于java - Asyntask #1 Android 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19800357/
我有一个返回字符串的函数,里面有一个 AsynTask。我的问题是我的函数必须在 AsynTask 完成工作后返回值! 这是我的代码: public String getWeather(Context
我正在尝试使用 Sending images using Http Post 将图像发送到 REST 服务.这篇文章不再提供信息,但我在 FileBody bin1 = new FileBody(fi
我有一个 AsynTask,当 doInBackground 方法调用另一个试图显示警报对话框的类时,它会使整个应用程序崩溃。 下面是我的AsynTask, private class Reserve
我是 android 的新手,但对 Java 有一定的了解。我在努力理解 AsyncTask<> 我注意到传递了不同的参数,例如 AsyncTask AsyncTask 放入尖括号中。请问这些参数应该
问题:使用 AsynTask 加载图像时,ListView 无法滚动到底部。 详细信息:我想在用户打开 listView 时将 listView 滚动到底部。 ListView 包含图像和文本。为了更
新版本1.1 大家好。我尝试遵循您的建议,现在我正在尝试重做代码。我添加了这部分代码以在主线程上使用 GoogleMaps 标记。 问题是,当我调用 Ubic() 函数时,出现此错误: http://
我正在尝试从 AsyncTask 类获取值以返回到主 UI,即使在 AsyncTask 类完成后也是如此。来自 onPostExectute() 的字符串值将被保存到 json_string 以备后用
我正在使用 AsyncTask 进行网络操作并将 minSDKVersion 设置为 8。我正在尝试执行 AsyncTask,就像这样,它给出红线错误然后我需要每次清理项目然后它才能工作。 downl
我是一名优秀的程序员,十分优秀!