欢迎来到个人简历网!永久域名:gerenjianli.cn (个人简历全拼+cn)
当前位置:首页 > 范文大全 > 实用文>Android中findViewByIdh获取EditText 空指针问题

Android中findViewByIdh获取EditText 空指针问题

2022-09-13 08:33:52 收藏本文 下载本文

“南渡北归”通过精心收集,向本站投稿了4篇Android中findViewByIdh获取EditText 空指针问题,以下是小编为大家整理后的Android中findViewByIdh获取EditText 空指针问题,希望对您有所帮助。

Android中findViewByIdh获取EditText 空指针问题

篇1:Android中findViewByIdh获取EditText 空指针问题

今天再做一个程序时,发现我使用findViewById(R.id.edit)获取EditText时总是报空指针错误,我想不可能啊!!

最后从findViewById下手,才发现原来此方法中的R.id.edit是从当前Activity或者Dialog的主布局文件xml中获取,

比如:我的程序:

ListActivity类中:

。。。。。。。

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.list_view);

}

。。。。。

/**

* 显示弹出的输入窗口

* */

public void showInputDialog(FileBean fileBean) {

LayoutInflater layoutInflater = getLayoutInflater();

View layout = layoutInflater.inflate(R.layout.input_dialog,

(ViewGroup) findViewById(R.id.input_dialog));

EditText editText = (EditText)layout.findViewById(R.id.input_content);// 获取输入文本框 如果改成EditText editText = (EditText)this.findViewById(R.id.input_content);// 空指针错误

new AlertDialog.Builder(this)

.setTitle(“重命名文件” + new File(fileBean.getPath()).getName())

.setView(layout)

.setPositiveButton(“确定”, new MyDialogListener(editText))

.setNegativeButton(“取消”, new MyDialogListener(editText)).show();

}

布局文件:

input_dialog.xml

< ?xml version=“1.0” encoding=“utf-8”?>

< !-- 弹出输入对话框布局文件 -->

android:layout_width=“wrap_content” android:layout_height=“wrap_content”

android:orientation=“horizontal” android:id=“@+id/input_dialog”>

android:layout_height=“50dip” android:textSize=“15dip” android:text=“@string/rename_file”>

android:layout_width=“150dip” android:layout_height=“50dip”>

< /LinearLayout>

list_view.xml

< ?xml version=“1.0” encoding=“utf-8”?>

< !-- 文件显示列表布局 -->

android:layout_width=“wrap_content” android:layout_height=“wrap_content”

android:orientation=“vertical”>

android:layout_height=“wrap_content” android:text=“@string/title”>

android:layout_width=“wrap_content” android:layout_height=“wrap_content”>

android:layout_height=“40dip” android:text=“@string/search”

android:singleLine=“true”>

android:layout_width=“40dip” android:layout_height=“40dip”

android:background=“@drawable/search”>

android:layout_height=“wrap_content”>

android:layout_height=“wrap_content” android:scrollbarSize=“15dip”

android:fadingEdge=“none” android:divider=“#222553”

android:dividerHeight=“2dip” android:cacheColorHint=“#000000”>

< /LinearLayout>

原因:因为EditText editText = (EditText)layout.findViewById(R.id.input_content);是从Dialog对话框布局layout中寻找ID为input_content的子元素

EditText editText = (EditText)this.findViewById(R.id.input_content);// 空指针错误 因为是从this对象即当前ListActivity的布局List_view.xml中寻找ID为input_content的子元素EditText,而我们在List_view.xml布局文件中并无定义此元素故空指针错误 ,并且我们的目的并不是这样,

。。。

只要理解findViewById就行了。。。。。

摘自 魏艺荣的专栏

篇2:c/c++中的指针的应用及注意问题

指针是c/c++学习一个比较让人头痛的问题,在程序设计过程中,指针也往往是产生隐含bug的原因,下面就来

谈谈指针的应用以及需要注意的一些问题,里面也许就有你平时没有注意到的问题,希望能帮助各位读者理解好指针。

一、我们先来回忆一下指针的概念吧,方便下面的介绍

指针是存放地址值的变量或者常量。例如:int a=1;&a就表示指针常量(“&”表示

取地址运算符,也即引用)。int *b,b表示的是指针变量(注意,是b表示指针变量而

不是*b),*表示要说明的是指针变量。大家注意int *b[2]和int(*b)[2]是不同的,

int *b表示一个指针数组,而int (*b)[2]表示含有两个元素的int指针,这里要注意

运算优先级问题,有助于理解指针问题。

在这里大概介绍基本概念就够了,至于具体使用方法,如赋值等,很多书都有介绍

,我就不多说了。

二、应用以及注意的问题

1、 理解指针的关键所在——对指针类型和指针所指向的类型的理解

①、 指针类型:可以把指针名字去掉,剩下的就是这个指针

例如:int *a;//指针类型为int *

int **a;//指针类型为int **

int *(*a)[8];//指针类型为 int *(*)[8]

②、 指针所指向的类型:是指编译器将把那一片内存所看待成的类型。这里只要把

指针声明语句中的指针名字和名字右边的“*”号去掉就可以了,剩下的就是指针所指向

的类型。

我之所以把他们放在第一位,是因为弄清楚他们是学c/c++指针的重点,正确理解他

们才能使你打好c/c++的编程基础。

2、 指针的应用——传递参数。

其实它可以相当于隐式的返回值,这就比return的方法更加灵活了,可以返回更多

的值,看看下面的例子自然就明白了:

#include “iostream.h”

void example(int *a1,int &b1,int c1)

{

*a1*=3;

++b1;

++c1;

}

void main

{

int *a;

int b,c;

*a=6;

b=7;c=10;

example(a,b,c);

cout 《“*a=”《*a<

cout 《“b=”<

cout 《“c=”<

}

