Android Studio:IDE 致命错误。不会自动建议+编译应用程序有些错误



我不是处理这些东西(修复IDE)的专家,但我得到了116个这样的异常:

相等

对象必须具有相等的哈希码。在重新散列期间,特罗夫 发现以下两个对象声称相等(如 java.lang.Object.equals() 或 TObjectHashingStrategy.equals()) 但是 他们的哈希码(或由您的TObjectHashingStrategy计算的哈希码) 不相等。这违反了 java.lang.Object.hashCode(). 请参阅该方法中的项目符号 文档。object #1 =PsiArrayAccessExpression:args[0] (class com.intellij.psi.impl.source.tree.java.PsiArrayAccessExpressionImpl), 哈希代码=1492582784;object #2 =PsiArrayAccessExpression:args[0] (类 com.intellij.psi.impl.source.tree.java.PsiArrayAccessExpressionImpl), hashCode=1492582784:相等的对象必须具有相等的哈希码。在 重新梳理,Trove发现以下两个对象声称是 equal(如 java.lang.Object.equals() 或 TObjectHashingStrategy.equals()),但他们的哈希码(或那些 由您的TObjectHashingStrategy计算)不相等。这违反了 java.lang.Object.hashCode() 的一般合约。 请参阅项目符号 该方法文档中的两个。对象 #1 =PsiArrayAccessExpression:args[0] (class com.intellij.psi.impl.source.tree.java.PsiArrayAccessExpressionImpl), 哈希代码=1492582784;object #2 =PsiArrayAccessExpression:args[0] (类 com.intellij.psi.impl.source.tree.java.PsiArrayAccessExpressionImpl), 哈希代码=1492582784

即使在重新启动IDE后,它仍然给我带来问题。它不会自动建议或填充变量/函数等。我必须从字面上制作我的应用程序,只是通过记住事情,我该如何解决这个问题?这很烦人。

我注意到每次按 Ctrl+空格键(用于自动建议)时都会抛出它。

帮助?

更新:

