2012-03-11 75 views
0

我制作了2个调整器,而我的第二个调整器依赖于第一个调整器。当我点击第二个微调时,我的程序崩溃。这是我的logcat说什么:spinner onItemSelected制作问题

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) 
    { 
    } 


} 
+0

你的命名规范是如此丑陋,,,,这两个微调名称是相同的,你把secon微调列表的位置? – 2012-03-11 07:38:55

+0

thnx为你的回应samir,好吧我会改变名字,而且我已经看到了教程中的人做了2个旋转器,但有1个监听器,并且他通过“this”来识别它,就像我为spinner1做的一样 – 2012-03-11 07:42:15

+0

您正在将空数组传递给数组适配器。请只发布您认为可能发生错误的代码。所以它会更具可读性和可追踪性。 – AAnkit 2012-03-11 08:04:02

回答

0

我首先把我的意见你,因为他们似乎更重要:

  • 请到回到你的旧的问题和接受的答案 - how does accepting an answer works - 这也解释了为什么你应该..
  • 请您下次发布代码的时间尽量去除不相关的合作它会堆积你的机会让人们阅读你的代码。

关于你的问题,我真的不知道,但它的一个NullPointerException这意味着你要使用在一个地方一个空值的变量不接受空 也许试图改变你的面包变量这 -

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

所以你不能把你的烤面包内空..

0

主要问题是您的数组的大小是与你错配适配器假设,你的阵列是10元的,你的适配器将只有5元从它,

装置 串[10] = { “一”, “B”, “C”, “d”, “e” 的};