Java 字符串之间的比较出错
我有一个生成电话位置的类,它会在每次检索到新位置时更新TextView。 我们将把这个类命名为Track Track类包含一个sendLocation对象,它是一个线程。 sendLocation包含一个Track对象,它每x次检查TextView是否已更改(Track类获得了一个返回TextView字符串的方法),如何更改 它将最后一个地址保存在一个字符串中,并每x次比较最后一个地址和文本视图地址,如果它们不同,它将此字符串发送到my db。 我这样做是为了避免重复 我的问题是,为什么它总是向我的数据库发送相同的地址?我的意思是比较字符串非常简单。 下面是一些代码:Java 字符串之间的比较出错,java,android,Java,Android,我有一个生成电话位置的类,它会在每次检索到新位置时更新TextView。 我们将把这个类命名为Track Track类包含一个sendLocation对象,它是一个线程。 sendLocation包含一个Track对象,它每x次检查TextView是否已更改(Track类获得了一个返回TextView字符串的方法),如何更改 它将最后一个地址保存在一个字符串中,并每x次比较最后一个地址和文本视图地址,如果它们不同,它将此字符串发送到my db。 我这样做是为了避免重复 我的问题是,为什么它总是向
if(!t1.getAddress().equals(lastAddress))
{
lastAddress = t1.getAddress();
//send last address to the db
//sleep for a while
}
t1是一个轨迹实例
下面是Track中的getAddress方法:
public String getAddress()
{
return this.mAddress.getText().toString();
}
怎么了?这是一个简单的字符串比较 两种可能的解决方案
- 在数据库中的列上使用
(这样它就不会包含重复的数据)UNIQUE
- 调试代码行
),并找出字符串是否真的不同…equals(…
- 在数据库中的列上使用
(这样它就不会包含重复的数据)UNIQUE
- 调试代码行
),并找出字符串是否真的不同…equals(…
t1.getAddress()在lastAddress=t1.getAddress()之后;如果lastAddress是相同的值 这条线路有问题 !t1.getAddress().equals(lastAddress))所以您应该调试这一行 监视 最后地址 t1.getAddress()您可能遇到了问题。在比较时,保存
lastAddress
的变量仍然没有更新为最新值
在多线程程序中,不同的线程保存同一共享变量的副本以提高效率。此副本将不时更新,但并不保证所有线程每次访问时都会看到相同的值。为此,必须在更新/读取变量的块中使用synchronized
,或将其设置为volatile
,使所有线程指向相同的变量值,而不是拥有自己的副本
编辑: 这是一个很好的链接,可以帮助您进一步了解可能发生在您身上的事情:您可能正在经历一场灾难。在比较时,保存
lastAddress
的变量仍然没有更新为最新值
在多线程程序中,不同的线程保存同一共享变量的副本以提高效率。此副本将不时更新,但并不保证所有线程每次访问时都会看到相同的值。为此,必须在更新/读取变量的块中使用synchronized
,或将其设置为volatile
,使所有线程指向相同的变量值,而不是拥有自己的副本
编辑:
这是一个很好的链接,可以帮助您进一步了解可能发生在您身上的情况:我建议您添加一些日志记录,看看
getAddress()
和lastAddress
在每种情况下都是什么……尝试记录这两个值。检查一下箱子,在结尾/开头可能有一些额外的空格,我看不到其他任何东西…我怀疑你的问题在于你没有显示的代码。你能确定地址相等吗?可能与空间有关?我会记录这两个地址以手动进行比较以进行测试(或使用调试器)。我建议您添加一些日志记录,以查看在每种情况下getAddress()
和lastAddress
是什么……尝试记录这两个值。检查一下箱子,在结尾/开头可能有一些额外的空格,我看不到其他任何东西…我怀疑你的问题在于你没有显示的代码。你能确定地址相等吗?可能与空间有关?我会记录这两个地址,以便手动比较以进行测试(或使用调试器)。我建议同时记录这两个地址:)我建议同时记录这两个地址:)