Java 需要对代码发表意见吗
我知道我已经问过NullPointerException,但我在代码中发现了另一个错误,无法找到解决它的方法。提前谢谢。代码如下:Java 需要对代码发表意见吗,java,string,nullpointerexception,logcat,Java,String,Nullpointerexception,Logcat,我知道我已经问过NullPointerException,但我在代码中发现了另一个错误,无法找到解决它的方法。提前谢谢。代码如下: 03-07 14:11:13.510: E/AndroidRuntime(897): Process: br.com.agendadecontatos, PID: 897 03-07 14:11:13.510: E/AndroidRuntime(897): java.lang.NullPointerException 03-07 14:11:13.510: E/An
03-07 14:11:13.510: E/AndroidRuntime(897): Process: br.com.agendadecontatos, PID: 897
03-07 14:11:13.510: E/AndroidRuntime(897): java.lang.NullPointerException
03-07 14:11:13.510: E/AndroidRuntime(897): at br.com.agendadecontatos.ProvedorDeContatos.toString(ProvedorDeContatos.java:50)
让我说得更清楚一点,因为有些人说我的问题没有用或类似的东西。我是Java编程新手,真的不知道如何解决这个问题。我希望有人能理解我的处境。我只是请求帮助。在否决投票之前,说出缺失的内容。谢谢
@Override
public String toString()
{
// TODO Auto-generated method stub
return Nome + "-" + Telefones.get(0); // <- the error is here
//the error is here
}
@覆盖
公共字符串toString()
{
//TODO自动生成的方法存根
返回Nome+“-”+Telefones.get(0);//这听起来像是Telefones
变量在调用get
时为空。这就是调用get
失败并抛出异常的原因
NullPointerException
通常意味着某个对象试图调用一个方法或访问一个空变量上的字段。一旦找到了发生此情况的行,请仔细查看该行上正在使用的变量。在这种情况下,有两个:Nome
和Telefones
Nome
没有问题,因为它只是用+
连接到另一个字符串,而这种字符串连接不会引发NullPointerException
(而不是将单词“null”放在字符串中)。因此,即使Nome
为null,也不会导致异常
这就剩下了Telefones.get(0)
调用。尝试在null对象上调用方法总是会导致NullPointerException
,而该行上没有其他任何东西会导致异常,因此必须是这样。Do System.out.println(Nome);System.out.println(Telefones)并告诉我您在控制台中看到了什么。仍然会出现“不幸的是,应用程序已停止”的消息。似乎Nome或Telefones都是null。您是否创建过它们??(请记住,声明与分配/创建不同。声明的对象引用默认初始化为null。)是的,我做了。看看第9行“private List Telefones;”。我将“return Nome+”-“+Telefones.get(0)”;改为“return”Nome-“+this.Nome+”,Telefones-“+this.Telefones;”,应用程序开始运行了!这让我觉得变量声明中不应该有问题。问题可能在这一行的代码序列上。
package br.com.agendadecontatos;
import java.util.List;
public class ProvedorDeContatos
{
private String ID;
private String Nome;
private String Sobrenome;
private List<ProvedorDeContatos> Telefones;
public String getID()
{
return ID;
}
public void setID(String string)
{
ID = string;
}
public String getNome()
{
return Nome;
}
public void setNome(String nome)
{
Nome = nome;
}
public List<ProvedorDeContatos> getTelefones()
{
return Telefones;
}
public void setTelefones(List<ProvedorDeContatos> telefones)
{
Telefones = telefones;
}
public String getSobrenome()
{
return Sobrenome;
}
public void setSobrenome(String sobrenome)
{
Sobrenome = sobrenome;
}
//Metodo sobreescrito para que não aparece o nome do componente na listView
@Override
public String toString()
{
// TODO Auto-generated method stub
return Nome + "-" + Telefones.get(0);
}
//função criada após o erro com o setTelefones na classe Telefone
public void setTelefones(String telefones)
{
//TODO Auto-generated method stub
}
}