> Equal objects must have equal hashcodes. During rehashing, Trove
> discovered that the following two objects claim to be equal (as in
> java.lang.Object.equals() or TObjectHashingStrategy.equals()) but
> their hashCodes (or those calculated by your TObjectHashingStrategy)
> are not equal.This violates the general contract of
> java.lang.Object.hashCode().  See bullet point two in that method's
> documentation. object #1 =PsiArrayAccessExpression:args[0] (class
> com.intellij.psi.impl.source.tree.java.PsiArrayAccessExpressionImpl),
> hashCode=1492582784; object #2 =PsiArrayAccessExpression:args[0]
> (class
> com.intellij.psi.impl.source.tree.java.PsiArrayAccessExpressionImpl),
> hashCode=1492582784: Equal objects must have equal hashcodes. During
> rehashing, Trove discovered that the following two objects claim to be
> equal (as in java.lang.Object.equals() or
> TObjectHashingStrategy.equals()) but their hashCodes (or those
> calculated by your TObjectHashingStrategy) are not equal.This violates
> the general contract of java.lang.Object.hashCode().  See bullet point
> two in that method's documentation. object #1
> =PsiArrayAccessExpression:args[0] (class com.intellij.psi.impl.source.tree.java.PsiArrayAccessExpressionImpl),
> hashCode=1492582784; object #2 =PsiArrayAccessExpression:args[0]
> (class
> com.intellij.psi.impl.source.tree.java.PsiArrayAccessExpressionImpl),
> hashCode=1492582784 java.lang.IllegalArgumentException: Equal objects
> must have equal hashcodes. During rehashing, Trove discovered that the
> following two objects claim to be equal (as in
> java.lang.Object.equals() or TObjectHashingStrategy.equals()) but
> their hashCodes (or those calculated by your TObjectHashingStrategy)
> are not equal.This violates the general contract of
> java.lang.Object.hashCode().  See bullet point two in that method's
> documentation. object #1 =PsiArrayAccessExpression:args[0] (class
> com.intellij.psi.impl.source.tree.java.PsiArrayAccessExpressionImpl),
> hashCode=1492582784; object #2 =PsiArrayAccessExpression:args[0]
> (class
> com.intellij.psi.impl.source.tree.java.PsiArrayAccessExpressionImpl),
> hashCode=1492582784   at
> gnu.trove.TObjectHash.throwObjectContractViolation(TObjectHash.java:318)
>   at gnu.trove.THashMap.rehash(THashMap.java:350)     at
> gnu.trove.THash.postInsertHook(THash.java:283)    at
> gnu.trove.THashMap.put(THashMap.java:175)     at
> com.intellij.codeInsight.guess.impl.GuessManagerImpl$2.visitTypeCastExpression(GuessManagerImpl.java:177)
>   at
> com.intellij.psi.impl.source.tree.java.PsiTypeCastExpressionImpl.accept(PsiTypeCastExpressionImpl.java:98)
>   at com.intellij.psi.PsiWalkingState.visit(PsiWalkingState.java:61)
>   at com.intellij.psi.PsiWalkingState.visit(PsiWalkingState.java:26)
>   at com.intellij.util.WalkingState.walkChildren(WalkingState.java:65)
>   at
> com.intellij.util.WalkingState.elementStarted(WalkingState.java:52)
>   at
> com.intellij.psi.PsiWalkingState.elementStarted(PsiWalkingState.java:70)
>   at
> com.intellij.psi.JavaRecursiveElementWalkingVisitor.visitElement(JavaRecursiveElementWalkingVisitor.java:34)
>   at
> com.intellij.codeInsight.guess.impl.GuessManagerImpl$2.visitElement(GuessManagerImpl.java:198)
>   at
> com.intellij.psi.JavaElementVisitor.visitCodeBlock(JavaElementVisitor.java:68)
>   at
> com.intellij.psi.impl.source.tree.java.PsiCodeBlockImpl.accept(PsiCodeBlockImpl.java:202)
>   at
> com.intellij.codeInsight.guess.impl.GuessManagerImpl.getAllTypeCasts(GuessManagerImpl.java:171)
>   at
> com.intellij.codeInsight.guess.impl.GuessManagerImpl.getControlFlowExpressionType(GuessManagerImpl.java:380)
>   at
> com.intellij.codeInsight.completion.JavaCompletionUtil.getQualifierCastType(JavaCompletionUtil.java:416)
>   at
> com.intellij.codeInsight.completion.JavaCompletionUtil.processJavaReference(JavaCompletionUtil.java:355)
>   at
> com.intellij.codeInsight.completion.JavaCompletionContributor$5.consume(JavaCompletionContributor.java:312)
>   at
> com.intellij.codeInsight.completion.JavaCompletionContributor$5.consume(JavaCompletionContributor.java:300)
>   at
> com.intellij.codeInsight.completion.LegacyCompletionContributor.processReference(LegacyCompletionContributor.java:123)
>   at
> com.intellij.codeInsight.completion.LegacyCompletionContributor.processReferences(LegacyCompletionContributor.java:106)
>   at
> com.intellij.codeInsight.completion.JavaCompletionContributor.addReferenceVariants(JavaCompletionContributor.java:300)
>   at
> com.intellij.codeInsight.completion.JavaCompletionContributor.fillCompletionVariants(JavaCompletionContributor.java:239)
>   at
> com.intellij.codeInsight.completion.CompletionService.getVariantsFromContributors(CompletionService.java:84)
>   at
> com.intellij.codeInsight.completion.CompletionResultSet.runRemainingContributors(CompletionResultSet.java:132)
>   at
> com.intellij.codeInsight.completion.CompletionResultSet.runRemainingContributors(CompletionResultSet.java:125)
>   at
> com.intellij.codeInsight.completion.CompletionResultSet.runRemainingContributors(CompletionResultSet.java:112)
>   at
> com.intellij.codeInsight.completion.JavaNoVariantsDelegator.fillCompletionVariants(JavaNoVariantsDelegator.java:46)
>   at
> com.intellij.codeInsight.completion.CompletionService.getVariantsFromContributors(CompletionService.java:84)
>   at
> com.intellij.codeInsight.completion.CompletionResultSet.runRemainingContributors(CompletionResultSet.java:132)
>   at
> com.intellij.codeInsight.completion.CompletionResultSet.runRemainingContributors(CompletionResultSet.java:125)
>   at
> com.intellij.codeInsight.template.impl.LiveTemplateCompletionContributor$1.addCompletions(LiveTemplateCompletionContributor.java:75)
>   at
> com.intellij.codeInsight.completion.CompletionProvider.addCompletionVariants(CompletionProvider.java:36)
>   at
> com.intellij.codeInsight.completion.CompletionContributor.fillCompletionVariants(CompletionContributor.java:155)
>   at
> com.intellij.codeInsight.completion.CompletionService.getVariantsFromContributors(CompletionService.java:84)
>   at
> com.intellij.codeInsight.completion.CompletionService.performCompletion(CompletionService.java:115)
>   at
> com.intellij.codeInsight.completion.CompletionProgressIndicator.calculateItems(CompletionProgressIndicator.java:769)
>   at
> com.intellij.codeInsight.completion.CompletionProgressIndicator.access$900(CompletionProgressIndicator.java:84)
>   at
> com.intellij.codeInsight.completion.CompletionProgressIndicator$1CalculateItems.run(CompletionProgressIndicator.java:751)
>   at
> com.intellij.codeInsight.completion.AsyncCompletion$1$1$1.run(CompletionThreading.java:93)
>   at
> com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:911)
>   at
> com.intellij.codeInsight.completion.AsyncCompletion$1$1.run(CompletionThreading.java:88)
>   at
> com.intellij.openapi.progress.impl.ProgressManagerImpl$2.run(ProgressManagerImpl.java:178)
>   at
> com.intellij.openapi.progress.ProgressManager.executeProcessUnderProgress(ProgressManager.java:209)
>   at
> com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:212)
>   at
> com.intellij.openapi.progress.impl.ProgressManagerImpl.runProcess(ProgressManagerImpl.java:171)
>   at
> com.intellij.codeInsight.completion.AsyncCompletion$1.run(CompletionThreading.java:84)
>   at
> com.intellij.openapi.application.impl.ApplicationImpl$8.run(ApplicationImpl.java:419)
>   at
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
>   at java.util.concurrent.FutureTask.run(FutureTask.java:266)     at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>   at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>   at java.lang.Thread.run(Thread.java:745)    at
> com.intellij.openapi.application.impl.ApplicationImpl$1$1.run(ApplicationImpl.java:149)

