我对TextWatcher有一个恼人的问题.我一直在网上搜索,但找不到任何东西.感谢有人能帮助我.
出于某种原因,在一次文本更改时对TextWatcher事件的调用是不稳定的.有时它们会被触发一次(就像它们应该的那样),有时是两次,有时是3次.不知道为什么,整件事情非常直截了当.有时候,afterTextChanged()上的Editable参数会返回toString()和length()中的空值.
代码如下:
private TextWatcher mSearchAddressTextChangeListener = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) { }
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
@Override
public void afterTextChanged(Editable searchedAddress) {
System.out.println("called multiple times.");
}
};
Run Code Online (Sandbox Code Playgroud)
内部afterTextChanged()(和AsyncTask)我没有对文本或EditText视图进行任何更改.
我看到在TextWatcher的事件中询问的问题被调用了两次,但我发现事件触发的次数多于(或少于)两次.
无论如何,感谢任何帮助.
编辑:我删除了afterTextChanged()的内容导致即使没有我的代码也会发生此问题.是什么让我相信这是一个错误.当在常规字符(事件处理程序被触发两次)之后输入'space'字符时或者在删除常规字符之后的'space'字符(退格.事件处理程序被触发3次)时,会发生错误.帮助仍将受到赞赏.
我有一个问题,我现在正在努力一段时间.我正在尝试使用GAE云端点和Java在我的应用中实现新闻Feed功能.常见的概念是追随者和追随者,其追随者可以看到追随者的行为.一个新的追随者也应该看到他的追随者过去的行动,不仅仅是他开始追随的时间.
我用以下组件做了几次尝试.每个尝试都很好,但缺乏一些东西:
所以我要求stackoverflow社区的建议.你能告诉我这件事吗?如果准备搜索是正确的选择,您能否提供一些使用云端点的明确示例Java代码?
编辑:只是为了强调这里的主要设计要求 - 新闻提要功能需要能够使用游标获取已排序的跟随者动作(以避免查询整个批处理).
我试图用multipart/form-data做一个http'POST'到python GAE后端.我的服务器端方法正在接收完整的正文,但我完全不知道如何解析正文内容而不必手动覆盖并分割文本的值.
我的请求看起来像这样:
POST /android/v4/MyPostMethod HTTP/1.1
Accept: */*
Accept-Charset: *
Content-Length: 186808
Content-Type: multipart/form-data; boundary=*****; charset="utf-8"
Content_Length: 186808
Content_Type: multipart/form-data; boundary=*****
Host: myhost.appspot.com
User-Agent: Dalvik/1.6.0 (Linux; U; Android 4.1.2; GT-I9300 Build/XXXXX)
Via: HTTP/1.1 MSP-YV
--*****
Content-Disposition: form-data; name="value1"
Content-Type: text/plain; charset=UTF-8
f0ef73c5-54dd-40cf-9ee7-5c4cb764eb28
--*****
Content-Disposition: form-data; name="value2"
Content-Type: text/plain; charset=UTF-8
10d71e73-4d4d-4607-b271-f7efcfd0c59d
--*****
Content-Disposition: form-data; name="value3"
Content-Type: text/plain; charset=UTF-8
10d71e73-4d4d-4607-b271-f7efdfdfdfdf
--*****
Content-Disposition: form-data; name="logText"; filename="log.txt"
Content-Type: text/plain
Content-Transfer-Encoding: binary
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
...
--*****--
Run Code Online (Sandbox Code Playgroud)
我四处搜索,找不到如何做这个琐碎事情的好解释.感谢有人可以帮助我.谢谢.
刚刚开始为我的应用程序创建 UT,并使用 PowerMock、Mockito 和 Junit4。我有一个非常基本的问题,即模拟 Context 和 getApplicationContext()。我似乎无法理解如何做到这一点。
到目前为止我尝试的是以下内容:
@Before
public void setUp() throws Exception {
mContext = Mockito.mock(Context.class);
Mockito.when(mContext.getApplicationContext()).thenReturn(mContext);
PowerMockito.whenNew(IabHelper.class).withAnyArguments().thenReturn(new IabHelperMock(mContext, null));
}
Run Code Online (Sandbox Code Playgroud)
当我使用调试器(Android Studio)并在下面的行上暂停时,一切运行正常,但是当我在没有调试器的情况下运行测试时,测试失败(因为同一行):
public IabHelper(Context ctx, String base64PublicKey) {
mContext = ctx.getApplicationContext();
...
}
Run Code Online (Sandbox Code Playgroud)
我收到的失败消息是:
org.mockito.exceptions.misusing.UnfinishedStubingException:在此处检测到未完成的存根:-> 在 org.powermock.api.mockito.internal.invocation.MockitoNewInvocationControl.expectSubstitutionLogic(MockitoNewInvocationControl.java:65)
例如 thenReturn() 可能会丢失。
正确存根的例子:
when(mock.isOk()).thenReturn(true);
when(mock.isOk()).thenThrow(exception);
doThrow(exception).when(mock).someVoidMethod();
提示:
1. 缺少 thenReturn()
2. 你试图存根一个 final 方法,你这个顽皮的开发者!
3:如果完成,您正在'thenReturn'指令之前存根内部另一个模拟的行为
在 com.xxx.libs.components.purchase.util.IabHelper.(IabHelper.java:164)
在 com.xxx.libs.mocks.IabHelperMock.(IabHelperMock.java:22)
...
我显然做错了什么,我想知道究竟是什么。使用 Context 和 getApplicationContext() 的最佳实践是什么?谢谢。
我一直在关注从Android项目创建端点后端的教程.一切都在编译,看起来很有希望.后端已启动,我将CloudEndpointUtils#LOCAL_ANDROID_RUN更改为"true".但是当我尝试在真实设备(而不是模拟器)上测试应用程序时,我失败了 -
java.net.SocketException:20000ms后无法连接到/10.0.2.2(端口8888):isConnected失败:EHOSTUNREACH(无主机路由)
所以我查看了CloudEndpointUtils并看到将LOCAL_ANDROID_RUN设置为'true'会使应用程序查找DevAppServer http://10.0.2.2:8888,这是模拟器虚拟路由器.但我不使用模拟器.所以我试图改变持有这个网址http://127.0.0.1:8888/但仍然没有运气的常量.我现在失败了 -
java.net.ConnectException:20000ms后无法连接到/127.0.0.1(端口8888):isConnected失败:ECONNREFUSED(连接被拒绝)
我以为可能是因为我的PC在防火墙后面,所以我禁用了它,但仍然没有.
任何建议将不胜感激.
我在以色列的Android设备上使用Geocoder.直到几个星期前一切正常,当我进行反向地理编码时,所有地址都以希伯来语收到.但在某些时候,我开始在阿拉伯语中获得相同的地址.
这是一个运行的示例代码(lat/lon在特拉维夫):
Geocoder geocoder = new Geocoder(mContext, Locale.getDefault());
List<Address> addresses = geocoder.getFromLocation(32.087765863162346, 34.781454205513, 1);
Run Code Online (Sandbox Code Playgroud)
当我检查'地址'时,我得到以下打印输出:
[地址[addressLines = [0:"عمنوئيلهرومي26",1:"Tel Aviv",2:"Israel"],feature = 26,admin = null,sub-admin = null,locality = Tel Aviv,thoroughfare =عمنوئيل هرومي,POSTALCODE = NULL,COUNTRYCODE = IL,国家名称=以色列,hasLatitude = TRUE,纬度= 32.0877767,hasLongitude = TRUE,经度= 34.7813859,手机= NULL,URL = NULL,演员= NULL]
请注意,这些设备未定位到以色列.意思是,Locale.getDefault()将"US"和"en"作为国家和语言代码.
我已经在地理编码器问题跟踪器中打开了一个错误 - http://code.google.com/p/gmaps-api-issues/issues/detail?id=6182 - 但是它被引用到了Android问题跟踪器.在那边打开另一个 - https://code.google.com/p/android/issues/detail?id=64382 - 但似乎这个bug甚至不在Android设备端,而是在Geocoder后端服务中.所以我走到了尽头.
如果知道任何知道谷歌负责团队成员的人会让他们知道,我会很感激.谢谢.
编辑:因为我觉得这里发布的问题并不完全形成为问题不是很受欢迎,让我重新说一下 - 有没有人知道问题跟踪器哪里有可能打开关于android Geocoder后端服务的问题?再次,谢谢.
我很难理解有关IntentServices的一条规则.
从创建后台服务:
工作请求按顺序运行.如果一个操作是在IntentService运行,并且您发送它另一个请求,该请求等待,直到第一个操作完成.
我不明白这是否暗示对SAME IntentService,甚至不同的IntentServices的不同调用.
帮助将不胜感激.
我为我的一项活动创建了一个意图过滤器,以便能够通过深层链接启动它:
<activity
android:name="com.myapp.activities.LoginActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="myserver.com"
android:pathPrefix="/product/"
android:scheme="https" />
<data
android:host="www.myserver.com"
android:pathPrefix="/product/"
android:scheme="https" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
大多数情况下一切正常。当我从任何电子邮件客户端、whatsapp 消息或推文中单击这些链接时,在应用选择器对话框中选择任何浏览器时,它会识别我的意图过滤器并打开正确的活动。这意味着我的意图过滤器定义正常。
但是...在某些情况下,我需要从设备的日历或 HTMLViewer 单击这些链接。在这些情况下,当我选择股票浏览器时,我的应用程序没有打开。它只是打开带有 URL 地址的浏览器。这只是在我选择设备的股票浏览器时发生。当我选择不同的浏览器(例如 Chrome)时,应用程序会正确打开。知道这是为什么吗?或者我如何才能在所有情况下启用深层链接?
2个重要注意事项:
我现在在 Galaxy S3 上测试这个。我知道 Galaxy 设备上的浏览器本身不被视为“库存”。我仍然想找到一个适用于所有设备的解决方案。
深层链接的 url 地址是在浏览器端运行 javascript 的实际地址。对于应用程序未安装在用户设备上的情况,它会将用户重定向到 Play 商店。我这么说是因为如果他们可以解决这个问题,我也对服务器端解决方案持开放态度。我看到了这个问题,但那里的答案对我不起作用。
无论如何,我真的很感谢来自 SO 社区的任何帮助。这对我来说很痛苦(我相信对其他人来说也是如此)。
谢谢。
我在一些旧的4.2.2设备上遇到了以下与RenderScript有关的问题(galaxy s3 mini,galaxy ace 3,galaxy fresh等) - Android - Renderscript支持库 - 加载RS jni库时出错.
我想实现建议的解决方案但是返回的值究竟是什么
System.getProperty( "os.arch");
对于armeabi设备(不是armeabi-v7设备).
谢谢.
从应用程序切换器列表中刷出应用程序时,为什么SyncAdapter进程(:sync)被终止?我认为这里的全部意图是让他们脱钩.
编辑:
以下是使用的代码.mUploadTask是一个AsyncTask即时执行该读取(使用SQLite表信息getContext().getContentResolver())和相关的数据上传到后端(使用HttpPost).很直接.
另外,我只实现了一个,onSyncCanceled()因为我SyncAdapter不支持并行同步多个帐户.
public class SyncAdapter extends AbstractThreadedSyncAdapter implements UploadTaskListener {
private static final String TAG = SyncAdapter.class.getSimpleName();
private static volatile UploadTask mUploadTask;
/**
* Set up the sync adapter
*/
public SyncAdapter(Context context, boolean autoInitialize) {
super(context, autoInitialize);
}
/**
* Set up the sync adapter. This form of the
* constructor maintains compatibility with Android 3.0
* and later platform versions
*/
public SyncAdapter(
Context …Run Code Online (Sandbox Code Playgroud) 我有一个非常简单的问题,由于某种原因,我无法实现.我有一个RecyclerView,它只在其活动创建时被填充一次.我想在它下面添加另一个视图.
如果RecyclerView没有填满整个屏幕长度(通常以纵向模式),则视图应直接位于其下方.
如果RecyclerView超出屏幕长度(通常采用横向模式),视图仍应位于其下方,但也应停靠在屏幕底部.
而已.
我已经尝试将它们放在RelativeLayout,LinearLayout或CoordinatorLayout中.使用match_parent,wrap_content(带或不带setAutoMeasureEnabled).使用app:layout_anchor和app:layout_anchorGravity但没有任何工作.
感谢任何帮助.
这是我尝试的一个例子:
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize" />
</android.support.design.widget.AppBarLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/features_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_anchor="@id/features_list"
app:layout_anchorGravity="bottom" />
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud) 我在 a 中有两个旋转可绘制对象layer-list,我试图将它们作为drawableleft按钮上的 a 进行动画处理。我显示了可绘制对象,但没有动画。
这是我在 xml ( button_progress_bar_small.xml) 中的可绘制布局:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<rotate
android:drawable="@drawable/ic_spinner_small_outer"
android:pivotX="50%"
android:pivotY="50%"
android:fromDegrees="0"
android:toDegrees="1080" />
</item>
<item>
<rotate
android:drawable="@drawable/ic_spinner_small_inner"
android:pivotX="50%"
android:pivotY="50%"
android:fromDegrees="720"
android:toDegrees="0" />
</item>
Run Code Online (Sandbox Code Playgroud)
这是我正在运行的代码:
button.setCompoundDrawablesWithIntrinsicBounds(R.drawable.button_progress_bar_small, 0, 0, 0);
LayerDrawable progressAnimationLeft = (LayerDrawable) button.getCompoundDrawables()[0];
((RotateDrawable) progressAnimationLeft.getDrawable(0)).setLevel(500);
((RotateDrawable) progressAnimationLeft.getDrawable(1)).setLevel(500);
Run Code Online (Sandbox Code Playgroud)
我不太确定动画开始的触发器是什么,或者我是否应该对每个执行某些操作RotateDrawable(与 上的一个操作相反LayerDrawable)来执行此操作。
android ×10
java ×2
deep-linking ×1
google-api ×1
http ×1
httprequest ×1
javascript ×1
mockito ×1
powermock ×1
python ×1
textwatcher ×1
unit-testing ×1