我的布局中有一个AutoCompleteTextView.我还有另一种方法来选择AutoCompleteTextView中存在的相同项目.选择替代方法时,我通过以下方式填充AutoCompleteTextView中的值:
autoCompleteTextView.setText(valueFromAlternativeSource);
Run Code Online (Sandbox Code Playgroud)
其中valueFromAlternativeSource
一个是有效的自动完成选项.这样做的问题在于调用setText时会出现自动完成下拉列表.在上面之后放置以下行不起作用:
autoCompleteTextView.dismissDropDown(); //Doesn't work. Why?
Run Code Online (Sandbox Code Playgroud)
关于为什么解雇下拉列表没有工作的任何想法或其他方式我可以解雇下拉列表?
我使用SpinnerAdapter来显示一个Spinner.为此,我定义了一个实现SpinnerAdapter的类.不幸的是我不知道如何覆盖SpinnerAdapter的一些方法:
@Override
public View getDropDownView(int position, View arg1, ViewGroup arg2) {
}
@Override
public int getItemViewType(int arg0) {
}
@Override
public boolean hasStableIds() {
}
@Override
public void registerDataSetObserver(DataSetObserver arg0) {
}
@Override
public void unregisterDataSetObserver(DataSetObserver observer) {
}
Run Code Online (Sandbox Code Playgroud)
有人知道我必须在每种方法中编码吗?
我正在努力完成有效Java(第二版)的第71项"明智地使用懒惰初始化".它建议使用双重检查习惯用于使用此代码(pg 283)实例字段的延迟初始化:
private volatile FieldType field;
FieldType getField() {
FieldType result = field;
if (result == null) { //First check (no locking)
synchronized(this) {
result = field;
if (result == null) //Second check (with locking)
field = result = computeFieldValue();
}
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
所以,我实际上有几个问题:
为什么field
在同步块中进行初始化时需要volatile修饰符?本书提供了这样的支持文本:"因为如果字段已经初始化,则没有锁定,因此将字段声明为volatile 是至关重要的".因此,是否一旦字段初始化,volatile是多线程一致视图的唯一保证,field
因为缺少其他同步?如果是这样,为什么不同步getField()或上述代码提供更好的性能?
该文本表明,不需要的局部变量result
用于"确保field
在已经初始化的常见情况下只读取一次",从而提高性能.如果result
被删除,field
在已经初始化的常见情况下将如何多次读取?
我有一个覆盖equals()的类,我想看看这个 equals方法在工作区中的使用位置.使用Eclipse,我通常会使用Ctrl-Shift-g查找工作区中的所有引用.不幸的是,对于equals(),它会从我的工作空间中撤回任何类型的每个equals引用,而不仅仅是我已经覆盖它的那个,并且无法确定哪些结果与我的搜索相关.我想做什么?
编辑:澄清.我有一个覆盖equals方法的A类.我有一个B类(和其他人)使用 A类但不扩展它.我想找到我的工作区中哪些类使用Class A的equals方法,无论它们是否属于Class A的层次结构,如B类.
我有一个非常有效的问题来自用户,我无法深入了解为什么Google Play商店报告的尺寸与设备上报告的尺寸不同.我在PC上签名发布的APK大小为3.8MB.上传到Google Play会显示相似的大小.但是,查看设备上的应用管理器会显示以下统计信息:
Total: 6.62MB
App: 6.51MB
Data: 112KB
Run Code Online (Sandbox Code Playgroud)
这与Google Play启用的版权保护(与其他类似问题相同)无关,因为我获得了安装已签名APK或开发APK的相同统计信息.
/ data/app下手机上的APK再次为3.8MB,而/data/data/com.my.app下的文件大约为100KB左右(可能是上面的'数据'行).
导致统计数据出现差异的原因是什么?
编辑:进一步研究,这是我设备上许多应用程序的常见功能.Google Play会报告一种尺寸,而设备报告的幅度通常会大2倍.很高兴知道它可能不是我正在做的事情,但仍然很好奇这里的推理是什么令人沮丧的用户指责"刮刀"安装尺寸看起来更小!
我有以下代码:
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new InputSource(new StringReader(inputXml)));
Run Code Online (Sandbox Code Playgroud)
并且解析了解析步骤:
SAXParseException: The entity name must immediately follow
the '&' in the entity reference
Run Code Online (Sandbox Code Playgroud)
由于我的以下'&' inputXml
:
<Line1>Day & Night</Line1>
Run Code Online (Sandbox Code Playgroud)
我无法控制入站XML.我怎样才能安全/正确地解析这个?
我有点难过如何避免我的插座挂在阅读上.这是我的代码:
Socket socket = new Socket("someMachine", 16003);
OutputStream outputStream = socket.getOutputStream();
InputStream inputStream = socket.getInputStream();
try {
outputStream.write(messageBuffer.toByteArray());
outputStream.flush();
BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
StringBuffer response = new StringBuffer();
int result;
while ((result = in.read()) != -1) {
response.append(Character.toChars(result));
System.out.println(result);
}
System.out.println("Done!"); //never gets printed
} catch (...) {}
Run Code Online (Sandbox Code Playgroud)
上面的代码成功读取了流中的所有数据,但随后挂起.在网上阅读我希望从服务器(我无法控制)收到-1表示我已经到达流的末尾,但我得到了这个:
(Lots of data above this point)
57
10
37
37
69
79
70
10
Run Code Online (Sandbox Code Playgroud)
它然后挂起.所以,我的问题是:
1)我是否编码错误或服务器响应有问题?
2)如果服务器的响应存在问题(即没有返回-1),我该如何解决这个问题(即挂起时停止读取).
任何帮助赞赏!
我有一个愚蠢的问题。我想知道如何加快我的应用程序。在大多数情况下,流行的一种是--prod
在构建期间使用标志。但我也找到了一个建议,可以使用enableProdMode();
in启用 Angular 生产模式
main.ts
。这些操作是否相同并触发相同的机制?
我需要在我的代码中读取一个文件.它实际上驻留在这里:
C:\eclipseWorkspace\ProjectA\src\com\company\somePackage\MyFile.txt
Run Code Online (Sandbox Code Playgroud)
我把它放在一个源码包,这样,当我创建一个可运行jar文件(导出 - >运行的JAR文件),它被包含在瓶子里.最初我在项目根目录中使用它(并且还尝试了一个普通的子文件夹),但导出不包括在jar中.
如果在我的代码中我做:
File myFile = new File("com\\company\\somePackage\\MyFile.txt");
Run Code Online (Sandbox Code Playgroud)
jar文件正确定位文件,但本地运行(运行AS-> Java的主要应用)抛出了一个文件,未发现异常,因为它希望它是:
File myFile = new File("src\\com\\company\\somePackage\\MyFile.txt");
Run Code Online (Sandbox Code Playgroud)
但这在我的jar文件中失败了.所以我的问题是,如何让这个概念在本地和我的jar文件中运行?
java中是否有任何注释将方法标记为不受支持?例如,假设我正在编写一个实现java.util.List
接口的新类.此接口中的add()方法是可选的,我在实现中不需要它们,因此我要执行以下操作:
public void add(Object obj) {
throw new UnsupportedOperationException("This impl doesn't support add");
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,有了这个,直到运行时才会发现事实上,这个操作不受支持.
理想情况下,这可能是在编译时捕获的,这样的注释(例如,可能 @UnsupportedOperation
)会轻率地向这个方法的任何用户说"嘿,你正在使用不支持的操作",就像使用@Deprecated
标志Eclipse一样突出显示已弃用项目的任何用途.