在一次 kotlin 采访中,有人问我it&this关键字之间的区别。
我在谷歌上搜索过,但无法找到问题的正确答案。
有人可以指导我这两者之间的实际区别是什么?
我知道这是非常基本的问题,我是 kotlin 的新手。
我在我的动态功能模块中使用了一些库。这些库正在向清单中添加一些提供程序。
例如在我的动态模块中的 build.gradle 文件中:
dependencies {
...
implementation 'com.github.esafirm.android-image-picker:imagepicker:1.11.1'
...
}
Run Code Online (Sandbox Code Playgroud)
该库将以下标记添加到清单中:
<provider
android:name="com.esafirm.imagepicker.helper.ImagePickerFileProvider"
android:authorities="{$applicationId}.imagepicker.provider"
android:exported="false"
android:grantUriPermissions="true" >
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/image_picker_provider_paths" />
</provider>
Run Code Online (Sandbox Code Playgroud)
问题是当我构建我的基本模块时,应用程序崩溃了,因为它找不到提供者。我该如何解决这个问题?
正如此处所述:
应用程序基本模块的清单与任何其他应用程序模块的清单相似。请记住,当 Google Play 生成您应用的基础 APK 时,它会将所有模块的清单合并到基础 APK 的清单中。
但为什么只有供应商受到影响?活动是否被忽略?
这是我得到的堆栈跟踪:
java.lang.RuntimeException: Unable to get provider com.esafirm.imagepicker.helper.ImagePickerFileProvider: java.lang.ClassNotFoundException: Didn't find class "com.esafirm.imagepicker.helper.ImagePickerFileProvider" on path: DexPathList[[zip file "/data/app/ir.rashin.mototel-h7B8g42gBcVABkik16vqzw==/base.apk"],nativeLibraryDirectories=[/data/app/ir.rashin.mototel-h7B8g42gBcVABkik16vqzw==/lib/x86, /system/lib]]
at android.app.ActivityThread.installProvider(ActivityThread.java:6396)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:5938)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5853)
at android.app.ActivityThread.access$1100(ActivityThread.java:199)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.lang.ClassNotFoundException: …Run Code Online (Sandbox Code Playgroud) android android-manifest android-app-bundle dynamic-feature dynamic-delivery
我正在开发Android应用程序,我正在使用Android Studio.
但是有一个问题.当我更改源代码并运行应用程序时,它工作正常,但是当我更改资源时,它不会更改,直到我执行清洁项目.例如,我添加一个按钮并运行应用程序,该按钮不存在但是当我做一个干净的项目时它就在那里.Android studio在访问id新添加的视图时显示错误.
请帮我解决这个问题.任何帮助将非常感激.
附加信息:-Android Studio版本:1.3.1 - 操作系统:windows -Gradle版本:2.6
编辑:
我有多个目录作为我的资源与gradle这样:
sourceSets{
main {
manifest.srcFile 'src/main/AndroidManifest.xml'
java.srcDirs = ['src/main/java', '.apt_generated']
aidl.srcDirs = ['src/main/aidl', '.apt_generated']
res.srcDirs = [
'src/main/res',
'src/main/res/layouts/test',
'src/main/res/layouts/login',
'src/main/res/layouts/main',
'src/main/res/layouts/includes'
]
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用更改的布局运行项目时,它说:
No apk changes detected. Skipping file upload, force stopping package instead.
DEVICE SHELL COMMAND: am force-stop com.my.package
RobolectricTestRunner::class在我的单元测试中抛出IllegalArgumentException没有带有此堆栈跟踪的消息:
我的单元测试类:
@RunWith(RobolectricTestRunner::class)
class UnitTest {
@Test
fun testEncodeDecode() {
}
}
Run Code Online (Sandbox Code Playgroud)
输出堆栈跟踪:
java.lang.IllegalArgumentException
at org.objectweb.asm.AnnotationVisitor.<init>(Unknown Source)
at org.objectweb.asm.AnnotationVisitor.<init>(Unknown Source)
at org.objectweb.asm.tree.AnnotationNode.<init>(AnnotationNode.java:77)
at org.objectweb.asm.tree.AnnotationNode.<init>(AnnotationNode.java:63)
at org.objectweb.asm.tree.ClassNode.visitAnnotation(ClassNode.java:208)
at org.objectweb.asm.ClassReader.accept(Unknown Source)
at org.objectweb.asm.ClassReader.accept(Unknown Source)
at org.robolectric.internal.bytecode.ClassInstrumentor.analyzeClass(ClassInstrumentor.java:63)
at org.robolectric.internal.bytecode.SandboxClassLoader.lambda$maybeInstrumentClass$1(SandboxClassLoader.java:121)
at org.robolectric.util.PerfStatsCollector.measure(PerfStatsCollector.java:50)
at org.robolectric.internal.bytecode.SandboxClassLoader.maybeInstrumentClass(SandboxClassLoader.java:120)
at org.robolectric.internal.bytecode.SandboxClassLoader.lambda$findClass$0(SandboxClassLoader.java:111)
at org.robolectric.util.PerfStatsCollector.measure(PerfStatsCollector.java:50)
at org.robolectric.internal.bytecode.SandboxClassLoader.findClass(SandboxClassLoader.java:110)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.robolectric.RobolectricTestRunner.getHooksInterface(RobolectricTestRunner.java:551)
at org.robolectric.RobolectricTestRunner.configureSandbox(RobolectricTestRunner.java:235)
at org.robolectric.internal.SandboxTestRunner$2.evaluate(SandboxTestRunner.java:230)
at org.robolectric.internal.SandboxTestRunner.runChild(SandboxTestRunner.java:130)
at org.robolectric.internal.SandboxTestRunner.runChild(SandboxTestRunner.java:42)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.robolectric.internal.SandboxTestRunner$1.evaluate(SandboxTestRunner.java:84)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用WebRTC使用这些项目创建一个Android应用程序:
哪个使用此存储库:io.prinstine.libjingle
当两个客户端通过wifi连接到网络时,此项目运行良好,但当其中一个客户端通过蜂窝数据连接时,它不起作用.
我试图找到源代码,看看发现了什么,我找到了这个静态类:
public static class Options {
// Keep in sync with webrtc/base/network.h!
static final int ADAPTER_TYPE_UNKNOWN = 0;
static final int ADAPTER_TYPE_ETHERNET = 1 << 0;
static final int ADAPTER_TYPE_WIFI = 1 << 1;
static final int ADAPTER_TYPE_CELLULAR = 1 << 2;
static final int ADAPTER_TYPE_VPN = 1 << 3;
static final int ADAPTER_TYPE_LOOPBACK = 1 << 4;
public int networkIgnoreMask;
}
Run Code Online (Sandbox Code Playgroud)
我发现这行代码引用了使用此类的本机方法:
public void setOptions(Options options) {
nativeSetOptions(nativeFactory, options);
}
public native void nativeSetOptions(long …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Dagger 2将用户对象存储为单例。
@Provides
@Named("me")
@Singleton
User provideUser(PrefsUtil prefsUtil, UserDao userDao) {
int id = prefsUtil.getFromPrefs("me", 0);
if (id == 0){
return new User();
}
try {
return userDao.queryForId(id);
} catch (SQLException e) {
return new User();
}
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,并使用User对象注入我的类。
但是,在登录并从服务器获取用户并将其存储在上述方法从中查询用户的位置之后,由于它是单例,因此不会生效。它将为我提供空用户对象。为了使它生效,您必须退出应用程序并重新打开它。
问题是在更改实际数据后如何更新/重新初始化以@Name(“ me”)注释的用户对象,以便它用当前用户对象注入其他类?
我正在开发音乐播放器应用程序。播放器正在服务中。当一首歌曲开始播放时,我想显示一个带有remoteViews的自定义通知。
我为布局设计的是:

但不幸的是,构建通知时,textviews消失了:

布局的代码如下:
notification_player.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="140dp"
android:layout_height="140dp"
android:id="@+id/album_art" />
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/wrapper"
android:layout_toRightOf="@+id/album_art"
android:layout_alignBottom="@+id/album_art">
<LinearLayout
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:id="@+id/player"
android:layout_marginBottom="10dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/prev"
android:layout_marginRight="5dp"
android:src="@drawable/ic_fast_rewind"
android:layout_gravity="center_vertical" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="1dp"
android:layout_height="fill_parent"
android:background="#82c7c7c7"></LinearLayout>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/play"
android:layout_marginRight="5dp"
android:layout_marginLeft="5dp"
android:layout_gravity="center_vertical"
android:background="@drawable/ic_play_arrow" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="1dp"
android:layout_height="fill_parent"
android:background="#82c7c7c7" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/next"
android:layout_marginLeft="5dp"
android:layout_gravity="center_vertical"
android:background="@drawable/ic_fast_forward" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="1dp"
android:id="@+id/divider_horizontal"
android:layout_above="@+id/player"
android:background="#82c7c7c7"
android:layout_marginBottom="10dp"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp"></LinearLayout>
<LinearLayout …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用RxJava这样的Retrofit阻止调用:
remote = Single.fromCallable(new Callable<List>() {
@Override
public List call() {
try {
Response<ApiResponse> execute = makeRequest().execute();
} catch (Exception e) {
e.printStackTrace();
return new ArrayList();
}
}
...
Run Code Online (Sandbox Code Playgroud)
我正在订阅:
remote
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
Run Code Online (Sandbox Code Playgroud)
但是调用执行会引发NetworkOnMainThreadException。
我在用
compile 'com.squareup.retrofit2:retrofit:2.1.0'
Run Code Online (Sandbox Code Playgroud)
并且在此问题中,据说该错误已修复,但我仍然可以得到。
我该怎么解决?
我正在开发视频流应用程序,并使用 ExoPlayer 作为我的视频流媒体。
当我寻找视频 currentPosition 之前的位置时,如何以某种方式缓存或保留缓冲区。
请注意,我没有使用 DASH 或 HLS,而是以传统方式进行流式传输。
DefaultHttpDataSource dataSource = new DefaultHttpDataSource("android", null);
ExtractorSampleSource sampleSource = new ExtractorSampleSource(
uri,
dataSource,
allocator,
buffer_segment_count * buffer_segment_size);
videoTrackRenderer = new MediaCodecVideoTrackRenderer(context, sampleSource, MediaCodecSelector.DEFAULT, MediaCodec.VIDEO_SCALING_MODE_SCALE_TO_FIT, 2000, new Handler(context.getMainLooper()), this, 1000);
audioTrackRenderer = new MediaCodecAudioTrackRenderer(sampleSource, MediaCodecSelector.DEFAULT, new Handler(context.getMainLooper()), this);
mPlayer.prepare(videoTrackRenderer, audioTrackRenderer);
Run Code Online (Sandbox Code Playgroud)
我在问题部分进行了搜索,发现(如果没有错的话)它保留了 mp4 视频的缓冲区,但在我的应用程序中却没有!问题部分相当混乱。有人能指出我正确的方向吗?
我试图将一个内部类(例如接口Listener {})添加到TypeSpec.另外,我想在我的TypeSpec中添加一个Listener类型的字段.我怎么能实现这样的目标?
TypeSpec outerClass = ...;
TypeSpec innerClass = ...;
outerClass.addType(innerClass);
outerClass.addField(...); // How can i add a field of type innerClass?
Run Code Online (Sandbox Code Playgroud) 我的应用程序中有一个计时器,想要在用户交互时重置它.
我尝试添加onTouchListener,但它会阻止我的onClickListener.
我已经定义了一个类,我正在尝试使用获取一个 HTML 文件XMLHttpRequest并将响应分配给类中的变量,但它不会改变。
function UIHandler(){
this.notificatoin = 0;
this.msgBoxMe = 1;
this.msgBoxThem = 2;
this.getMsgBox(1);
this.getMsgBox(2);
}
UIHandler.prototype.getMsgBox = function(me){
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){//here we have the template in xhr.responseText
this.msgBoxMe = xhr.responseText;
}
};
switch(me){
case 1:
xhr.open("GET" , "chat/views/me.html" , true);
break;
case 2:
xhr.open("GET" , "chat/views/them.html" , true);
break;
}
xhr.send();
};
Run Code Online (Sandbox Code Playgroud)
我将onreadystatechange事件处理程序中的响应分配给this.msgBoxMe变量,但它的值仍然为 1。
android ×10
java ×3
ajax ×1
dagger-2 ×1
exoplayer ×1
gradle ×1
javapoet ×1
javascript ×1
jquery ×1
jvm ×1
kotlin ×1
node.js ×1
retrofit2 ×1
robolectric ×1
rx-android ×1
rx-java ×1
unit-testing ×1
video ×1
webrtc ×1