小编foe*_*ens的帖子

Dagger默认构造函数

我想让Dagger在我的项目上工作.

但是,在编译期间,我在其中一个类上遇到以下异常:

错误:Foo上没有可注射成员.你想添加一个注射构造函数吗?

但是,该类没有依赖关系,因此使用默认的no-arg构造函数:

public class Foo
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

我是否真的需要添加一个像下面这样的可注射无参数构造函数?

public class Foo
{
     @Inject
     public Foo()
     {
     }

     ....
}
Run Code Online (Sandbox Code Playgroud)

dagger

27
推荐指数
1
解决办法
4161
查看次数

SyncAdapter运行动画 - 如何知道SyncAdapter是否正在主动同步

我想在ActionBar中显示ProgressBar,而我的SyncAdapter正在主动与Web同步内容.

我已尝试将SyncStatusObserverContentProvider.addStatusChangeListener一起使用.但是,我无法检查SyncAdapter是否正在运行.我只能检查:

  1. SyncAdapter正在使用ContentResolver.isSyncPending挂起
  2. SyncAdapter正在等待或正在使用ContentResolver.isSyncActive正在工作

可以组合这些标志:!isSyncPending && isSyncActive这样就可以检查SyncAdapter是否正在正常工作,并且没有任何待处理的工作.但是,在某些情况下,SyncAdapter正在正常工作,并有第二个等待它的待处理请求.

看起来很简单,但我无法找到解决这个问题的方法.在SyncAdapter未运行时显示ProgressBar会让用户感觉同步非常慢.让它不显示ProgressBar会让用户认为没有任何事情发生.

代码中的上述解决方案如下所示.我们在activity.onResume中注册观察者:

 int mask = ContentResolver.SYNC_OBSERVER_TYPE_PENDING | ContentResolver.SYNC_OBSERVER_TYPE_ACTIVE;
 syncHandle = ContentResolver.addStatusChangeListener(mask, syncObserver);
Run Code Online (Sandbox Code Playgroud)

syncObserver在这里定义为:

syncObserver = new SyncStatusObserver()
{
    @Override
    public void onStatusChanged(int which)
    {
        Account account = getSomeAccount();
        boolean syncActive = ContentResolver.isSyncActive(account, CONTENT_AUTHORITY);
        boolean syncPending = ContentResolver.isSyncPending(account, CONTENT_AUTHORITY);
        boolean isSynchronizing = syncActive && !syncPending;
        updateRefreshButtonState();
    }
}
Run Code Online (Sandbox Code Playgroud)

android android-contentresolver android-syncadapter

11
推荐指数
1
解决办法
5165
查看次数

在Android中实现Model-View-Presenter的困难

Model-View-Presenter(MVP)是一种众所周知的GUI应用程序设计模式.对于Android,在普通Java模块中实现业务逻辑有助于测试而无需Android模拟器.

但是,由于Android应用程序GUI的特殊要求,我在Android上实现模式时遇到了困难:

  • 可以在任何时候销毁活动(来电,用户按下主页按钮,......),并且在重新创建时,它应该处于与其离开时完全相同的状态.这与大多数其他GUI应用程序不同.

  • 活动可以经历许多生命周期状态.可能会暂停,在这种情况下,不应修改活动的UI.例如,如果某些数据在后台加载,则如果它处于暂停状态,则无法将其传递给MVP(Activity)的View部分.同样,这是一个不寻常的要求.

我已经阅读了MVP for Android的博客文章并查看了示例源代码.我试图通过使用MVP模式实现的最终目标是能够使用转换器j2objc将所有业务逻辑转换为Objective-C ,这样在iOS上实现相同的应用程序时可以重用业务逻辑.

有没有人成功实现了Android的MVP模式,在这种情况下,我错过了什么?

mvp android android-activity j2objc

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

Android WebView协议处理程序

我正在尝试使用WebView开发Android浏览器应用程序,使用户能够从自定义协议访问内容.自定义协议可能是foob​​ar://

我想拦截对此自定义协议的所有请求.这意味着:

  1. GET请求
  2. POST请求

我需要能够将这些操作的结果交还给WebView.

可以使用shouldInterceptRequest(可从API级别11获得)处理GET请求.

现在我的问题是:我如何能够接受和处理POST请求

这里这里已经提出几乎相同的问题,但是没有找到他们的问题的解决方案.

android url-interception protocol-handler android-webview webviewclient

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

打开Android电子市场的通知

我想创建一个通知,点击后,在Android市场上打开我的应用程序.

我尝试了几件事,如下所示:

NotificationCompat.Builder builder = new NotificationCompat.Builder(application);
builder.setAutoCancel(true);
// (set titles, icon, ...)

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("market://details?id=com.android.example"));

builder.setContentIntent(PendingIntent.getActivity(application, 0, intent, 0));
Notification notification = builder.build();

NotificationManager manager = (NotificationManager) application.getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(0, notification);
Run Code Online (Sandbox Code Playgroud)

但是,单击时,没有任何反应.谁知道如何让这个工作?

android android-notifications google-play

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

单元测试 - 实现等于仅便于测试

以下是我对单元测试的要求:

  1. 我想对我的生产课进行单元测试
  2. 我想将测试代码和生产代码分开,以便我只能发布生产代码

