地理编码器类中的NullPointerException,同时将地名从编辑文本复制到字符串

时间:2011-06-27 10:17:59

标签: java android

以下是我的代码。我在阅读地名时得到NullPointerException,将其捕捉到字符串。请帮我解决这个问题。

Exceptiion:

DalvikVM[localhost:8620]    
    Thread [<1> main] (Running) 
    Thread [<8> Binder Thread #2] (Running) 
    Thread [<7> Binder Thread #1] (Running) 
    Daemon Thread [<10> RefQueueWorker@org.apache.http.impl.conn.tsccm.ConnPoolByRoute@405141c8] (Running)  
    Thread [<9> Thread-13] (Suspended (exception NullPointerException)) 
        TravellogActivity$2$1.run() line: 165   

代码:

public boolean onOptionsItemSelected(MenuItem m)
    {

        switch(m.getItemId())
        {
        case R.id.setroute:
            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) 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(); // <-- here Iam getting exception null pointer)
                            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();
        }
        return true;
        }      

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

                    if (foundAdresses.size() == 0) { // if no address found,
                        // display an error
                        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((lat * 1000000), (lon * 1000000),myMapView); // display the found address
                    };  

        return  ;

    }

                private void navigateToLocation(double latitude, double longitude,
                        MapView myMapView) {
                    // TODO Auto-generated method stub
                    GeoPoint p = new GeoPoint((int) latitude, (int) longitude); // new
                    MC.animateTo(p);
                    myMapView.displayZoomControls(true); // display Zoom (seems that it doesn't
                    // work yet)
                    MapController mc = myMapView.getController();
                    mc.animateTo(p); // move map to the given point
                    int zoomlevel = myMapView.getMaxZoomLevel(); // detect maximum zoom level
                    mc.setZoom(zoomlevel - 1); // zoom
                    myMapView.setSatellite(false); // display only "normal" mapview
        }

1 个答案:

答案 0 :(得分:2)

错误可能在这一行:

splc = (EditText) findViewById(R.id.strtplace);

将其替换为

splc = (EditText)   textEntryView.findViewById(R.id.strtplace);

因为您正在夸大该视图,EditText视图必须位于该textEntryView