对于那些多年后仍然无法找到解决方案的人来说,我遇到了同样的问题并最终解决了它。如果您与我的案例类似,请参阅下文。

我的问题是使用JSONObject和JSONArray对象。基本上,我会阅读,例如,一个JSONObject,并尝试在第一个中获取另一个JSONObject,就像这样。

假设您正在阅读此消息:

{
    "sub1": ["array element 1", "array element 2", "array element 3"],
    "sub2": {
                "name": "name for sub-object sub2",
                "value": "value for sub-object sub2 or whatever"
            }
}

假设整个对象是在 args[0] 中提供给我的,那么我正在阅读它所做的是这样的:

JSONObject globalObject = (JSONObject) args[0];
JSONArray sub1= (JSONArray) globalObject.get("sub1");//<-- the problem
JSONObject sub2 = (JSONObject) globalObject.get("sub2");//<-- also the problem
String arrayElement1 = sub1.get(0);
String nameSub2 = sub2.getString("name");

溶液问题来自将内容从JSONObject/JSONArray的get()方法转换为JSONObject/JSONArray。没有必要这样做,因为您只需执行getJSONObject(/*value*/)getJSONObject(/*value*/),并获得已经属于 JSONObjectJSONArray 类型的结果

所以我上面的代码应该看起来像这样:

JSONObject globalObject = (JSONObject) args[0];//<--only this needs to be casted
JSONArray sub1= globalObject.getJSONArray("sub1");//<-- got rid of the castnig
JSONObject sub2 = globalObject.getJSONObject("sub2");//<-- no more casting
String arrayElement1 = sub1.get(0);
String nameSub2 = sub2.getString("name");

希望这对某人有所帮助。

最新更新