Java 尝试一个简单的地理编码测试

Java 尝试一个简单的地理编码测试,java,android,osmdroid,Java,Android,Osmdroid,我正在尝试使用OSMDROIDAPI进行一个简单的地理编码测试,但我总是会出错,但我正在尝试从url(namigm)获取json响应。我在AsyncTask中这样做,但似乎gps坐标仅在try/catch中可用,但在代码的其余部分中它们被设置为null,因此我得到一个null指针异常。。。我怎样才能解决这个问题 我的最终目的是在地图上显示用户在编辑文本中书写的两个地址之间的道路 这是我的密码: class OsmRoadTask extends AsyncTask<String, Stri

我正在尝试使用OSMDROIDAPI进行一个简单的地理编码测试,但我总是会出错,但我正在尝试从url(namigm)获取json响应。我在AsyncTask中这样做,但似乎gps坐标仅在try/catch中可用,但在代码的其余部分中它们被设置为null,因此我得到一个null指针异常。。。我怎样才能解决这个问题

我的最终目的是在地图上显示用户在编辑文本中书写的两个地址之间的道路

这是我的密码:

class OsmRoadTask extends AsyncTask<String, String, Void> {

    MapView mapView;
    MapController mapController;
    Context context;
    GeoPoint geostartpoint = null;
    GeoPoint geoendpoint = null;
    ArrayList<GeoPoint> points = new ArrayList<GeoPoint>();
    Polyline roadOverlay;
    ProgressDialog pd = new ProgressDialog(OsmRoadTaskActivity.this);
    InputStream isdepart = null;
    InputStream isarrivee = null;
    String resultdepart = "";
    String resultarrivee = "";
     RoadManager roadmanager = null;
     Road road = null;


    public OsmRoadTask(Context ctx) {
        // TODO Auto-generated constructor stub
    }

    protected void onPreExecute() {
        pd.setMessage("Recherche d'itineraire en cours, merci de patienter");
        pd.show();
        pd.setOnCancelListener(new OnCancelListener() {
            public void onCancel(DialogInterface arg0) {

                OsmRoadTask.this.cancel(true);
            }
        });

    }

    protected Void doInBackground(String... arg0) {

        String adresseDepart = OsmRoadTaskActivity.Estartpoint.getText()
                .toString();
        String adresseDepartFormate = adresseDepart.replaceAll(" ", "+");
        String urldepart = "http://nominatim.openstreetmap.org/search?q="
                + adresseDepartFormate + "&format=json&polygon_svg=1";

        try {

            HttpGet httpgetdepart = new HttpGet(urldepart);
            HttpClient httpclientdepart = new DefaultHttpClient();
            HttpResponse responsedepart = httpclientdepart
                    .execute(httpgetdepart);
            HttpEntity httpentitydepart = responsedepart.getEntity();

            isdepart = httpentitydepart.getContent();

        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        try {

            StringBuilder sbdepart = new StringBuilder();
            BufferedReader reader = new BufferedReader(
                    new InputStreamReader(isdepart, "iso-8859-1"), 8);
            String line = null;
            while ((line = reader.readLine()) != null) {

                sbdepart.append(line + "\n");
            }
            isdepart.close();
            resultdepart = sbdepart.toString();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        try {

            JSONArray jArray = new JSONArray(resultdepart);
            for (int i = 0; i < jArray.length(); i++) {

                JSONObject jobject = jArray.getJSONObject(i);
                 double latdepart = jobject.getDouble("lat");
                  double lngarrivee = jobject.getDouble("lon");
                geostartpoint = new GeoPoint(latdepart, lngarrivee);

                // i think geostartpoint is not null here...

            }
        } catch (JSONException e) {
            e.printStackTrace();
        }


        points.add(geostartpoint); //but here it's null


        roadmanager = new OSRMRoadManager();

        return null;
    }

    protected void onPostExecute(Void result) {

        mapView = (MapView) findViewById(R.id.mapview);
        mapController = (MapController) mapView.getController();

        mapView.setTileSource(TileSourceFactory.MAPNIK);
        mapView.setBuiltInZoomControls(false);
        mapView.setMultiTouchControls(true);
        mapView.getOverlays().add(roadOverlay);
        Marker startmarker = new Marker(mapView);
        Marker endmarker = new Marker(mapView);
        startmarker.setPosition(geostartpoint);
        startmarker.setAnchor(Marker.ANCHOR_BOTTOM, Marker.ANCHOR_CENTER);
        // endmarker.setPosition(geoendpoint);
        // endmarker.setAnchor(Marker.ANCHOR_BOTTOM, Marker.ANCHOR_CENTER);

        mapView.getOverlays().add(startmarker);
        // mapView.getOverlays().add(endmarker);
        mapController.setCenter(geostartpoint);
        mapController.animateTo(geostartpoint);
        mapController.setZoom(13);
        mapView.invalidate();

    }

}

你能展示一下logcat打印出来的内容吗?谢谢,我编辑了我的postTry,从doinbackground方法返回geostartpoint,并从onpostexecute方法的参数获取它
04-20 14:14:23.593: E/AndroidRuntime(564): FATAL EXCEPTION: main
04-20 14:14:23.593: E/AndroidRuntime(564): java.lang.NullPointerException
04-20 14:14:23.593: E/AndroidRuntime(564):  at            org.osmdroid.bonuspack.overlays.Marker.setPosition(Marker.java:123)
04-20 14:14:23.593: E/AndroidRuntime(564):  at toutel.testcarte.OsmRoadTaskActivity$OsmRoadTask.onPostExecute(OsmRoadTaskActivity.java:278)
04-20 14:14:23.593: E/AndroidRuntime(564):  at toutel.testcarte.OsmRoadTaskActivity$OsmRoadTask.onPostExecute(OsmRoadTaskActivity.java:1)
04-20 14:14:23.593: E/AndroidRuntime(564):  at android.os.AsyncTask.finish(AsyncTask.java:631)
04-20 14:14:23.593: E/AndroidRuntime(564):  at android.os.AsyncTask.access$600(AsyncTask.java:177)
04-20 14:14:23.593: E/AndroidRuntime(564):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
04-20 14:14:23.593: E/AndroidRuntime(564):  at android.os.Handler.dispatchMessage(Handler.java:99)
04-20 14:14:23.593: E/AndroidRuntime(564):  at android.os.Looper.loop(Looper.java:137)
04-20 14:14:23.593: E/AndroidRuntime(564):  at android.app.ActivityThread.main(ActivityThread.java:4921)
04-20 14:14:23.593: E/AndroidRuntime(564):  at java.lang.reflect.Method.invokeNative(Native Method)
04-20 14:14:23.593: E/AndroidRuntime(564):  at java.lang.reflect.Method.invoke(Method.java:511)
04-20 14:14:23.593: E/AndroidRuntime(564):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
04-20 14:14:23.593: E/AndroidRuntime(564):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
04-20 14:14:23.593: E/AndroidRuntime(564):  at dalvik.system.NativeStart.main(Native Method)