2013-07-16 4 views
0

Итак, моя группа пытается создать простую программу для Android, которая поможет вести людей через здания. Мы пытаемся отобразить результаты поиска внутри Spinner, но, к сожалению, программа вылетает всякий раз, когда инициализируется счетчик. Мы знаем, что код работает до инициализации Spinner. Может ли кто-нибудь помочь диагностировать нашу проблему?Реализация spinner приводит к сбою программы и

Соответствующий код функции:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    //Here goes the code for the searching of the building in the database file. 

    // Get the message from the intent 
    Intent intent = getIntent(); 
    String building = intent.getStringExtra(MainActivity.EXTRA_MESSAGE); 
    String message = "Search results for \"" + building + "\""; 

    // Create the text view 
    TextView textView = new TextView(this); 
    textView.setTextSize(30); 
    textView.setText(message); 

    InputStream buildinginfo = null; 
    try { 
     buildinginfo = getResources().getAssets().open("namelist.txt"); 
    } catch (IOException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
    BufferedReader myDIS = new BufferedReader(new InputStreamReader(buildinginfo)); 

    //you've now got an instance of BufferedReader called myDIS 

    ArrayList<String> list = new ArrayList<String>(); 
    int x = -1; 
    String conglomerate = ""; 

    for(int i=0;i<101;i++){ 
    try { 
     String something = myDIS.readLine(); 
     x = something.indexOf(building); 
     if(x>-1){ 
      list.add(something); 
     } 
    } catch (IOException e1) { 
     //TODO Auto-generated catch block 
     e1.printStackTrace(); 

    } 
      } 


    for(int i=0 ; i < (list.size()-1) ; i++) { 
     String display = list.get(i).substring(5); 
     conglomerate = conglomerate+display+"\n"; 
    } 
    setContentView(textView); 
    //Add Spinner 
    Spinner spinner = (Spinner) findViewById(R.id.spinner1); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, list); 
    spinner.setAdapter(adapter); 
} 

Это дает эти ошибки в LogCat.

07-16 00:19:47.951: E/AndroidRuntime(273): FATAL EXCEPTION: main 

07-16 00:19:47.951: E/AndroidRuntime(273): java.lang.RuntimeException: Unable to start activity ComponentInfo{iefx.testing.myapp/iefx.testing.myapp.DisplayMessageActivity}: java.lang.NullPointerException 

07-16 00:19:47.951: E/AndroidRuntime(273): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 

07-16 00:19:47.951: E/AndroidRuntime(273): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 

07-16 00:19:47.951: E/AndroidRuntime(273): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 

07-16 00:19:47.951: E/AndroidRuntime(273): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 

07-16 00:19:47.951: E/AndroidRuntime(273): at android.os.Handler.dispatchMessage(Handler.java:99) 

07-16 00:19:47.951: E/AndroidRuntime(273): at android.os.Looper.loop(Looper.java:123) 

07-16 00:19:47.951: E/AndroidRuntime(273): at android.app.ActivityThread.main(ActivityThread.java:4627) 

07-16 00:19:47.951: E/AndroidRuntime(273): at java.lang.reflect.Method.invokeNative(Native Method) 

07-16 00:19:47.951: E/AndroidRuntime(273): at java.lang.reflect.Method.invoke(Method.java:521) 

07-16 00:19:47.951: E/AndroidRuntime(273): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 

07-16 00:19:47.951: E/AndroidRuntime(273): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 

07-16 00:19:47.951: E/AndroidRuntime(273): at dalvik.system.NativeStart.main(Native Method) 

07-16 00:19:47.951: E/AndroidRuntime(273): Caused by: java.lang.NullPointerException 

07-16 00:19:47.951: E/AndroidRuntime(273): at iefx.testing.myapp.DisplayMessageActivity.onCreate(DisplayMessageActivity.java:83) 

07-16 00:19:47.951: E/AndroidRuntime(273): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 

07-16 00:19:47.951: E/AndroidRuntime(273): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 

07-16 00:19:47.951: E/AndroidRuntime(273): ... 11 more 
+1

Что такое строка 83 «DisplayMessageActivity»? Некоторый объект в этой строке имеет значение null, и вы пытаетесь получить доступ к переменной-члену или методу на нем. – Karakuri

+0

Вы не завысили вид, который содержит spinner1. В каком файле макета вы ссылаетесь? – nedaRM

+0

@Karakuri Это «spinner.setAdapter (адаптер)»; – pjwasz

ответ

0

Вы звоните setContentView() и проходите через TextView. Вероятно, вы захотите передать вместо этого ссылку на размещение (формы R.layout.something), в противном случае вызов findViewById() с идентификатором spinner's возвращает значение null, поэтому вы получите NullPointerException на этой строке.

+0

Спасибо за это! Я понял. Это помогло мне исправить еще несколько ошибок, которые мы не собирались решать до конца! :) – pjwasz

0

использовать setContentView (layoutid), (идентификатор макета должен иметь указанный в нем счетчик) перед вызовом (Spinner) findViewById (R.id.spinner1); spinner будет null до тех пор, пока не произойдет сбой вашего приложения.

0

Объявите вызов xml «my_xml_with_spinner.xml», в котором вы помещаете спин-просмотр с id spinner1 внутри контейнера (LinearLayout, RelativeLayout и т. д.), а затем в свой код изменение:

setContentView(textView) 

для

setContentView(R.layout.my_xml_with_spinner) 

Теперь вид вертушки будет найдено, когда вы звоните findViewById и кок не будет аннулирован, как сейчас.

Причина, по которой это значение null, состоит в том, что вы устанавливаете в качестве макета простой TextView, и код не может найти какой-либо вид на макет, который вы установили (textView), с идентификатором spinner1.

+0

Спасибо за ответ! Это также помогло мне в другой части кода. – pjwasz

+0

Голосовать тогда;) – jpardogo

Смежные вопросы