0

新しいバージョン 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

大学で行っているプロジェクトで問題が発生しています。

実際、彼の情報がMySQLデータベースにあることを地図上に(Googleマップで)マーカーを設定しようとしています。

コードは次のとおりです。

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 データベース上にあるオブジェクトの緯度、経度、および名前を取得しようとしており、このオブジェクトをマップに配置する必要がありますが、AsynkTask #1 エラーが発生し、なぜこれが起こっているのかわかりません。¿私を助けてくれませんか? 私はこのコードに本当に腹を立てています。なぜこれが機能しないのかわかりません。

PS: 下手な英語で申し訳ありません。私はチリから来ました :P

4

1 に答える 1