Articles of 改造2

如何在Android中使用Retrofit 2将应用程序逻辑从networking层分离出来2

我是Android和Retrofit的新手,我面临着一个问题。 我想让我的所谓的“ServerCommunication”类(singelton),所有的Retrofit魔术都完成了,它将有REST调用完成的公共方法。 我想在我的活动中使用这个“ServerCommunication”实例来调用Rest服务,但多数民众赞成它。 应用程序逻辑应该在活动中完成。 所以这样一些活动Login在ServerCommunication中调用方法Login(POJORequest),通过Retrofit框架实现REST调用并返回一些POJOResponse。所以Activity不关心REST通信,而ServerCommunication不关心什么逻辑应该应用于REST服务的响应。 随着改造2我不明白如何我可以阻止活动等待改造的反应,以及如何返回。 那么,我可能会认为我可以在活动中使用一些callback方法,所以这些方法可以在OnPostExecute()中的ServerCommunication中调用,以基于响应中的数据来应用一些逻辑,这只是我认为它应该是更简单的方法。 那么,为了澄清上面所有这些混乱想象简单的情况:你有主要活动的数据,你传递这个数据到你的通信类REST调用完成和响应收到。 此响应必须经过validation才能继续。 而且你希望这个validation在主要活动中完成,而不是在通信类中完成。 用Retrofit2在Android中做什么模式? 先谢谢你

什么是“匕首将注入这些字段,如果请求,但不会创build新的实例”是什么意思?

在Dagger2的文档中,它说 如果您的类具有@注入注释字段,但没有@注入注释构造函数,则Dagger将根据请求注入这些字段,但不会创build新实例。 用@Inject注解添加一个没有参数的构造函数来表明Dagger也可以创build实例。 它如何注入字段,但不创build新的实例? 有什么不同?

匕首2和界面的实现

我有一个简单的Dagger 2testing设置,基于http://konmik.github.io/snorkeling-with-dagger-2.html 。 它注入一个PreferenceLogger,输出所有的偏好。 在注入的类中,我可以@注入更多的类。 public class MainActivity extends Activity { @Inject PreferencesLogger logger; @Inject MainPresenter presenter; @Override protected void onCreate(Bundle savedInstanceState) { MyApplication.getComponent().inject(this); presenter.doStuff(); logger.log(this); } } public class PreferencesLogger { @Inject OkHttpClient client; @Inject public PreferencesLogger() {} public void log(Contect context) { // this.client is available } } 当我运行这个,logging器被设置,并在PreferencesLogger.log OkHttpClient被正确设置。 所以这个例子按预期工作。 现在我正在尝试获得一个MVP结构。 有一个MainPresenter接口和一个实现。 […]

unit testing的改装2 api呼叫与Mockito

