null指针在android中的ViewRoot.draw(boolean)中的异常

时间:2011-06-30 09:56:08

标签: android android-maps

这是我的代码 在android

中的ViewRoot.draw(boolean)中获取空指针异常

logcatView

Travellog [Android Application] 
DalvikVM[localhost:8616]    
    Thread [<1> main] (Suspended (exception NullPointerException))  
        ViewRoot.draw(boolean) line: 1546   
        ViewRoot.performTraversals() line: 1258 
        ViewRoot.handleMessage(Message) line: 1859  
        ViewRoot(Handler).dispatchMessage(Message) line: 99 
        Looper.loop() line: 130 
        ActivityThread.main(String[]) line: 3683    
        Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
        Method.invoke(Object, Object...) line: 507  
        ZygoteInit$MethodAndArgsCaller.run() line: 839  
        ZygoteInit.main(String[]) line: 597 
        NativeStart.main(String[]) line: not available [native method]  
    Thread [<8> Binder Thread #2] (Running) 
    Thread [<7> Binder Thread #1] (Running) 
    Daemon Thread [<10> RefQueueWorker@org.apache.http.impl.conn.tsccm.ConnPoolByRoute@405a4408] (Running)  

班级

            LayoutInflater li= LayoutInflater.from(this);
            View textEntryView = li.inflate(R.layout.alertbox, null);

            final AlertDialog.Builder dialog = new AlertDialog.Builder(this);
            dialog.setTitle("Enter the places");
            dialog.setView(textEntryView);

          splc = (EditText) textEntryView.findViewById(R.id.strtplace);
            dialog.setPositiveButton("Ok", new OnClickListener(){

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // TODO Auto-generated method stub
                    pd = ProgressDialog.show(TravellogActivity.this, "Working..", "Searching your address", true, false);
                    //Show a progress dialog


                    searchAdress = new Thread(){
                    public void run(){
                            String addressInput = splc.getText().toString(); // Get input text
                            try {
                                foundAdresses = gc.getFromLocationName(addressInput, 5); // Search addresses
                                Thread.sleep(1500);
                            } catch (Exception e) {
                                // @todo: Show error message
                            }
                            showAdressResults.sendEmptyMessage(0);                  
                        }
                    };
                    searchAdress.start();

                }
            });
           dialog.show();



 private Handler showAdressResults = new Handler() {
                @Override
                public void handleMessage(Message msg) {
                    pd.dismiss();

                    if (foundAdresses.size() == 0) { // if no address found,
                        // display an error
//                          
//                           p = new GeoPoint((int) (foundAdresses.get(0).getLatitude() * 1E6), 
//                                      (int) (foundAdresses.get(0).getLongitude() * 1E6));
//                          
//                          
                        Dialog locationError = new AlertDialog.Builder(
                                TravellogActivity.this).setIcon(0).setTitle(
                                "Error").setPositiveButton(R.string.ok, null)
                                .setMessage(
                                        "Sorry, your address doesn't exist.")
                                .create();
                        locationError.show();

                    } else { // else display address on map
                        for (int i = 0; i < foundAdresses.size(); ++i) {
                            // Save results as Longitude and Latitude
                            // @todo: if more than one result, then show a
                            // select-list
                            Address x = foundAdresses.get(i);
                            latit = x.getLatitude();
                            longi = x.getLongitude();
                        }
                        navigateToLocation((latit * 1000000), (longi * 1000000),myMapView); // display the found address
                    };  

        return  ;

    }

                private void navigateToLocation(double latitude, double longitude,
                        MapView myMapView) {
                    // TODO Auto-generated method stub
                     p = new GeoPoint((int) (foundAdresses.get(0).getLatitude() * 1E6), 
                            (int) (foundAdresses.get(0).getLongitude() * 1E6));
                    MC.animateTo(p);

                    myMapView.invalidate();

MyLocationOverlay类

protected class MyLocationOverlay extends com.google.android.maps.Overlay {

    @Override
    public boolean draw(Canvas canvas, MapView myMapView, boolean shadow, long when) {
        Paint paint = new Paint();

        super.draw(canvas, myMapView, shadow);
        // Converts lat/lng-Point to OUR coordinates on the screen.
        Point myScreenCoords = new Point();
        myMapView.getProjection().toPixels(geoPoint, myScreenCoords);


        Point Screencoords = new Point();
        myMapView.getProjection().toPixels(p, Screencoords);

        paint.setStrokeWidth(1);
        paint.setARGB(255, 255, 255, 255);
        paint.setStyle(Paint.Style.STROKE);

        Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.marker);

        canvas.drawBitmap(bmp, myScreenCoords.x, myScreenCoords.y, paint);
        canvas.drawText("I am here...", myScreenCoords.x, myScreenCoords.y, paint);

1 个答案:

答案 0 :(得分:0)

从你的代码中我没有看到任何直接的关系,但是,我遇到了类似的问题。我发现如果我在MapView上应用空的ItemizedOverlay它会崩溃,删除此代码并添加:“setLastFocusedIndex(-1);”我的自定义ItemizedOverlay“addOverlay()”和“clear()”方法解决了这个问题。

希望这有帮助。