Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字符串之间的比较出错_Java_Android - Fatal编程技术网

Java 字符串之间的比较出错

Java 字符串之间的比较出错,java,android,Java,Android,我有一个生成电话位置的类,它会在每次检索到新位置时更新TextView。 我们将把这个类命名为Track Track类包含一个sendLocation对象,它是一个线程。 sendLocation包含一个Track对象,它每x次检查TextView是否已更改(Track类获得了一个返回TextView字符串的方法),如何更改 它将最后一个地址保存在一个字符串中,并每x次比较最后一个地址和文本视图地址,如果它们不同,它将此字符串发送到my db。 我这样做是为了避免重复 我的问题是,为什么它总是向

我有一个生成电话位置的类,它会在每次检索到新位置时更新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(…
    ),并找出字符串是否真的不同

我不确定这在多大程度上适用于Andriod开发,但在常规Java世界中,当您遇到这样的问题时,这意味着您的线程有一个变量的本地副本,这时您开始将成员定义为volatile。在您的情况下,我不确信对track对象的引用会得到更新,但您可以尝试一下,看看是否定义了that引用为volatile会有所帮助。

我不确定这在多大程度上适用于Andriod开发,但在普通Java世界中,当您遇到这样的问题时,这意味着您的线程有一个变量的本地副本,这时您开始将成员定义为volatile。在您的情况下,我不相信track对象的引用会升级但您可以尝试将该引用定义为volatile是否有帮助。

lastAddress=t1.getAddress()之后;如果lastAddress是相同的值

这条线路有问题

!t1.getAddress().equals(lastAddress))所以您应该调试这一行

监视

最后地址


t1.getAddress()

lastAddress=t1.getAddress()之后;如果lastAddress是相同的值

这条线路有问题

!t1.getAddress().equals(lastAddress))所以您应该调试这一行

监视

最后地址

t1.getAddress()

您可能遇到了问题。在比较时,保存
lastAddress
的变量仍然没有更新为最新值

在多线程程序中,不同的线程保存同一共享变量的副本以提高效率。此副本将不时更新,但并不保证所有线程每次访问时都会看到相同的值。为此,必须在更新/读取变量的块中使用
synchronized
,或将其设置为
volatile
,使所有线程指向相同的变量值,而不是拥有自己的副本


编辑:

这是一个很好的链接,可以帮助您进一步了解可能发生在您身上的事情:

您可能正在经历一场灾难。在比较时,保存
lastAddress
的变量仍然没有更新为最新值

在多线程程序中,不同的线程保存同一共享变量的副本以提高效率。此副本将不时更新,但并不保证所有线程每次访问时都会看到相同的值。为此,必须在更新/读取变量的块中使用
synchronized
,或将其设置为
volatile
,使所有线程指向相同的变量值,而不是拥有自己的副本


编辑:


这是一个很好的链接,可以帮助您进一步了解可能发生在您身上的情况:

我建议您添加一些日志记录,看看
getAddress()
lastAddress
在每种情况下都是什么……尝试记录这两个值。检查一下箱子,在结尾/开头可能有一些额外的空格,我看不到其他任何东西…我怀疑你的问题在于你没有显示的代码。你能确定地址相等吗?可能与空间有关?我会记录这两个地址以手动进行比较以进行测试(或使用调试器)。我建议您添加一些日志记录,以查看在每种情况下
getAddress()
lastAddress
是什么……尝试记录这两个值。检查一下箱子,在结尾/开头可能有一些额外的空格,我看不到其他任何东西…我怀疑你的问题在于你没有显示的代码。你能确定地址相等吗?可能与空间有关?我会记录这两个地址,以便手动比较以进行测试(或使用调试器)。我建议同时记录这两个地址:)我建议同时记录这两个地址:)