版本2.2,XLM文件里这样定义    <Spinner android:id="@+id/feet"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"    
        android:drawSelectorOnTop="true"
        android:prompt="@string/feet_prompt"
    />JAVA代码如下
        private Spinner field_feet;        field_feet = (Spinner)findViewById(R.id.feet);        Log.d(TAG,"field_feet 0");
        ArrayAdapter<CharSequence> adapter_feet = ArrayAdapter.createFromResource(
         this, R.array.feets, android.R.layout.simple_spinner_item);
            
        Log.d(TAG,"field_feet 1");
        adapter_feet.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);        Log.d(TAG,"field_feet 2");
        field_feet.setAdapter(adapter_feet);        程序log里,出现这条后,就没有下面的信息了。运行显示崩溃了。
        Log.d(TAG,"field_feet 0");请各位帮忙看看哪里有问题呢?

解决方案 »

  1.   

    发详细的出错Log信息上来,在LogCat的E标签里面有错误信息
      

  2.   

    贴错误log,或者贴全部代码。
    目测setconentview的问题。
      

  3.   

    log如下,请大侠帮忙看看哪里出问题了。07-23 09:53:43.705: D/aBmi(313): setContentView
    07-23 09:53:43.825: D/aBmi(313): findviews
    07-23 09:53:43.825: D/aBmi(313): findViewById
    07-23 09:53:43.845: D/aBmi(313): field_feet 0
    07-23 09:53:43.845: D/AndroidRuntime(313): Shutting down VM
    07-23 09:53:43.845: W/dalvikvm(313): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
    07-23 09:53:43.885: E/AndroidRuntime(313): FATAL EXCEPTION: main
    07-23 09:53:43.885: E/AndroidRuntime(313): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.demo.andriod.abmi/com.demo.andriod.abmi.Abmi}: java.lang.NullPointerException
    07-23 09:53:43.885: E/AndroidRuntime(313):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
    07-23 09:53:43.885: E/AndroidRuntime(313):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
    07-23 09:53:43.885: E/AndroidRuntime(313):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
    07-23 09:53:43.885: E/AndroidRuntime(313):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
    07-23 09:53:43.885: E/AndroidRuntime(313):  at android.os.Handler.dispatchMessage(Handler.java:99)
    07-23 09:53:43.885: E/AndroidRuntime(313):  at android.os.Looper.loop(Looper.java:123)
    07-23 09:53:43.885: E/AndroidRuntime(313):  at android.app.ActivityThread.main(ActivityThread.java:4627)
    07-23 09:53:43.885: E/AndroidRuntime(313):  at java.lang.reflect.Method.invokeNative(Native Method)
    07-23 09:53:43.885: E/AndroidRuntime(313):  at java.lang.reflect.Method.invoke(Method.java:521)
    07-23 09:53:43.885: E/AndroidRuntime(313):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    07-23 09:53:43.885: E/AndroidRuntime(313):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    07-23 09:53:43.885: E/AndroidRuntime(313):  at dalvik.system.NativeStart.main(Native Method)
    07-23 09:53:43.885: E/AndroidRuntime(313): Caused by: java.lang.NullPointerException
    07-23 09:53:43.885: E/AndroidRuntime(313):  at android.content.res.AssetManager.getResourceTextArray(AssetManager.java:213)
    07-23 09:53:43.885: E/AndroidRuntime(313):  at android.content.res.Resources.getTextArray(Resources.java:361)
    07-23 09:53:43.885: E/AndroidRuntime(313):  at android.widget.ArrayAdapter.createFromResource(ArrayAdapter.java:391)
    07-23 09:53:43.885: E/AndroidRuntime(313):  at com.demo.andriod.abmi.Abmi.findViews(Abmi.java:72)
    07-23 09:53:43.885: E/AndroidRuntime(313):  at com.demo.andriod.abmi.Abmi.onCreate(Abmi.java:44)
    07-23 09:53:43.885: E/AndroidRuntime(313):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    07-23 09:53:43.885: E/AndroidRuntime(313):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
    07-23 09:53:43.885: E/AndroidRuntime(313):  ... 11 more
    07-23 09:54:28.945: I/Process(313): Sending signal. PID: 313 SIG: 9
      

  4.   

    代码如下:package com.demo.andriod.abmi;import java.text.DecimalFormat;
    import java.util.Locale;import android.app.Activity;
    import android.app.AlertDialog;
    import android.content.DialogInterface;
    import android.content.res.Configuration;
    import android.content.res.Resources;
    import android.os.Bundle;
    import android.util.DisplayMetrics;
    import android.util.Log;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Spinner;
    import android.widget.TextView;
    import android.widget.Toast;public class Abmi extends Activity {
    private static final String TAG = "aBmi";

    /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            
            Resources res = getResources();
            Configuration conf = res.getConfiguration();
            conf.locale = Locale.SIMPLIFIED_CHINESE;
            conf.locale = Locale.ENGLISH;
            DisplayMetrics dm = res.getDisplayMetrics();
            res.updateConfiguration(conf, dm);
            
            Log.d(TAG,"setContentView");
            setContentView(R.layout.main);        Log.d(TAG,"findviews");
            findViews();        Log.d(TAG,"setListensers");
            setListensers();
        }    private Button button_calc;
    //    private EditText field_feet;
    //    private EditText field_inch;
        private Spinner field_feet;
        private Spinner field_inch;
        private EditText field_weight;
        private TextView view_result;
        private TextView view_suggest;       private void findViews(){
            Log.d(TAG,"findViewById");     button_calc = (Button)findViewById(R.id.submit);    
    //        field_feet = (EditText)findViewById(R.id.feet);
    //        field_inch = (EditText)findViewById(R.id.inch);
            field_feet = (Spinner)findViewById(R.id.feet);
            field_inch = (Spinner)findViewById(R.id.inch);
            field_weight = (EditText)findViewById(R.id.weight);
            view_result = (TextView)findViewById(R.id.result);
            view_suggest = (TextView)findViewById(R.id.suggest);        Log.d(TAG,"field_feet 0");
            ArrayAdapter<CharSequence> adapter_feet = ArrayAdapter.createFromResource(
             this, R.array.feets, android.R.layout.simple_spinner_item);
                
            Log.d(TAG,"field_feet 1");
            adapter_feet.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);        Log.d(TAG,"field_feet 2");
            field_feet.setAdapter(adapter_feet);                Log.d(TAG,"field_inch 0");
            ArrayAdapter<CharSequence> adapter_inch = ArrayAdapter.createFromResource(
             this, R.array.inches, android.R.layout.simple_spinner_item);
                
            Log.d(TAG,"field_inch 1");
            adapter_inch.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);        Log.d(TAG,"field_inch 2");
            field_inch.setAdapter(adapter_inch);
                    
        }    //Listen for button clicks
        private void setListensers(){
            Log.d(TAG,"set Listensers");
            
            field_feet.setOnItemSelectedListener(getFeet);
            field_inch.setOnItemSelectedListener(getInch);
            
        button_calc.setOnClickListener(calcUsBMI);    
        }    private int feet;
        private int inch;    private Spinner.OnItemSelectedListener getFeet = new Spinner.OnItemSelectedListener(){
         public void onItemSelected(AdapterView parent, View v, int position, long id) {
                feet = parent.getSelectedItemPosition()+2;    
         }
        
            public void onNothingSelected(AdapterView parent) {
            }
        };    private Spinner.OnItemSelectedListener getInch = new Spinner.OnItemSelectedListener() {
            public void onItemSelected(AdapterView parent, View v, int position, long id) {
                    inch = parent.getSelectedItemPosition()+1;
            }
            
            public void onNothingSelected(AdapterView parent) {
            }
        };
         
        private Button.OnClickListener calcUsBMI = new Button.OnClickListener(){
        public void onClick(View v) {
    // TODO Auto-generated method stub
        DecimalFormat nf = new DecimalFormat("0.00");
        
        try{
             /*
             double height = (Double.parseDouble(field_feet.getText().toString())*12+Double.parseDouble(field_inch.getText().toString()))*2.54/100;
             */
                double height = (feet*12+inch)*2.54/100;
                double weight = Double.parseDouble(field_weight.getText().toString())*0.45359;
                double BMI = weight / (height * height);
                
                //Present result
                view_result.setText(getText(R.string.bmi_result) + nf.format(BMI));
            
                    //Give health advice
                    if( BMI > 27 ) {
                     view_suggest.setText(R.string.advice_fat);
                    } else if( BMI > 25 ) {
                     view_suggest.setText(R.string.advice_heavy);            
                    } else if( BMI < 20 ) {
                     view_suggest.setText(R.string.advice_light);
                    } else  {
                     view_suggest.setText(R.string.advice_average);
                    } 
            
                } catch(Exception obj){
                Toast.makeText(Abmi.this, R.string.input_error, Toast.LENGTH_SHORT).show();
            }
        }
        };     
        protected static final int MENU_ABOUT = Menu.FIRST;    @Override
        public boolean onCreateOptionsMenu(Menu menu) {
         // TODO Auto-generated method stub
         super.onCreateOptionsMenu(menu);
            Log.d(TAG,"open Menu");
         menu.add(0,MENU_ABOUT,0,R.string.about_label);
         return true;
        }    @Override
        public boolean onOptionsItemSelected(MenuItem item) {
         // TODO Auto-generated method stub
         super.onOptionsItemSelected(item);
            Log.d(TAG,"select Menu Item");
        
         switch(item.getItemId()){
             case MENU_ABOUT:
             openOptionsDialog();
             break;
         }
        
         return true;
        }    
        public void openOptionsDialog() {  
            Log.d(TAG,"open Dialog");
         new AlertDialog.Builder(this)
            .setTitle(R.string.about_title)
            .setMessage(R.string.about_msg)
            .setPositiveButton(R.string.ok_label, new DialogInterface.OnClickListener(){
            public void onClick(
            DialogInterface dialoginterface, int i){
                        }
        })
             .show();
        }
    }
      

  5.   

     你把 field_feet.setOnItemSelectedListener(getFeet);
      field_inch.setOnItemSelectedListener(getInch);  
    放到  field_inch = (Spinner)findViewById(R.id.inch);
      field_weight = (EditText)findViewById(R.id.weight);
      view_result = (TextView)findViewById(R.id.result);
      view_suggest = (TextView)findViewById(R.id.suggest); 下面,我以前写的时候也会报相同的错,因为 field_feet.setOnItemSelectedListener(getFeet); 调用监听很容易报错,又不好找原因,因为监听写的是对的,所以有时候就是换一下格式,或者 有些东西要放到  onCreate()方法里面的;像得到  id 之类的,如果 你 spinner 较少 建议 直接用 单独给监听   这样不容易报错还好找原因修改 actorSpinner = (Spinner) findViewById(R.id.ActorSpinnerID);
    actorSpinner.setSelection(0, false);
    actorSpinner.setOnItemSelectedListener(new OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent, View view,
    int position, long id) { spinnerActor = parent.getItemAtPosition(position).toString(); List<Map<String,Object>> actorNum =  ms.findMovieByType(spinnerType,spinnerRegion, spinnerActor,spinnerYear,television,pageNo,numSize);
    listmap.clear();
    for (Iterator<Map<String, Object>> typeiterator = actorNum.iterator(); typeiterator.hasNext();) {
    Map<String, Object> num = typeiterator.next(); Integer numint = (Integer) num.get("moviepic");
    String name = (String) num.get("movieName");
    String type = (String) num.get("movieyear");
    String region = (String) num.get("movieactor");
    String actor = (String) num.get("movieregion");
    String year = (String) num.get("movietype");
    String link = (String) num.get("movietlink");
    String jianjie = (String) num.get("jianjie"); //listmap = FileList.findFile(Environment.getExternalStorageDirectory()+"/Pictures/"+numint+".jpg",name,type,region,actor,year,link,jianjie);
    listmap = FileList.findFile("/data/data/com.android.testplayer/pictures/"+numint+".jpg",name,type,region,actor,year,link,jianjie);
    }
    picadapter.notifyDataSetChanged(); 
    }
    public void onNothingSelected(AdapterView<?> arg0) {
    String message = "对不起,没有找到信息...";
    Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG);
    }
    });我  按钮 这样写的 ,代码都没错 ,只是 在上面调用  listener   有时候就是不会让通过,不过我现在的是可以通过的,这样调用,你要很注意细节,有时候你没放错它也会 应用 强制停止运行 
    private View.OnClickListener listener = new OnClickListener() {

    public void onClick(View v) {
    Button bt = (Button) v;
    switch(bt.getId()){
    case R.id.returnsButtonID:
    Intent returnIntent = new Intent(MovieActivity.this,MainActivity.class);

    startActivity(returnIntent);
    listmap.clear();
    MovieActivity.this.finish();
    break;
    case R.id.SouButtonID:
    souSuo();
    break;
    }
    }
    }; 
    以上,只是建议 
      

  6.   

    ArrayAdapter.createFromResource(
       this, R.array.inches, android.R.layout.simple_spinner_item);
    这个出错,找找看R.array.inches是否存在。
      

  7.   


    我觉得不是这个问题,检查了下,R.array.inches是存在的。另外,如果不存在,编译通过不了吧?
      

  8.   


    将这段
    ArrayAdapter.createFromResource(
    this, R.array.inches, android.R.layout.simple_spinner_item);改成:ArrayAdapter.createFromResource(
    getActivity().getApplicationContext(), R.array.inches, android.R.layout.simple_spinner_item);试试
      

  9.   

      ArrayAdapter<CharSequence> adapter_feet = ArrayAdapter.createFromResource(
      this, R.array.feets, android.R.layout.simple_spinner_item);看调试信息,是这里的问题。
    这代码贴的,真难看。
    package com.demo.andriod.abmi;import java.text.DecimalFormat;
    import java.util.Locale;import android.app.Activity;
    import android.app.AlertDialog;
    import android.content.DialogInterface;
    import android.content.res.Configuration;
    import android.content.res.Resources;
    import android.os.Bundle;
    import android.util.DisplayMetrics;
    import android.util.Log;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Spinner;
    import android.widget.TextView;
    import android.widget.Toast;public class Abmi extends Activity {
    private static final String TAG = "aBmi";/** Called when the activity is first created. */
      @Override
      public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
        
      Resources res = getResources();
      Configuration conf = res.getConfiguration();
      conf.locale = Locale.SIMPLIFIED_CHINESE;
      conf.locale = Locale.ENGLISH;
      DisplayMetrics dm = res.getDisplayMetrics();
      res.updateConfiguration(conf, dm);
        
      Log.d(TAG,"setContentView");
      setContentView(R.layout.main);  Log.d(TAG,"findviews");
      findViews();  Log.d(TAG,"setListensers");
      setListensers();
      }  private Button button_calc;
    // private EditText field_feet;
    // private EditText field_inch;
      private Spinner field_feet;
      private Spinner field_inch;
      private EditText field_weight;
      private TextView view_result;
      private TextView view_suggest;     private void findViews(){
      Log.d(TAG,"findViewById");  button_calc = (Button)findViewById(R.id.submit); 
    // field_feet = (EditText)findViewById(R.id.feet);
    // field_inch = (EditText)findViewById(R.id.inch);
      field_feet = (Spinner)findViewById(R.id.feet);
      field_inch = (Spinner)findViewById(R.id.inch);
      field_weight = (EditText)findViewById(R.id.weight);
      view_result = (TextView)findViewById(R.id.result);
      view_suggest = (TextView)findViewById(R.id.suggest);  Log.d(TAG,"field_feet 0");
      ArrayAdapter<CharSequence> adapter_feet = ArrayAdapter.createFromResource(
      this, R.array.feets, android.R.layout.simple_spinner_item);
        
      Log.d(TAG,"field_feet 1");
      adapter_feet.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);  Log.d(TAG,"field_feet 2");
      field_feet.setAdapter(adapter_feet);     Log.d(TAG,"field_inch 0");
      ArrayAdapter<CharSequence> adapter_inch = ArrayAdapter.createFromResource(
      this, R.array.inches, android.R.layout.simple_spinner_item);
        
      Log.d(TAG,"field_inch 1");
      adapter_inch.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);  Log.d(TAG,"field_inch 2");
      field_inch.setAdapter(adapter_inch);
        
      }  //Listen for button clicks
      private void setListensers(){
      Log.d(TAG,"set Listensers");
        
      field_feet.setOnItemSelectedListener(getFeet);
      field_inch.setOnItemSelectedListener(getInch);
        
    button_calc.setOnClickListener(calcUsBMI); 
      }  private int feet;
      private int inch;  private Spinner.OnItemSelectedListener getFeet = new Spinner.OnItemSelectedListener(){
      public void onItemSelected(AdapterView parent, View v, int position, long id) {
      feet = parent.getSelectedItemPosition()+2; 
      }
      
      public void onNothingSelected(AdapterView parent) {
      }
      };  private Spinner.OnItemSelectedListener getInch = new Spinner.OnItemSelectedListener() {
      public void onItemSelected(AdapterView parent, View v, int position, long id) {
      inch = parent.getSelectedItemPosition()+1;
      }
        
      public void onNothingSelected(AdapterView parent) {
      }
      };
        
      private Button.OnClickListener calcUsBMI = new Button.OnClickListener(){
    public void onClick(View v) {
    // TODO Auto-generated method stub
    DecimalFormat nf = new DecimalFormat("0.00");
      
    try{
      /*
      double height = (Double.parseDouble(field_feet.getText().toString())*12+Double.parseDouble(field_inch.getText().toString()))*2.54/100;
      */
      double height = (feet*12+inch)*2.54/100;
      double weight = Double.parseDouble(field_weight.getText().toString())*0.45359;
      double BMI = weight / (height * height);
        
      //Present result
      view_result.setText(getText(R.string.bmi_result) + nf.format(BMI));
        
      //Give health advice
      if( BMI > 27 ) {
      view_suggest.setText(R.string.advice_fat);
      } else if( BMI > 25 ) {
      view_suggest.setText(R.string.advice_heavy); 
      } else if( BMI < 20 ) {
      view_suggest.setText(R.string.advice_light);
      } else {
      view_suggest.setText(R.string.advice_average);
      }  
        
    } catch(Exception obj){
    Toast.makeText(Abmi.this, R.string.input_error, Toast.LENGTH_SHORT).show();
    }
    }
      };     
      protected static final int MENU_ABOUT = Menu.FIRST;  @Override
      public boolean onCreateOptionsMenu(Menu menu) {
      // TODO Auto-generated method stub
      super.onCreateOptionsMenu(menu);
      Log.d(TAG,"open Menu");
      menu.add(0,MENU_ABOUT,0,R.string.about_label);
      return true;
      }  @Override
      public boolean onOptionsItemSelected(MenuItem item) {
      // TODO Auto-generated method stub
      super.onOptionsItemSelected(item);
      Log.d(TAG,"select Menu Item");
      
      switch(item.getItemId()){
      case MENU_ABOUT:
      openOptionsDialog();
      break;
      }
      
      return true;
      }    
      public void openOptionsDialog() { 
      Log.d(TAG,"open Dialog");
      new AlertDialog.Builder(this)
    .setTitle(R.string.about_title)
    .setMessage(R.string.about_msg)
    .setPositiveButton(R.string.ok_label, new DialogInterface.OnClickListener(){
    public void onClick(
    DialogInterface dialoginterface, int i){
      }
    })
      .show();
      }
    }
      

  10.   

    改成这样,第一句加上没有问题,第二句只要一加上,程序运行就崩溃。ArrayAdapter<CharSequence> adapter_feet = null;adapter_feet.createFromResource(this, R.array.feets, android.R.layout.simple_spinner_item);请教下,spinner使用上,有什么特别的吗?哪位好心的大大侠,给贴个运行没有问题的spinner的例子?万分感谢了。
      

  11.   

    String[] pageStrArray = new String[]{"a","b"};
    Spinner spinnerPages = new Spinner(this);
    ArrayAdapter<String> adapter= new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, pageStrArray); 
    spinnerPages.setAdapter(adapter);
      

  12.   


    请教下,上面的用法,new的时候分配了空间了,对吗?下面这个用法,就是createFromResource,也会分配空间吗?是不是没有分配空间,导致的问题?ArrayAdapter<CharSequence> adapter_feet = ArrayAdapter.createFromResource(
             this, R.array.feets, android.R.layout.simple_spinner_item);
      

  13.   


    需要用字符型的,ArrayAdapter<CharSequence>,请教怎么用?这样的用法只有两个参数,怎么把R.array.feets的值赋值给adapter_feet呢?ArrayAdapter<CharSequence> adapter_feet= new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_item);