я получаю исключение нулевого указателя из String placeName = placeText.getText (). toString (); - PullRequest
2 голосов
/ 21 июня 2011

Привет, хочу получить название места из текста редактирования и пометить на карте вот мой код, где я получил исключение нулевого указателя, пожалуйста, помогите мне, что я должен сделать и где я иду не так.

как яполучаю название места из поля редактирования текста в диалоговом окне.

View layout = View.inflate(this, R.layout.alertbox, null);

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

            dialog.setPositiveButton("Ok", new DialogInterface.OnClickListener() {



                @Override
                public void onClick(DialogInterface dialog, int id) {
                    // TODO Auto-generated method stub


                     EditText placeText = (EditText) findViewById(R.id.strtplace);          
                             String placeName = placeText.getText().toString();
//                              
  Break from execution if the user has not entered anything in the field
                        if(placeName.compareTo("")==0) 
                        numberOptions = 5;
                        String [] optionArray = new String[numberOptions];
                        Geocoder gcoder = new Geocoder(TravellogActivity.this);  

                        try{
                            List<Address> results = gcoder.getFromLocationName(placeName,numberOptions);
                            Iterator<Address> locations = results.iterator();
                            String raw = "\nRaw String:\n";
                            String country;
                            int opCount = 0;
                            while(locations.hasNext()){
                                Address location = locations.next();
                                lat = location.getLatitude();
                                lon = location.getLongitude();
                                country = location.getCountryName();
                                if(country == null) {
                                    country = "";
                                } else {
                                    country =  ", "+country;
                                }
                                raw += location+"\n";
                                optionArray[opCount] = location.getAddressLine(0)+", "+location.getAddressLine(1)+country+"\n";
                                opCount ++;
                            }
                            Log.i("Location-List", raw);
                            Log.i("Location-List","\nOptions:\n");
                            for(int i=0; i<opCount; i++){
                                Log.i("Location-List","("+(i+1)+") "+optionArray[i]);
                            }

                        } catch (IOException e){
                            Log.e("Geocoder", "I/O Failure; is network available?",e);
                        }           

                        p = new GeoPoint(latE6, lonE6);
                        myMC.animateTo(p); 


                    }                       
                });

            dialog.show();
            break;

            }



        return false  ;

    }

Ответы [ 3 ]

4 голосов
/ 21 июня 2011

NullPointerExceptions - это самые простые исключения для поиска и отладки.

Если вы получаете NullPointerException в этой строке:

String placeName = placeText.getText().toString();

Единственное, что может бытьNULL - это переменная placeText, или placeText.getText()

. Вам нужно выяснить, почему это NULL.Поскольку ваш placeText находится в состоянии оповещения, вы должны извлечь его из макета с помощью layout.findViewById.Поскольку вы извлекаете его из неправильного места, оно будет нулевым, в результате чего NullPointerException.

в теории, getText() также может вернуть ноль, но текущая реализация в Android SDK вернет пустую строкукогда ничего не заполнено, значит, оно не может быть нулевым.

2 голосов
/ 21 июня 2011

использование EditText placeText = (EditText) layout.findViewById(R.id.strtplace); целое число EditText placeText = (EditText) findViewById(R.id.strtplace);

0 голосов
/ 21 июня 2011

вот изменения, которые вам нужно сделать: // и view, и editext должны быть объявлены как final, а метод findViewById нуждается в макете, для которого он должен быть вызван

  • final View layout = View.inflate (this, R.layout.alertbox, null);
    • final EditText placeText = (EditText) layout.findViewById (R.id.strtplace);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...