刚刚升级到Android Studio 3.0,之前正在编译的项目会抛出以下错误
错误:java.lang.RuntimeException:现在必须显式声明注释处理器.发现编译类路径中的以下依赖项包含注释处理器.请将它们添加到annotationProcessor配置中.
但是,这following
没有定义.这是我的build.gradle中的compile语句的样子
compile('com.crashlytics.sdk.android:crashlytics:2.6.7@aar') {
transitive = true;
}
compile 'com.android.support:support-v4:25.3.1'
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support:design:25.3.1'
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.2.0'
compile 'com.jakewharton.timber:timber:4.4.0'
compile 'io.reactivex:rxandroid:1.0.1'
compile 'io.reactivex:rxjava:1.0.14'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
compile 'com.jpardogo.googleprogressbar:library:1.2.0'
compile 'com.wang.avi:library:2.1.3'
compile 'link.fls:swipestack:0.3.0'
compile 'com.jakewharton:butterknife:8.4.0'
compile 'com.codemybrainsout.rating:ratingdialog:1.0.7'
compile 'org.greenrobot:greendao:3.2.0'
compile 'com.android.support.constraint:constraint-layout:1.0.0-beta5'
testCompile 'junit:junit:4.12'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
provided 'org.projectlombok:lombok:1.12.6'
Run Code Online (Sandbox Code Playgroud) 我正在尝试更改汉堡包菜单图标,NavigationView
但我无法这样做.
这是我到目前为止所尝试的
我有一个基本活动,其中导航抽屉设置完成.这是相关的一段代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.activity_base_nav);
setSupportActionBar(toolbar);
setupDrawer();
}
private void setupDrawer() {
mDrawerLayout.setDrawerListener(this);
mDrawerToggle = new ActionBarDrawerToggle(this,
mDrawerLayout,
R.string.open,
R.string.close);
mDrawerToggle = new ActionBarDrawerToggle(mContext,
mDrawerLayout,
R.string.open,
R.string.close);
mDrawerLayout.setDrawerListener(mDrawerToggle);
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDefaultDisplayHomeAsUpEnabled(false);
mDrawerToggle.setDrawerIndicatorEnabled(false);
mDrawerToggle.setHomeAsUpIndicator(R.drawable.ic_share_48pt_2x);
}
mDrawerToggle.syncState();
mNavigationView.setNavigationItemSelectedListener(
menuItem -> {
mMenuItem = menuItem.getItemId();
mDrawerUtil.onNavMenuItemClicked(mMenuItem);
mDrawerLayout.closeDrawers();
return true;
});
}
@Override
public void setContentView(int layoutResID) {
getLayoutInflater().inflate(layoutResID, mContainer);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
mDrawerToggle.syncState();
}
@Override
public …
Run Code Online (Sandbox Code Playgroud) android navigation-drawer android-toolbar hamburger-menu actionbardrawertoggle
我一直在尝试新的firebase可调用云功能,firebase functions:shell
我继续得到以下错误
请求的内容类型不正确.
和
从功能收到的响应:400,{"error":{"status":"INVALID_ARGUMENT","message":"Bad Request"}}
这是我想在shell上调用此函数
myFunc.post(dataObject时)
我也尝试过这个
myFunc.post().表(dataObject时)
但后来我得到错误的编码(表单)错误.dataObject
是有效的JSON.
更新:
我想我需要firebase serve
用于本地仿真这些callable https
功能.数据需要像这样在post请求中传递(注意它在data
参数中的嵌套方式)
{
"data":{
"applicantId": "XycWNYxqGOhL94ocBl9eWQ6wxHn2",
"openingId": "-L8kYvb_jza8bPNVENRN"
}
}
Run Code Online (Sandbox Code Playgroud)
我无法想象的是如何通过REST客户端调用该函数时传递虚拟身份验证信息
我正在尝试使用Kotlin
Flows
. 这是我现在正在尝试的
flowOf(
remoteDataSource.getDataFromCache() // suspending function returning Flow<Data>
.catch { error -> Timber.e(error) },
remoteDataSource.getDataFromServer() // suspending function returning Flow<Data>
).flattenConcat().collect {
Timber.i("Response Received")
}
Run Code Online (Sandbox Code Playgroud)
这里的问题collect
是只在getDataFromServer
返回时调用。我的期望是我应该在几毫秒后从缓存中获取第一个事件,然后从服务器获取第二个事件。在这种情况下,"Response Received"
会打印两次,但会立即一个接一个地打印。
在此其他变体中,"Response Received"
仅在getDataFromServer()
返回后打印一次。
remoteDataSource.getDataFromCache() // suspending function returning Flow<Data>
.catch { error -> Timber.e(error) }
.flatMapConcat {
remoteDataSource.getDataFromServer() // suspending function returning Flow<Data>
}
.collect {
Timber.i("Response Received")
}
Run Code Online (Sandbox Code Playgroud)
我Flowable.concat()
之前使用过 RxJava ,它运行良好。Kotlin Flows 中是否有可以模拟这种行为的东西?
android reactive-programming kotlin kotlin-coroutines kotlin-flow
在索引处删除/添加片段会导致 Viewpager2 出现意外行为。这是不可能的,ViewPager
但预计可以与Viewpager2
. 它会导致重复的片段和不同步TabLayout
。
这是一个重现此问题的演示项目。有一个切换按钮可以删除片段并将其重新附加到特定索引处。在这种情况下,附加的片段应该是绿色的,但它是蓝色的,不知何故有 2 个蓝色片段。
这是我的适配器的外观
class ViewPager2Adapter(activity: FragmentActivity) : FragmentStateAdapter(activity) {
val fragmentList: MutableList<FragmentName> = mutableListOf()
override fun getItemCount(): Int {
return fragmentList.size
}
override fun createFragment(position: Int): Fragment {
return when (fragmentList[position]) {
FragmentName.WHITE -> WhiteFragment()
FragmentName.RED -> RedFragment()
FragmentName.GREEN -> GreenFragment()
FragmentName.BLUE -> BlueFragment()
}
}
fun add(fragment: FragmentName) {
fragmentList.add(fragment)
notifyDataSetChanged()
}
fun add(index: Int, fragment: FragmentName) {
fragmentList.add(index, fragment)
notifyDataSetChanged()
}
fun remove(index: Int) …
Run Code Online (Sandbox Code Playgroud) android android-fragments android-viewpager android-viewpager2
类中的静态数据成员(在C++中)将被视为内部链接还是外部链接?我做谷歌,但无法找到任何具体的静态成员变量.
是否可以自定义android设计支持库中菜单项之间的间距NavigationView
?
我的要求是创建一个子菜单,NavigationView
其中菜单项之间的间距较小,然后是父菜单.
android navigation-drawer androiddesignsupport android-navigationview
尝试使用改造 2.0 上传大型视频文件(~140mb)时,我在上传之间遇到以下异常。小文件运行良好。
javax.net.ssl.SSLException: Write error: ssl=0xb924ef28: I/O error during system call, Broken pipe
at com.android.org.conscrypt.NativeCrypto.SSL_write(Native Method)
at com.android.org.conscrypt.OpenSSLSocketImpl$SSLOutputStream.write(OpenSSLSocketImpl.java:771)
at okio.Okio$1.write(Okio.java:80)
at okio.AsyncTimeout$1.write(AsyncTimeout.java:155)
at okio.RealBufferedSink.emitCompleteSegments(RealBufferedSink.java:176)
at okio.RealBufferedSink.write(RealBufferedSink.java:46)
at okhttp3.internal.http.Http1xStream$FixedLengthSink.write(Http1xStream.java:286)
at okio.RealBufferedSink.emitCompleteSegments(RealBufferedSink.java:176)
at okio.RealBufferedSink.writeAll(RealBufferedSink.java:104)
at okhttp3.RequestBody$3.writeTo(RequestBody.java:118)
at okhttp3.MultipartBody.writeOrCountBytes(MultipartBody.java:171)
at okhttp3.MultipartBody.writeTo(MultipartBody.java:113)
at okhttp3.internal.http.HttpEngine$NetworkInterceptorChain.proceed(HttpEngine.java:704)
at okhttp3.internal.http.HttpEngine.readResponse(HttpEngine.java:563)
at okhttp3.RealCall.getResponse(RealCall.java:241)
at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:198)
Run Code Online (Sandbox Code Playgroud)
这是我创建多部分/表单数据的方式
File originalFile = new File(attachment.getFilePath());
RequestBody requestFile
= RequestBody.create(MediaType.parse("multipart/form-data"), originalFile);
MultipartBody.Part body
= MultipartBody.Part.createFormData("file", attachment.getUuid(), requestFile);
Call<ResponseBody> call
= FileAPIProvider.getService().upload(attachment.getUuid(),
attachment.getUuid(),
attachment.getMimeType(),
body,
attachment.getVirtualPath());
Run Code Online (Sandbox Code Playgroud)
改装适配器设置
builder.connectTimeout(30, TimeUnit.SECONDS);
builder.readTimeout(60, TimeUnit.MINUTES);
builder.writeTimeout(60, TimeUnit.MINUTES);
// …
Run Code Online (Sandbox Code Playgroud) android multipartform-data android-networking retrofit retrofit2
我已经使用了TCP服务器boost::asio
.此服务器使用basic_stream_socket::read_some
函数来读取数据.我知道这read_some
并不能保证在返回之前提供的缓冲区已满.
在我的项目中,我发送的是由分隔符分隔的字符串(如果这很重要).在客户端我使用WinSock::send()
函数发送数据.现在我的问题是在服务器端我无法获得从客户端发送的所有字符串.我怀疑是read_some
因为某种原因接收了一些数据并丢弃了剩余的数据.然后再在下一次调用它接收另一个字符串.
在TCP/IP中真的可能吗?
我试图使用async_receive
但是这会占用我所有的CPU,因为缓冲区必须通过回调函数清理它导致我的程序中出现严重的内存泄漏.(我IoService::poll()
用来调用处理程序.与调用率相比,该处理程序的调用速度非常慢async_read()
).
我再次尝试使用自由函数,read
但这不能解决我的目的,因为它使用我提供的缓冲区大小来阻塞太多时间.
我以前的服务器实现是在WinSock API
那里我可以使用的地方接收所有数据WinSock::recv()
.请给我一些线索,以便我可以使用获得完整的数据boost::asio
.
这是我的服务器端线程循环
void
TCPObject::receive()
{
if (!_asyncModeEnabled)
{
std::string recvString;
if ( !_tcpSocket->receiveData( _maxBufferSize, recvString ) )
{
LOG_ERROR("Error Occurred while receiving data on socket.");
}
else
_parseAndPopulateQueue ( recvString );
}
else
{
if ( !_tcpSocket->receiveDataAsync( _maxBufferSize ) )
{
LOG_ERROR("Error Occurred while receiving data on socket.");
}
} …
Run Code Online (Sandbox Code Playgroud) 我们为深层链接intent-filters
定义了一些AndroidManifest
。我们还有assetlinks.json
文件放置在我们域中的适当位置,并带有正确的 SHA 指纹。我们面临一个奇怪的问题,当从 Android Studio 安装应用程序时,这些应用程序链接直接打开我们的应用程序,中间没有任何选择器。
这也是我们想要的行为,但是,当我们将我们的应用程序上传到 Google Play 并从那里下载时,这些应用程序链接App chooser
首先打开,这不是我们想要的行为。
我们做了一些实验,比如为两个不同的链接创建不同的意图过滤器,删除一个链接等,但这种行为保持不变。还仔细检查了 SHA 指纹,它们似乎没问题。
android ×7
boost-asio ×1
c++ ×1
firebase ×1
firebase-cli ×1
kotlin ×1
kotlin-flow ×1
node.js ×1
retrofit ×1
retrofit2 ×1
sockets ×1
static ×1
visual-c++ ×1