我有一个Activity,其中用户键入EditText,点击搜索按钮,应用程序查询Web服务并将结果放在ListView中.
我想取消搜索按钮.
显然,我不希望用户输入的每个字符都能访问Web服务.我想只在用户输入完成后执行1个Web服务调用.
我实现这一点的方式是这样的:
我有一个成员变量,它包含一个AsyncTask.当EditText中的文本发生更改时,AsyncTask将触发.在doInBackground()内部,调用Thread.sleep().这个休眠期基本上是一个等待查看用户是否输入任何其他内容的计时器.在睡眠调用之后,如果尚未取消AsyncTask,则会调用Web服务.如果用户键入另一个字母,则在AsyncTask上调用cancel()(以阻止调用Web服务),将保存AsyncTask的成员变量设置为null,并创建AsyncTask的新实例.
我在这里有几个问题:我是否泄漏记忆?这在任何方面都特别糟糕吗?我知道它可能效率不高,但我是否会严重减慢某人的电话速度?有没有更好的方法呢?
private SearchTask mSearchTask = null;
Run Code Online (Sandbox Code Playgroud)
...
mSearchText.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before, int count) {
// Auto-generated method stub
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// Auto-generated method stub
}
public void afterTextChanged(Editable s) {
if (s != null && s.length() > 0) {
// stop any current search thread
if (mSearchTask != null && !mSearchTask.isCancelled()) {
mSearchTask.cancel(false);
}
// search for products …Run Code Online (Sandbox Code Playgroud) 我有一个ListView,我正在尝试添加页脚.出于某种原因,它不会出现.我的页脚是在一个名为layout_footer的单独XML布局中定义的.
View v = getLayoutInflater().inflate(R.layout.layout_footer, getListView(), false);
getListView().addFooterView(v);
Run Code Online (Sandbox Code Playgroud)
这是我的ListActivity的onCreate方法中的代码.请注意,这是我在onCreate上做的最后一件事.
我希望这个项目与列表的其余部分一起滚动,根据我发现的资源,我相信你就是这样做的.不幸的是,页脚没有显示:(
非常感谢帮助
我有一个带有ListView的LinearLayout布局.我已经制作了android:LinearLayout的背景(我也在ListView上试过它)是我想要的背景图像.
这很好用.但是,当我开始滚动ListView时,背景经常消失并变黑.如果我再移动一下,我可能会再次出现它.似乎Android正在绘制,或者可能将我的背景背后的内容绘制到项目上.
任何想法/解决方案?
我有一个跟踪用户位置的服务.当前,服务在应用程序启动时启动,在应用程序终止时停止.不幸的是,如果用户将应用程序保留在后台,则服务永远不会停止并耗尽电池电量.
当我的应用程序不在前台时,我希望服务停止.我希望Application类能让我覆盖onPause和onResume处理程序,但它没有它们.还有另一种方法可以实现这一目标吗?
我正试图用我的应用程序点击https网址.我已经按照本教程.我创建的商店有正确的CA. 但是,当我尝试建立连接时,我收到以下错误:
ERROR/IOException(1843): webPost: javax.net.ssl.SSLPeerUnverifiedException: No peer certificate
Run Code Online (Sandbox Code Playgroud)
我已经完成了一些有关此错误的阅读,人们决定允许他们的应用程序接受所有证书.我认为这不是真的可以接受.我应该检查一下,看看问题是什么?
是否可以在我的Activity上更改搜索对话框(Android 3.0之前)?这是按下硬件搜索按钮时下拉的搜索栏.通过改变,我的意思是修改布局.如果可以的话,我想给它添加一个额外的按钮.
我有一个IntentService,可以对要进行的Web服务调用进行排队.我为每个Intent传递一个整数作为Extra,它定义了要进行的Web服务调用的类型.
我想创建一种情况,如果将执行特定Web服务的Intent传递给IntentService,并且IntentService队列中已存在同一Web服务的Intent,则不会处理Intent.理想情况下,我会丢弃Intent,但我也可以添加一个Extra,让代码知道在处理Intent后跳过它.当Intent进来时,我可以跟踪我添加到IntentService的某个对象中队列中的哪些.
但是,当它传递给IntentService时,我没有看到拦截Intent的地方.据我所知,我只能在调用onHandleIntent时触摸它,而且为时已晚.
有任何想法吗?
我的应用程序通过Web服务调用与远程数据库同步数据.我在IntentService中进行这些调用,以便它们可以在后台运行(我称之为SyncService).
启动我的IntentService的代码如下所示:
Intent intent = new Intent();
intent.setClass(appContext, SyncService.class);
// place additional values in intent
intent.putExtra("data_type", SyncService.ITEM_TRACKING);
intent.putExtra("user_id", intUserId);
// call SyncService
appContext.startService(intent);
Run Code Online (Sandbox Code Playgroud)
这通常看起来很棒.但是,我的一位朋友,也是我的应用程序的用户,经常告诉我他的数据不会同步并显示在我们的网站上.当我在附近的时候,他的装置正好显示出症状.我将他的设备插入我的电脑,这是我发现的:
有没有人对可能出现的问题有任何想法?你认为这是我的应用程序的问题吗?用Android?
我再次向Android发送消息说"启动此IntentService或将消息发送到已经运行的IntentService".那时,我无法控制.消息永远不会到达IntentService.一旦我强制退出应用程序,消息就会被发送到IntentService并完成它的工作.
更新:我认为这段代码很好,但我会把它放好,因为很多人可能想看到它.
自带到IntentService每个意图有一个额外的电话,表示"类型"是什么,我做(即:我称这个 Web服务或者是网络服务等).当一个Intent进入IntentService时,我检查"type",如果该类型的队列中已经存在一个Intent,我向它添加一个名为"skip"的Extra,这样,当它到达时,我不会牛逼执行搜索(基本IntentService可以建立大量的意图和它没有任何意义调用这个 Web服务时该 Web服务在20秒前的称呼).它基本上保护应用程序免受垃圾邮件网站的侵害.
重要的是要注意,无论如何都不会触及此代码(一旦问题开始发生).在应用程序被终止之前,不会调用onStartCommand
@Override
public int onStartCommand (Intent intent, int flags, int startId) {
// here be dragons
// overriding this method and adding your own code is dangerous. i've wrapped
// my code in a try/catch because it is …Run Code Online (Sandbox Code Playgroud) 我正在构建一个JSON字符串以发送到我的Web服务.由于其中一个是用户输入的,因此可以使用双引号.我试图逃避它来解决这个问题.
String strValue = "height of 6\"";
JSONObject json = new JSONObject();
json.put("key", strValue.replaceAll("\"","\\\""));
Run Code Online (Sandbox Code Playgroud)
这里的问题是,当我这样做时json.toString(),我得到3个斜杠.
例如:
{"key","height of 6\\\""}
Run Code Online (Sandbox Code Playgroud)
如果我不尝试做任何替换,json.toString()给我打破json.
例如:
{"key", "height of 6""}
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能正确?
注意:当我的网站保存此值并显示它时,它会显示 height of 6\"
更新:
它似乎是罪魁祸首 json.toString()
当我调用replaceAll方法时 - 正确 - 只能转义双引号.它似乎json.toString()逃脱斜线.要解决这个问题,我必须这样做json.toString().replace("\\\\", "").这引出了一个问题:为什么在地球上JSONObject会转义斜线而不是双引号?????
<TextView
android:id="@+id/myText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="5"
android:padding="16dip"
android:textIsSelectable="true"
android:textSize="16sp"/>
Run Code Online (Sandbox Code Playgroud)
如果android:textIsSelectable不存在,则 TextView 的 maxLines 为 5,并且您无法让 TextView 滚动,即使视图中还有其他文本。
但是,添加 后android:textIsSelectable,TextView 的最大行数仍为 5,但您可以通过点击 TextView 的底部边框或选择一些文本并拖动文本选择器控件来使其滚动。
有没有办法防止 TextView 在出现时可滚动android:textIsSelectable?