spinner onItemSelected решение проблемы - PullRequest
0 голосов
/ 11 марта 2012

Я сделал 2 счетчика, и мой второй счетчик зависит от 1-го. Когда я нажимаю на второй спиннер, моя программа падает. Вот что говорит мой logcat:

03-11 12:09:35.076: ERROR/AndroidRuntime(367): FATAL EXCEPTION: main
03-11 12:09:35.076: ERROR/AndroidRuntime(367): java.lang.NullPointerException
03-11 12:09:35.076: ERROR/AndroidRuntime(367):     at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:355)
03-11 12:09:35.076: ERROR/AndroidRuntime(367):     at android.widget.ArrayAdapter.getDropDownView(ArrayAdapter.java:376)
03-11 12:09:35.076: ERROR/AndroidRuntime(367):     at android.widget.Spinner$DropDownAdapter.getDropDownView(Spinner.java:332)
03-11 12:09:35.076: ERROR/AndroidRuntime(367):     at android.widget.Spinner$DropDownAdapter.getView(Spinner.java:328)
03-11 12:09:35.076: ERROR/AndroidRuntime(367):     at android.widget.AbsListView.obtainView(AbsListView.java:1409)
03-11 12:09:35.076: ERROR/AndroidRuntime(367):     at android.widget.ListView.measureHeightOfChildren(ListView.java:1216)
03-11 12:09:35.076: ERROR/AndroidRuntime(367):     at android.widget.ListView.onMeasure(ListView.java:1127)
03-11 12:09:35.076: ERROR/AndroidRuntime(367):     at android.view.View.measure(View.java:8313)
03-11 12:09:35.076: ERROR/AndroidRuntime(367):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
03-11 12:09:35.076: ERROR/AndroidRuntime(367):     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017)
03-11 12:09:35.076: ERROR/AndroidRuntime(367):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:386)
03-11 12:09:35.076: ERROR/AndroidRuntime(367):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
03-11 12:09:35.076: ERROR/AndroidRuntime(367):     at android.view.View.measure(View.java:8313)

А вот и мой код:

package com.test;


import java.io.IOException;

import org.json.JSONException;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.Toast;

public class SearchActivity extends Activity implements AdapterView.OnItemSelectedListener
{

     boolean flag=true;
     Spinner spinner;
     public String [] doctorsname=new String[1000];

    String[] items = {"psychologist", "neurologist","dentist"};

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


        setContentView(R.layout.searchact);

        for(int i=0;i<1000;i++)
         doctorsname[i]=null;

        Button b=(Button)findViewById(R.id.button2);
        Button b1=(Button)findViewById(R.id.button3);

        spinner = (Spinner) findViewById(R.id.spinner1);
        ArrayAdapter<CharSequence> adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item,items);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);

        spinner.setOnItemSelectedListener(this);

        b.setOnClickListener(new View.OnClickListener() {


        public void onClick(View v) 
        {
            Intent i = new Intent(SearchActivity.this,DocprofileextActivity.class);
            startActivity(i);       
        }
    });

        b1.setOnClickListener(new View.OnClickListener() {


        public void onClick(View v) 
        {
            Intent i = new Intent(SearchActivity.this,DocprofileextActivity.class);
            startActivity(i);       
        }
    });
    }

    public void onItemSelected(AdapterView<?> parent, View view, int position,long id) 
    {

         if(parent==spinner)
         {
            Toast toast = Toast.makeText(this, items[position], 2000);
            toast.show();

            logintosever obj1=new logintosever();

            try 
            {
                doctorsname=obj1.searchbycategory(items[position]);
            }
            catch (IOException e) 
            {
                e.printStackTrace();
            }
            catch (JSONException e) 
            {
                e.printStackTrace();
                flag=false;
            }

            Spinner spinner = (Spinner) findViewById(R.id.doctorsname);

            if(doctorsname!=null)
            {
                ArrayAdapter<CharSequence> adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item,doctorsname);
                adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                spinner.setEnabled(true);
                spinner.setAdapter(adapter);
            }
            else
            {
                spinner.setEnabled(false);
            }
         }

    }

    public void onNothingSelected(AdapterView<?> arg0) 
    {

    }


    public void onItemSelected2(AdapterView<?> parent, View view, int position,long id) 
    {
    }


}

Ответы [ 2 ]

0 голосов
/ 28 мая 2013

Основная проблема в том, что размер вашего массива не соответствует вашему адаптеру. Предположим, ваш массив состоит из 10 элементов, а в адаптере будет только 5 элементов,

означает string [10] = {"a", "b", "c", "d", "e"};

0 голосов
/ 11 марта 2012

Сначала я отправляю вам свои комментарии, потому что они кажутся более важными:

  • Пожалуйста, вернитесь к своим старым вопросам и примите ответы - как работает принятие ответа - это также объясняет, почему вы должны ..
  • Пожалуйста, в следующий раз, когда вы опубликуете свой код, попробуйте удалить нерелевантный код, это увеличит ваши шансы заставить людей прочитать ваш код.

по поводу вашего вопроса я не совсем уверен, но есть исключение NullPointerException, которое означает, что вы пытаетесь использовать переменную с нулевым значением в месте, которое не принимает нулевое значение возможно, попытайтесь изменить переменную toast на this-

Toast toast = Toast.makeText(this, "item:"+items[position], 2000);

так что вы не можете положить ноль в тост.

...