输出:*a=18

b=8

c=10

注意到没有,*a和b的值都改变了,而c没有变,

这是由于a1是指向*a(=6)的指针

,也即与a是指向同一个地址,所以当a1指向的值改变了,*a的值也就改变了。在函数中

的参数使用了引用(int &b1),b1是b的别名,也可以把它当作特殊的指针来理解,所

以b的值会改变。函数中的参数int c1只是在函数中起作用,当函数结束时候便消失了,

所以在main()中不起作用。

3、 关于全局变量和局部变量的一个问题

先不废话了,先看看程序:

#include “iostream.h”

int a=5;

int *example1(int b)

{

a+=b;

return &a;

}

int *example2(int b)

{

int c=5;

b+=c;

return &b;

}

void main()

{

int *a1=example1(10);

int *b1=example2(10);

cout 《”a1=”《*a1<

cout 《”b1=”《*b1<

}

输出结果:

a1=15

b1=4135

*b1怎么会是4135,而不是15呢?是程序的问题?没错吧?

由于a是全局变量,存放在全局变量的内存区,它一直是存在的;而局部变量则是存

在于函数的栈区,当函数example2()调用结束后便消失,是b指向了一个不确定的区域

,产生指针悬挂。

下面是对example1()和example2()的反汇编(用TC++ 3.0编译):

example1():

push bp;入栈

mov bp,sp

mov ax,[bp+04];传递参数

add [00AA],ax;相加

mov ax,00AA ;返回了结果所在的地址

.

.

.

pop bp;恢复栈,出栈

篇3:C/C++中利用空指针(NULL),提高程序运行效率

//程序作者:管宁

//站点:www.cndev-lab.com

//所有稿件均有版权,如要,请务必著名出处和作者

#include

#include

using namespace std;

void print_char(char* array[]);//函数原形声明

void main(void)

{

char* test[]={“abc”,“cde”,“fgh”,NULL};//这里添加一个NULL,表示不指向任何地址,值为0

print_char(test);

cin.get;

}

void print_char(char* array[])

{

while(*array!=NULL)

{

cout<<*array++<

}

}

这里的写法,可以避免使用for循环,减少栈空间内存的使用和减少运行时的计算开销!

篇4:对于众多人提出的c/c++中指针难学的问题做个总结:

下两个例子要非常注意,函数传递的不是数组中数组元素的真实值而是数组在内存中的实际地址!/*程序作者:管宁

站点:www.cndev-lab.com

所有稿件均有版权,如要转载,请务必著名出处和作者*/

#include

void main(void)

{

void reversal();

static int a[10] = {0,1,2,3,4,5,6,7,8,9}; /* 建立一个数组并初始化 */

int i;

for (i=0;i<10;i++)

{

printf(“%d ”,a);

}

printf(“n”);

reversal(a,10); /* 调用自定义涵数进行反向显示排序,并把数组a的起始地址传送给形式参数x */

for (i=0;i<10;i++)

{

printf(“%d ”,a);

}

printf(“n”);

}

void reversal(x,n)

int x[],n; /* 定义形式参数 */

{

int m=(n-1)/2; /* 计算10个数需要循环几次,因为是两两调换第一个数组是x[0]故应该是int(9/2) */

int temp,i,j; /* 建立零时变量temp用于每次交换处理时零时存储x的值 */

for (i=0;i<=m;i++)

{

j=n-1-i; /* 反向计算出被调换的数组下标,例如x[0] 对应的x[n-1-i]就是x[9] */

temp=x;

x=x[j];

x[j]=temp;

}

}

/* 次题需要注意的是:这里由于a[10]和x[10]是共同享内存地址位的所以进行交换后a[10]的实际值也就发生了改变 */

/*程序作者:管宁

站点:www.cndev-lab.com

所有稿件均有版权,如要转载,请务必著名出处和作者*/

#include

void main(void)

{

void reversal();

static int a[10] = {0,1,2,3,4,5,6,7,8,9}; /* 建立一个数组并初始化 */

int i;

for (i=0;i<10;i++)

{

printf(“%d ”,a);

}

printf(“n”);

reversal(a,10); /* 调用自定义涵数进行反向显示排序,并把数组a的起始地址传送给形式参数x */

for (i=0;i<10;i++)

{

printf(“%d ”,a);

}

printf(“n”);

}

void reversal(x,n)

int *x,n; /* 定义x为指针变量 */

{

int temp,*p,*i,*j; /* 这里需要注意的是temp用与交换的时候临时存储数据的 */

i = x; /* 利用指针变量i存储数组a的起始地址 */

p = x + ((n-1)/2); /* 计算最后一次循环的时候数组a的地址 */

j = x + n - 1; /* 计算数组a也就是a[9]的结束地址好用于交换 */

for (;i<=p;i++,j--) /* 利用循环和指针进行数组元素值的交换 */

{

temp=*i; /* 用temp临时存储*i也就是循环中a实际的值 */

*i=*j;

*j=temp;

}

}

/* 此例同样要注意到利用指针进行数组的操作同样改变了实际

【Android中findViewByIdh获取EditText 空指针问题】相关文章:

1.空指针漏洞防护技术――初级篇

2.C/C++中利用空指针(NULL),提高程序运行效率

3.c中指针指针、指针的指针、指针数组和数组指针

4.Android 代码中设置Color参数

5.空乘英语面试问题及答案

6.空巢老人问题的社会实践调查报告

7.面试中的问题

8.《答谢中书书》问题分析

9.班主任工作计划中存在问题

10.面试中如何回答问题

下载word文档
《Android中findViewByIdh获取EditText 空指针问题.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度: 评级1星 评级2星 评级3星 评级4星 评级5星
点击下载文档

文档为doc格式

  • 返回顶部