Kotlin新手问道,"为什么下面的代码不能编译?":
var left: Node? = null
fun show() {
if (left != null) {
queue.add(left) // ERROR HERE
}
}
Run Code Online (Sandbox Code Playgroud)
智能转换为'Node'是不可能的,因为'left'是一个可变属性,此时可能已被更改
我得到的left是可变变量,但是我明确地检查left != null并且left是类型的Node,为什么它不能被智能化到那种类型?
我怎样才能优雅地解决这个问题?:)
我在laravel很新,事实上我正在努力创建我的第一个项目.由于某种原因,我一直收到这个错误(我还没有开始编码)
Error in exception handler: The stream or file "/var/www/laravel/app/storage/logs/laravel.log" could not be opened: failed to open stream: Permission denied in /var/www/laravel/bootstrap/compiled.php:8423
Run Code Online (Sandbox Code Playgroud)
我读过这与权限有关,但chmod -R 775 storage根本没有帮助.

我不确定an IntArray和an 之间的区别在于Array<Int>Kotlin以及为什么我不能互换使用它们:
我知道IntArray转换为int[]定位时JVM,但Array<Int>转换为什么?
此外,你也可以拥有String[]或YourObject[].为什么Kotlin具有类型的类{primitive}Array,几乎任何东西都可以排列成数组,而不仅仅是基元.
我决定现在是时候学习如何使用Leak Canary来检测我的应用程序中的泄漏,并且像往常一样,我尝试在我的项目中实现它以真正理解如何使用该工具.实现它很容易,困难的部分是阅读工具向我扔回来的东西.我有一个滚动视图似乎在内存管理器中累积内存,因为我向上和向下滚动(即使它没有加载任何新数据)所以我认为这是一个很好的候选对象来跟踪泄漏,这是结果:
它看起来像v7.widget.RecyclerView泄漏适配器,而不是我的应用程序.但那不可能是对的......对吗?
这是适配器的代码和使用它的类:https: //gist.github.com/feresr/a53c7b68145d6414c40ec70b3b842f1e
我开始对这个问题表示赏心悦目,因为它在两年后完全不同的应用程序上重新出现了
我开始注意到我的应用程序中出现了一些卡顿,我相信原因是可组合项在不应该的情况下被重新组合。
我检测到一些用户交互触发了不必要的重新组合,但我无法确定是什么导致了重新组合。我在修改状态的每个地方都添加了断点,并且仍然可以找到触发重组的内容。
AS有提供调试这种事情的方法吗?
我试图通过Jake Warthon了解这个库的目的:https: //github.com/JakeWharton/RxRelay
基本上:除了无法调用onComplete或onError之外的主题.主体以有害的方式处于有状态:当它们收到onComplete或onError时,它们不再可用于移动数据.
我知道,这是一个有效的用例,但上面似乎很容易实现只使用现有的主题.
1.不要向主题转发errors/ completions事件:
`observable.subscribe({ subject.onNext(it) }, { log error / throw exception },{ ... })`
Run Code Online (Sandbox Code Playgroud)
2.不要暴露主题,使你的方法签名返回一个可观察的.
fun(): Observable<> { return subject }
我显然在这里遗漏了一些东西,我很好奇它是什么!
class MyPublishRelay<I> : Consumer<I> {
private val subject: Subject<I> = PublishSubject.create<I>()
override fun accept(intent: I) = subject.onNext(intent)
fun subscribe(): Disposable = subject.subscribe()
fun subscribe(c: Consumer<in I>): Disposable = subject.subscribe(c)
//.. OTHER SUBSCRIBE OVERLOADS
}
Run Code Online (Sandbox Code Playgroud) 我想知道如何使用改造将自定义对象发送到我的API,如下所示:
@POST(URL_ORDERS)
public void newOrder(Order order, Callback<Boolean> success);
Run Code Online (Sandbox Code Playgroud)
这是我在服务器上解析它的方法
public function store()
{
if(Auth::check()){
$order = Input::get();
$table = $order->table;
$items = $order->items;
if(!$table->taken){
$table->taken = true;
$order->push();
$table->push();
return true;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,我得到了
06-04 20:45:59.275 6085-6306/com.tesis.restapp.restapp W/dalvikvm? threadid=11: thread exiting with uncaught exception (group=0x40aae210)
06-04 20:45:59.285 6085-6306/com.tesis.restapp.restapp E/AndroidRuntime? FATAL EXCEPTION: Retrofit-Idle
java.lang.IllegalArgumentException: RestAppApiInterface.newOrder: No Retrofit annotation found. (parameter #1)
at retrofit.RestMethodInfo.methodError(RestMethodInfo.java:120)
at retrofit.RestMethodInfo.parameterError(RestMethodInfo.java:124)
at retrofit.RestMethodInfo.parseParameters(RestMethodInfo.java:443)
at retrofit.RestMethodInfo.init(RestMethodInfo.java:131)
Run Code Online (Sandbox Code Playgroud)
我想我想做的是以某种方式将我的对象转换为json并将其发送到我的服务器.我是以正确的方式接近这个吗?
我正在玩rxJava/rxAndroid,并且有一些非常基本的东西不像我期望的那样.我有一个可观察的和两个订阅者:
Observable<Integer> dataStream = Observable.just(1, 2, 3).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread());
Log.d(TAG, "subscribing sub1...");
dataStream.subscribe(v -> System.out.println("Subscriber #1: "+ integer));
Log.d(TAG, "subscribing sub2...");
dataStream.subscribe(v -> System.out.println("Subscriber #2: "+ integer));
Run Code Online (Sandbox Code Playgroud)
这是输出:
D/RxJava: subscribing sub1...
D/RxJava: subscribing sub2...
D/RxJava: Subscriber #1: 1
D/RxJava: Subscriber #1: 2
D/RxJava: Subscriber #1: 3
D/RxJava: Subscriber #2: 1
D/RxJava: Subscriber #2: 2
D/RxJava: Subscriber #2: 3
Run Code Online (Sandbox Code Playgroud)
现在,我知道我可以通过使用避免重复计数,publish().autoConnect()但我试图首先理解这种默认行为.每当有人订阅observable时,它就会开始发出数字序列.我明白了.因此,当Subscriber 1连接时它开始发射物品.Subscriber 2马上连接,为什么不能获得价值呢?
这是我理解它的方式,从可观察的角度来看:
有人订阅了我,我应该开始发出物品
[订阅者:1] [项目到EMIT:1,2,3]
向订户发出项目"1"
[订阅者:1] [项目到EMIT:2,3]
有人订阅了我,当我完成后我将再次发出1,2,3
[订阅者:1&2] [项目到EMIT:2,3,1,2,3]
向订户发出项目'2'
[订阅者:1&2] [项目到EMIT:3,1,2,3]
向订户发出项目'3'
[订阅者:1&2] …
因此,当我登录到我的服务器端应用程序时,它给了我一个cookie,允许我在未来的请求中说"嘿,这是我".我曾经使用Android的默认HttpClient类做到这一点,并且效果很好.但是我被告知Retrofit要快得多,并且通过实现GSON来避免处理JSON解析,所以我想我会尝试一下.
我构建了我的客户端,我可以发出请求,但是,我的客户端并没有"记住会话密钥,因此我无法做任何事情.有谁知道如何告诉改造"接受和用户cookie为未来的请求"?我迷路了!任何建议都会做:)
public class ApiClient{
private static final String API_URL = "http://192.168.1.25:8080";
private static RestAppApiInterface sRestAppService;
public static RestAppApiInterface getRestAppApiClient() {
if (sRestAppService == null) {
CookieManager cookieManager = new CookieManager();
cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
CookieHandler.setDefault(cookieManager);
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(API_URL)
.build();
sRestAppService = restAdapter.create(RestAppApiInterface.class);
}
return sRestAppService;
}
}
Run Code Online (Sandbox Code Playgroud) 在同一个网站上还有一些其他相关问题,但我无法理解这一点.
在他们的网站上,他们非常抽象.
Gradle是构建自动化的演变.Gradle可以自动构建,测试,发布,部署以及更多软件包或其他类型的项目,例如生成的静态网站,生成的文档或其他任何内容.
那个的真实意义是什么?谢谢