版本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");请各位帮忙看看哪里有问题呢?
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");请各位帮忙看看哪里有问题呢?
解决方案 »
- 下载Android源代码出错,请教会是什么原因
- android XMLpull解析问题
- AndEngine连demo都跑不起来求助
- 强烈建议Android专栏分为应用开发和源码开发两个部分
- 新手问题,关于Id查找
- 如何获得给定日期的 年 月 日
- MyEclipse安装ADT
- 请问在关于fragment的显示listview的问题
- Android的DownloadManager.Request使用一个问题,如何打开系统的下载管理?
- 使用TextureView预览摄像头画面,画面滚动的问题
- android:debuggable默认值是true还是false?
- 100分求解:列举出系统中所有的SD(TF)卡,不管是内置的还是外置的
目测setconentview的问题。
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
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();
}
}
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;
}
}
};
以上,只是建议
this, R.array.inches, android.R.layout.simple_spinner_item);
这个出错,找找看R.array.inches是否存在。
我觉得不是这个问题,检查了下,R.array.inches是存在的。另外,如果不存在,编译通过不了吧?
将这段
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);试试
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();
}
}
Spinner spinnerPages = new Spinner(this);
ArrayAdapter<String> adapter= new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, pageStrArray);
spinnerPages.setAdapter(adapter);
请教下,上面的用法,new的时候分配了空间了,对吗?下面这个用法,就是createFromResource,也会分配空间吗?是不是没有分配空间,导致的问题?ArrayAdapter<CharSequence> adapter_feet = ArrayAdapter.createFromResource(
this, R.array.feets, android.R.layout.simple_spinner_item);
需要用字符型的,ArrayAdapter<CharSequence>,请教怎么用?这样的用法只有两个参数,怎么把R.array.feets的值赋值给adapter_feet呢?ArrayAdapter<CharSequence> adapter_feet= new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_item);