xml-FindViewById()引起的应用崩溃

问题描述

FindViewById()引起的应用崩溃

如果没有下面这两行代码就正常运行,但是加上应用就会崩溃。

EditText convertValue = (EditText) findViewById(R.id.et_value_convert);
TextView convertResult = (TextView) findViewById(R.id.txt_result);

完整代码如下:

package com.doubleelite.maxtest;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class ConverterActivity extends Activity {

EditText convertValue = (EditText) findViewById(R.id.et_value_convert);
TextView convertResult = (TextView) findViewById(R.id.txt_result);

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_converter);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_converter, menu);
    return true;
}

// Custom method to handle button clicks.
public void onClick(View v) {
    switch(v.getId()) {

    case R.id.btn_to_cel:
        convertResult.setText(String.valueOf(convertFahrenheitToCelsius(Integer.valueOf(convertValue.getText().toString()))));
    }
}

private float convertFahrenheitToCelsius(float f) {
    return (f-32) * (5/9);
}

private float convertCelsiusToFahrenheit(float c) {
    return c * (9/5) + 32;
}

}

XML文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".ConverterActivity" >

<EditText
    android:id="@+id/et_value_convert"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ems="10"
    android:hint="@string/text_value_convert"
    android:inputType="number"
    />

<Button
    android:id="@+id/btn_to_cel"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/button_celsius"
    android:onClick="onClick"
    />

<Button
    android:id="@+id/btn_to_fahr"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/button_fahr"
    android:onClick="onClick"
    />

<TextView
    android:id="@+id/txt_result"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:text="Medium Text"
    android:textAppearance="?android:attr/textAppearanceMedium"
    tools:ignore="HardcodedText" />

</LinearLayout>

解决方案

问题出在你的初始化控件是在onCreate之前,在onCreate方法中有这么一句setContentView(R.layout.activity_converter);意思是将布局加载进来,而你的控件是在布局文件中的,你布局文件都没有加载进来findViewById怎么可能找得到控件呢?
所以应该改成
public class ConverterActivity extends Activity {

EditText convertValue ;
TextView convertResult;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_converter);

convertValue = (EditText) findViewById(R.id.et_value_convert);
convertResult = (TextView) findViewById(R.id.txt_result);
}

解决方案二:

既然是findViewById,那么你现在放的位置还没有进行view的初始化,导致返回的都是null,那么一旦调用就是npe,放到setContentView后面就可以了。

解决方案三:

修改你的代码如下:

public class ConverterActivity extends Activity {

EditText convertValue ;
TextView convertResult;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_converter);

 convertValue = (EditText) findViewById(R.id.et_value_convert);
 convertResult = (TextView) findViewById(R.id.txt_result);
}

 ///加上你的代码
时间: 2024-09-19 09:52:58

xml-FindViewById()引起的应用崩溃的相关文章

布局-android 将自定义组件添加到xml后,程序崩溃

问题描述 android 将自定义组件添加到xml后,程序崩溃 activity_main中的代码是这样的 xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:id

JAVA MYSQL 转 XML 生成的XML 的结构的问题 急急啊 求大大解决 新手快崩溃了

问题描述 这是一个我看的帖子求大大们帮忙耐心看下"总是在网络上copy别人的源代码,今天我也贴出自己今天写的源码,相信这个程序会对大家在平时的工作中需要频繁从数据库中提取数据转化成xml文件会有帮助.最近公司项目中有一件事就是从数据库表中读出数据,然后转换成xml文件供客户端下载,由于数据库中表太多,不可能为单独的每个表都写一个转换程序.于是,经过分析,写了一个通用的用ResultSet对象转换成xml文件的程序.这样,只需把查询结果集(ResultSet对象)和要生成的xml文件的路径传入,然

Caused by: android.view.InflateException: Binary XML file line #12: Error inflating class android.support.design.widget.TabLayout,TableLayout引起页面崩溃

在使用TableLayout的时候,运行引用程序直接Crash.   FATAL EXCEPTION: main Process: com.edaixi.activity, PID: 9703 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.edaixi.activity/com.edaixi.activity.PriceCenterActivity}: android.view.InflateExce

java-调用 getStringArray 后 android 程序崩溃

问题描述 调用 getStringArray 后 android 程序崩溃 程序出现了下面的错误,在 emulator中奔溃了.现在还不确定什么问题. Logcat: E/AndroidRuntime( 1928): FATAL EXCEPTION: main E/AndroidRuntime( 1928): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.packtpub.kitchendroid/c

[Android]将应用崩溃信息汇报给开发者并重新启动应用

http://blog.csdn.net/sodino/article/details/6540329 在开发过程中,虽然经过测试,但在发布后,在广大用户各种各样的运行环境和操作下,可能会发生一些异想不到的错误导致程序崩溃.将这些错误信息收集起来并反馈给开发者,对于开发者改进优化程序是相当重要的.好了,下面就来实现这种功能吧. (更正:2012年2月9日18时42分07秒) 由于为历史帖原因,以下做法比较浪费,但抓取异常的效果是一样的. 1.对于UI线程(即Android中的主线程)抛出的未捕获

listview-写了个ListView,打开就崩溃

问题描述 写了个ListView,打开就崩溃 用的Android Studio.Activity自动在manifests里注册了. 将该activity设置为打开加载页面时,打开就直接闪退. 错误信息一闪就没了... Java代码: package com.demo.listview; import android.app.Activity; import android.os.Bundle; import android.widget.ArrayAdapter; import android.

android-fragment间跳转时程序崩溃

问题描述 fragment间跳转时程序崩溃 我在一个Activity中加载了三个fragment,每个fragment里有几张图片,从一个fragment跳转到另一个fragment时程序就没反应了,直接崩溃,但是如果把图片减少或者全部移除,跳转就完全没有问题,请问这个问题如何解决? public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layo

《Android应用开发攻略》——3.6 应用程序崩溃排错

3.6 应用程序崩溃排错 Ulysses Levy3.6.1 问题 应用崩溃,而原因不确定(参见图3-14). 3.6.2 解决方案 从查看日志开始.3.6.3 讨论 遇到应用程序崩溃时,我们可以使用adb logcat命令或者Eclipse LogCat窗口查看AVD的日志.例3-3说明了如何用adb logcat查看堆栈跟踪,找到故障的位置. 例3-3:"权限拒绝"问题的堆栈跟踪 E/DatabaseUtils( 53): Writing exception to parcel E

android-Android 里面自己定义的Adapter运行崩溃

问题描述 Android 里面自己定义的Adapter运行崩溃 class MyAdapter extends ArrayAdapter { public MyAdapter(Context context, int resource) { super(context, resource); } @Override public long getItemId(int position) { return position; } ** @Override public int getCount()