Dagger 1的plus()方法是我以前在应用程序中经常使用的方法,所以我理解你可能希望有一个子组件可以完全访问父图形绑定的情况.
在什么情况下使用组件依赖项而不是子组件依赖项是有益的?为什么?
在我的Widget构建完成后,我想在一段延迟后执行一个函数.在Flutter中这样做的惯用方法是什么?
我想要实现的目标:我想从默认的FlutterLogoWidget 开始,然后style在一段时间后更改其属性.
我有一个java注释处理器,它在编译期间生成一堆java文件.我想通过添加扩展方法使生成的类更好地在kotlin中使用.我在kotlin论坛上被告知,我可以尝试的是写一个包含我的扩展功能的kotlin文件.我试过这个,我使用该Filer对象创建此文件,将其输出到StandardLocations.SOURCE_OUTPUT目录.Intellij可以看到我生成的类,我可以按预期使用扩展函数,但是app不会编译,因为编译器找不到新的kotlin文件.有什么方法可以编写一个新的kotlin文件,它将被kotlin编译器选中吗?
我有一个listview适配器,我正在尝试以下newView方法:
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
final LayoutInflater inflater = LayoutInflater.from(context);
View v = inflater.inflate(layout, parent, false);
long contactId = Long.valueOf(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)));
String contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
boolean hasPhone = Boolean.parseBoolean(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)));
String thumbnailUri = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.PHOTO_THUMBNAIL_URI));
TextView name_text = (TextView) v.findViewById(R.id.name_entry);
if (name_text != null) {
name_text.setText(contactName);
}
name_text.setTag(new Contact(contactId, hasPhone));
ImageView thumbnail = (ImageView) v.findViewById(R.id.thumbnail);
if (thumbnailUri != null) {
thumbnail.setImageURI(Uri.parse(thumbnailUri));
} else {
thumbnail.setImageResource(R.drawable.ic_launcher);
}
return v;
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试解析存储在thumbnailUri中的Uri时,我收到以下错误:
08-09 01:58:38.619: I/System.out(1471): …Run Code Online (Sandbox Code Playgroud) 我目前正试图绕过RxJava,但我在处理服务调用异常方面遇到了一些麻烦.
基本上,我有一个(Retrofit)服务返回一个Observable<ServiceResponse>.ServiceResponse定义如下:
public class ServiceResponse {
private int status;
private String message;
private JsonElement data;
public JsonElement getData() {
return data;
}
public int getStatus() {
return status;
}
public String getMessage() {
return message;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想要的是将通用响应映射到List<Account>数据JsonElement字段中包含的内容(我假设你不关心Account对象的样子,所以我不会用它污染帖子).以下代码对于成功案例非常有效,但我找不到处理API异常的好方法:
service.getAccounts()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.map(new Func1<ServiceResponse, AccountData>() {
@Override
public AccountData call(ServiceResponse serviceResponse) {
// TODO: ick. fix this. there must be a better way...
ResponseTypes responseType = ResponseTypes.from(serviceResponse.getStatus());
switch (responseType) {
case SUCCESS:
Gson …Run Code Online (Sandbox Code Playgroud) 在Android Studio中点击"运行"或"调试"按钮时,我得到以下输出:
等待设备.目标设备:emulator-5554(2.2)上传文件本地路径:/Users/myname/Development/TestProject/Test/build/apk/Test-debug-unaligned.apk远程路径:/data/local/tmp/nz.co. adbc.testproject安装nz.co.adbc.testproject DEVICE SHELL命令:pm install -r"/data/local/tmp/nz.co.adbc.testproject"pkg:/data/local/tmp/nz.co.adbc. testproject成功
上传文件本地路径:/Users/myname/Development/TestProjectProject/actionbarsherlock/build/libs/actionbarsherlock-debug.aar远程路径:/data/local/tmp/com.actionbarsherlock 本地路径不存在.
由于此错误(以粗体显示),它不会启动意图.因此我无法在Android Studio中调试我的应用程序.
该应用程序工作正常.它仍然安装并运行正常(从应用程序抽屉手动启动时).
有没有人之前看过这个错误,并有任何关于为什么它试图上传actionbarsherlock的aar文件的信息?它不应该只上传我的apk,其中包括aar?
Jake Wharton在Devoxx 2013上的讲话,使用Dagger构建Android应用程序,谈到了仅为登录用户创建Dagger范围.这种事听起来很干净,我想在我的应用程序中这样做.
谈话中讨论的代码类似于:
public class LoggedInActivity extends Activity {
@Inject User user;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_logged_in);
DaggerScopesApp app = (DaggerScopesApp) getApplication();
app.getObjectGraph().plus(new UserModule("exampleusername")).inject(this);
findViewById(R.id.do_something_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(LoggedInActivity.this, user.username + " : " +
user.someValue++, Toast.LENGTH_SHORT).show();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果注入的User的作用域为@Singleton,那么它的属性将在配置更改时消失(因为对象图在onCreate中创建).
解决方案非常简单,您只需执行一次"加"操作并将新对象图存储在其他位置(可能是应用程序类),但我想知道这是否是一个好方法?Square的任何人都可以提供有关您在应用程序中执行操作的任何信息吗?您是否在"登录"图表中没有单例对象?
我在使用VelocityTracker类时遇到了问题.如果您在非移动视图上测量触摸事件的速度,则速度跟踪似乎非常有效,但是一旦视图开始用手指移动(使用translateY/X或setY/X),速度就完全没有了随机(我认为速度是使用视图的位置计算的?).有人建议在滑动视图时获得准确的移动速度吗?
注意:我正在使用View的onTouchListener中的触摸事件进行速度跟踪.
干杯
我在使用改造的RxJava支持来链接observable时遇到了麻烦.我可能误解了如何使用它,否则它可能是改造中的一个错误.希望有人在这里可以帮助我了解正在发生的事情.编辑:我正在使用MockRestAdapter进行这些响应 - 这可能是相关的,因为我看到RxSupport实现略有不同.
这是一个虚假的银行应用程序.它正在尝试进行转移,并且在转移完成后,它应该执行帐户请求以更新帐户值.这基本上只是我试用flatMap的借口.遗憾的是,以下代码无效,订阅者无法收到通知:
案例1:链接两个改造生产的可观测量
转移服务(注意:返回改造生产的可观察物):
@FormUrlEncoded @POST("/user/transactions/")
public Observable<TransferResponse> transfer(@Field("session_id") String sessionId,
@Field("from_account_number") String fromAccountNumber,
@Field("to_account_number") String toAccountNumber,
@Field("amount") String amount);
Run Code Online (Sandbox Code Playgroud)
帐户服务(注意:返回改进生成的observable):
@FormUrlEncoded @POST("/user/accounts")
public Observable<List<Account>> getAccounts(@Field("session_id") String sessionId);
Run Code Online (Sandbox Code Playgroud)
将两个改造后的观测链连在一起:
transfersService.transfer(session.getSessionId(), fromAccountNumber, toAccountNumber, amount)
.flatMap(new Func1<TransferResponse, Observable<? extends List<Account>>>() {
@Override public Observable<? extends List<Account>> call(TransferResponse transferResponse) {
return accountsService.getAccounts(session.getSessionId());
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
Run Code Online (Sandbox Code Playgroud)
案例2:创建我自己的可观察和链接与改造生产的
如果我忽略了"平面映射"调用中Retrofit内置的Rx支持,它可以完美运行!所有订户都会收到通知 见下文:
新帐户服务(注意:不会产生可观察的):
@FormUrlEncoded @POST("/user/accounts")
public List<Account> getAccountsBlocking(@Field("session_id") String sessionId);
Run Code Online (Sandbox Code Playgroud)
创建我自己的observable并自己发出项目:
transfersService.transfer(session.getSessionId(), fromAccountNumber, toAccountNumber, amount)
.flatMap(new Func1<TransferResponse, Observable<? extends List<Account>>>() {
@Override …Run Code Online (Sandbox Code Playgroud) 如果我反编译生成的.class文件,data class State(val b: List<Array<Int>>)我会得到以下Java代码:
public final class State {
private final List<? extends Integer[]> b;
public State(List<? extends Integer[]> b) {
this.b = b;
}
public final List<Integer[]> getB() {
return this.b;
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
如果我将这个java代码复制/粘贴到我的IDE(Intellij 15)中,我在getB()方法中得到以下编译错误:
Incompatible types.
Required: List<Integer[]>
Found: List<? extends Integer[]>
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?Kotlin如何生成代码而不是我的复制/粘贴版本?
我有一个VideoPlayer小部件需要全屏,并且还适合源视频的宽高比.为了达到这个目的,我需要切断视频的顶部/底部或左/右.
我希望以下可能实现这一点,但我认为我必须使用FittedBox不正确,因为它会导致我VideoPlayer的消失:
final Size size = controller.value.size;
return new FittedBox(
fit: BoxFit.cover,
child: new AspectRatio(
aspectRatio: size.width / size.height,
child: new VideoPlayer(controller)
),
);
Run Code Online (Sandbox Code Playgroud)
谁能帮我解决这个问题?