我需要一些关于如何嘲笑restapi的build议。 我的应用程序是在MVP架构。 我的API接口: public interface MyAPI { @GET("{cmd}/{userName}/{password}") Observable<Response> login( @Path("cmd") String cmd, @Path("userName") String userName, @Path("password") String password ); 我的服务: public class MyService implements IService { private static MyService mInstance = new MyService(); private MyAPI mApi; public static MyService getInstance() { return mInstance; } private MyService() { OkHttpClient.Builder httpClientBuilder = new OkHttpClient.Builder(); httpClientBuilder.connectTimeout(Config.DEFAULT_TIMEOUT, TimeUnit.SECONDS); […]

匕首2在Kotlin未解决的参考

我正在尝试在我的Android项目中使用Dagger 2,并在Kotlin中进行编码。 我从Dagger 2回购Android的简单的例子。 我已经设法在Android Studio中使用来自dagger-android-gradle-sample的示例正确configuration项目,它包含正确configuration的gradle文件。 现在我开始将java类更改为kotlin。 这是自动转换的DemoApplication.java在kotlin中的样子: public class DemoApplication : Application() { Singleton Component(modules = array(javaClass<AndroidModule>())) trait ApplicationComponent { public fun inject(application: DemoApplication) public fun inject(homeActivity: HomeActivity) public fun inject(demoActivity: DemoActivity) } public var component: ApplicationComponent? = null override fun onCreate() { super.onCreate() component = `Dagger_DemoApplication$ApplicationComponent`.builder().androidModule(AndroidModule(this)).build() component!!.inject(this) } } 匕首生成的类在Kotlin中可见,但它抱怨($)类名称中使用的符号。 ($)在Kotlin有特殊的目的,所以我想这就是为什么。 你可以注意到auto-convertion用(`)符号封装类名,所以编辑器不会抱怨它。 不幸的是,编译器失败: […]

匕首不能注入types参数字段

我正在处理一个Android应用程序,我试图注入一个types参数化在抽象类中的字段:BaseListFragment public abstract class BaseListFragment<E, A extends ArrayAdapter<E>, S> extends BaseFragment { @Inject protected S service; } 但是在编译时出现以下错误:error:找不到符号类S 这里是我的代码BaseFragment: public class BaseFragment extends Fragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ((App) getActivity().getApplication()).inject(this); } } 这里是我的服务模块: @Module( complete = false, library = true ) public class ServiceModule { @Provides @Singleton BucketService provideBucketService(RestAdapter restAdapter) { […]

匕首2.10 / 2.11注射活动失败

我一直在尝试,在类ViewUtils中注入Activity失败。 我跟着几个不同的职位,但我似乎无法理解我在执行中缺less什么。 我知道这可能是下面的post的重复,我真的很抱歉,但我真的不明白我错过了什么。 这些是我发现的post: Dagger 2.10 Android子组件和构build器 如何在匕首2.10中创build自定义的作用域模块 https://google.github.io/dagger/subcomponents.html 我的实现如下: AppComponent @Component(modules = { AppModule.class, AndroidSupportInjectionModule.class, ActivityBindingModule.class }) @Singleton public interface AppComponent extends AndroidInjector<EmblyApp> { @Component.Builder abstract class Builder extends AndroidInjector.Builder<EmblyApp> {} } ActivityBindingModule @Module public abstract class ActivityBindingModule { @ContributesAndroidInjector abstract LoginActivity loginActivity(); } LoginSubcomponent @Subcomponent(modules = LoginSubcomponent.LoginActivityModule.class) public interface LoginSubcomponent extends AndroidInjector<LoginActivity> { […]

如何使用retrofit 2进行POST请求?

我只能从文档中运行Hello World例子(GithubService)。 问题是当我运行我的代码,我得到了以下错误,在onFailure() 使用JsonReader.setLenient(true)在行1列1path$接受格式错误的JSON 我的API需要POST params值,所以不需要将它们编码为JSON,但是它确实以JSON的forms返回响应。 对于响应,我使用工具生成了ApiResponse类。 我的界面: public interface ApiService { @POST("/") Call<ApiResponse> request(@Body HashMap<String, String> parameters); } 以下是我如何使用该服务: HashMap<String, String> parameters = new HashMap<>(); parameters.put("api_key", "xxxxxxxxx"); parameters.put("app_id", "xxxxxxxxxxx"); Call<ApiResponse> call = client.request(parameters); call.enqueue(new Callback<ApiResponse>() { @Override public void onResponse(Response<ApiResponse> response) { Log.d(LOG_TAG, "message = " + response.message()); if(response.isSuccess()){ Log.d(LOG_TAG, "—–isSuccess—-"); }else{ Log.d(LOG_TAG, "—–isFalse—–"); […]

在Mono for Android中添加Google Maps API v2

12月3日发布的Android版Google地图API v2。 有没有可能将其添加到Mono的Android?

匕首2单件组件取决于单件

我在这里有一个奇怪的问题,我不太清楚为什么我不能做什么。 我有以下模块: @Module public final class AppModule { private Context mContext; @Provides @Singleton @AppContext public Context provideContext() { return mContext; } } @Module public final class NetModule { @Provides @Singleton public OkHttpClient provideOkHttp() { return new OkHttpClient.Builder().build(); } } 由于各种原因,我不希望这两个模块在同一个组件(基本上是由于我的项目结构)。 所以我试图创build以下组件: @Singleton @Component(modules = AppModule.class) public interface AppComponent { @AppContext Context appContext(); } @Singleton @Component(dependencies […]