小编Asa*_*afK的帖子

TextWatcher事件被多次触发

我对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次)时,会发生错误.帮助仍将受到赞赏.

android android-layout textwatcher

40
推荐指数
4
解决办法
2万
查看次数

在GAE上实施新闻Feed - 我应该使用前瞻性搜索吗?

我有一个问题,我现在正在努力一段时间.我正在尝试使用GAE云端点和Java在我的应用中实现新闻Feed功能.常见的概念是追随者和追随者,其追随者可以看到追随者的行为.一个新的追随者也应该看到他的追随者过去的行动,不仅仅是他开始追随的时间.

我用以下组件做了几次尝试.每个尝试都很好,但缺乏一些东西:

  1. 在每个用户操作上,我将"日志"实体添加到包含用户ID的数据存储区中.当用户显示他的新闻源时,我根据用户的跟随者列表通过他们的用户ID查询所有这些实体.一切都很好,直到我意识到'IN'查询不能被诅咒.所以这个选项消失了.
  2. 在这个尝试,也是应用程序的当前状态,我使用搜索API.在每个用户操作时,我不再将"日志"实体存储到数据存储区中,而是将文档存储到搜索索引中.复杂的查询可以在这里被诅咒,世界又在微笑.但是......我不太确定,明智的说法,这是一个聪明的决定.似乎在记录的日常限制中搜索/添加/删除文档的成本使得整个事情有点过于粗略.
  3. 下一次尝试应该是Prospective Search API.从我在文档中阅读的内容来看,它似乎是为此目的选择的正确组件.遗憾的是,文档非常糟糕,并且只提供很少的示例.账单信息也不清楚.

所以我要求stackoverflow社区的建议.你能告诉我这件事吗?如果准备搜索是正确的选择,您能否提供一些使用云端点的明确示例Java代码?

编辑:只是为了强调这里的主要设计要求 - 新闻提要功能需要能够使用游标获取已排序的跟随者动作(以避免查询整个批处理).

java google-app-engine

8
推荐指数
1
解决办法
364
查看次数

Python - 在服务器端解析multipart/form-data请求

我试图用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)

我四处搜索,找不到如何做这个琐碎事情的好解释.感谢有人可以帮助我.谢谢.

python http httprequest

7
推荐指数
1
解决办法
8935
查看次数

Mockito - 模拟 Context 和 getApplicationContext()

刚刚开始为我的应用程序创建 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() 的最佳实践是什么?谢谢。

java android unit-testing mockito powermock

7
推荐指数
0
解决办法
6862
查看次数

带有Android的Google App Engine - 在真实设备上测试端点

我一直在关注从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在防火墙后面,所以我禁用了它,但仍然没有.

任何建议将不胜感激.

google-app-engine android google-cloud-endpoints

6
推荐指数
4
解决办法
6321
查看次数

Geocoder.getFromLocation()以阿拉伯语返回地址

我在以色列的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后端服务的问题?再次,谢谢.

android google-api google-geocoder

5
推荐指数
1
解决办法
2254
查看次数

可以并行运行不同的IntentServices吗?

我很难理解有关IntentServices的一条规则.

创建后台服务:

工作请求按顺序运行.如果一个操作是在IntentService运行,并且您发送另一个请求,该请求等待,直到第一个操作完成.

我不明白这是否暗示对SAME IntentService,甚至不同的IntentServices的不同调用.

帮助将不胜感激.

android

5
推荐指数
1
解决办法
856
查看次数

Android - 深度链接不适用于所有情况和所有浏览器

我为我的一项活动创建了一个意图过滤器,以便能够通过深层链接启动它:

     <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个重要注意事项:

  1. 我现在在 Galaxy S3 上测试这个。我知道 Galaxy 设备上的浏览器本身不被视为“库存”。我仍然想找到一个适用于所有设备的解决方案。

  2. 深层链接的 url 地址是在浏览器端运行 javascript 的实际地址。对于应用程序未安装在用户设备上的情况,它会将用户重定向到 Play 商店。我这么说是因为如果他们可以解决这个问题,我也对服务器端解决方案持开放态度。我看到了这个问题,但那里的答案对我不起作用。

无论如何,我真的很感谢来自 SO 社区的任何帮助。这对我来说很痛苦(我相信对其他人来说也是如此)。

谢谢。

javascript android deep-linking android-intent

5
推荐指数
1
解决办法
3756
查看次数

使用System.getProperty("os.arch")来检查它是否是armeabi cpu

我在一些旧的4.2.2设备上遇到了以下与RenderScript有关的问题(galaxy s3 mini,galaxy ace 3,galaxy fresh等) - Android - Renderscript支持库 - 加载RS jni库时出错.

我想实现建议的解决方案但是返回的值究竟是什么

System.getProperty( "os.arch");

对于armeabi设备(不是armeabi-v7设备).

谢谢.

android cpu-architecture

5
推荐指数
1
解决办法
1539
查看次数

应用程序进程终止时,SyncAdapter进程终止

从应用程序切换器列表中刷出应用程序时,为什么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)

android android-syncadapter

5
推荐指数
1
解决办法
986
查看次数

将视图放在RecyclerView下方

我有一个非常简单的问题,由于某种原因,我无法实现.我有一个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)

android android-layout android-recyclerview

5
推荐指数
1
解决办法
74
查看次数

对 LayerDrawable 内的所有 RotateDrawable 进行动画处理

我在 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 android-animation android-drawable

3
推荐指数
1
解决办法
3953
查看次数