这似乎是合理的要求.但是,当我需要使用诸如assertEqualson对象之类的方法时,总会出现问题,因为这些equals方法需要覆盖该方法.该equals方法必须在生产类中实现,但实际上仅用于测试.如果良好的编码实践规定如果equals被覆盖,那么这将变得更加糟糕,然后hashCode也应该实施,从而导致更多未使用的生产代码使生产类混乱.

这是一个User模型的简单示例(IntelliJ自动实现equalshashCode)

public class User
{
    public long id;
    public long companyId;
    public String name;
    public String email;
    public long version;

    @Override
    public boolean equals(Object o)
    {
        if(this == o) return true;
        if(o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        if(companyId != user.companyId) return false;
        if(id != user.id) return false;
        if(version != user.version) …
Run Code Online (Sandbox Code Playgroud)

java junit unit-testing equals

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

stripos在使用特殊字符时返回false

我正在使用stripos函数来检查字符串是否位于另一个字符串内,忽略任何情况.

这是问题所在:

stripos("ø", "Ø")
Run Code Online (Sandbox Code Playgroud)

返回false.而

stripos("Ø", "Ø")
Run Code Online (Sandbox Code Playgroud)

返回true.

正如您可能看到的,在这种情况下,函数似乎不会执行不区分大小写的搜索.

该功能与Ææ和åå等字符有同样的问题.这些是丹麦人物.

php string-search strpos

6
推荐指数
1
解决办法
5977
查看次数

带有分频器的LinearLayout在预蜂窝上

从API级11 setDividerDrawable()setShowDividers()被引入上LinearLayout,使线性布局来显示子元素之间的分隔.我真的很想使用这个功能,但我也在Honeycomb之前定位设备(API级别<11).

解决此问题的一种方法是扩展LinearLayout并手动添加分隔符.这是一个原型:

import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;

public class DividerLinearLayout extends LinearLayout
{
    public DividerLinearLayout(Context context)
    {
        super(context);
    }

    public DividerLinearLayout(Context context, AttributeSet attrs)
    {
        super(context, attrs);
    }

    public DividerLinearLayout(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
    }

    @Override
    public void addView(View child)
    {
        if(super.getChildCount() > 0)
        {
            super.addView(LayoutInflater.from(getContext()).inflate(R.layout.divider, null));
        }
        super.addView(child);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,使用这样的实现将改变迭代子进程的任何客户端的行为.一些视图将是客户自己插入的视图,一些视图将被插入DividerLinearLayout.如果用户在指定索引处插入视图,也会发生问题.可以实现索引的转换,但如果做错了,这可能会导致令人讨厌的错误.此外,我认为需要覆盖更多的方法.

有没有更好的方法来解决这个问题?有人已经开发出可自由使用的DividerLinearLayout等效物吗?它似乎不存在于Android的兼容性库中.

android android-layout android-linearlayout android-compatibility android-support-library

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

使用C#中的流进行单元测试

我有一些客户端代码使用我想测试的流与服务器通信.我想测试客户端将正确的命令发送到服务器.

为此,我创建了一个Connect方法,它接受两个流:一个是客户端读取的,另一个是客户端写入的.然后,我可以向两者提供MemoryStream,并读取客户端写入的MemoryStream发出的命令.

我的问题是我需要编写一个需要这两个流相同的方法.我也注意到,我唯一需要使用两个不同的流,就是当我想测试客户端时.因此,我想重构Connect方法只接受一个流,它将被写入和读取.

我无法将MemoryStream传递给此方法,因为write方法会写入一些内部字节数组,read方法也会从中读取.如果我将它提供给客户端,它将能够读取它刚刚发送的命令!

因此我会问什么流设置可以做到这一点?我只想要一个从一个源读取的流,但写入另一个源.我需要访问这两个源,以便"我的测试"服务器可以发送正确的命令响应,并读取客户端发送的命令.

本质上我需要两个流:S1和S2.一个流被提供给客户端,另一个流被提供给服务器.
S1的读取方法与S2的写入方法"连接"=> S1读取S2写入的内容.
S1的写入方法与S2的读取方法"连接"=> S2读取S1写入的内容.
这是客户端与服务器通信时的正常情况.在这里,我只想在记忆中做到这一点.我该如何编码呢?

c# unit-testing client-server stream

2
推荐指数
1
解决办法
4449
查看次数

JNI int 方法从异常返回

假设我有一个这样的 Java 类:

    public class Test
    {
        static { System.loadLibrary("test"); }
        public native int foo();
    }
Run Code Online (Sandbox Code Playgroud)

假设 foo() 方法正在执行一些 JNI 调用,并且其中一个调用失败(IE,抛出异常)。然后我想从 JNI 代码返回并在 Java 中抛出异常。例如:

    jint Java_Test_foo(JNIEnv* env, jobject thiz)
    {
        jstring foobar = (*env)->NewStringUTF(env, "Hello from JNI !");
        if(foobar == NULL) // Not enough memory. OutOfMemoryError is thrown
            return NULL; // Return immediately to get exception thrown in Java
        // Do other stuff
        ...
        return some_computed_jint;
    }
Run Code Online (Sandbox Code Playgroud)

问题是这return NULL不是一个吉特。例如,在 Android 中,我在编译时会收到此警告: warning: return Makes Integer from Pointer …

java-native-interface exception jint android-ndk

2
推荐指数
1
解决办法
2418
查看次数