自Android Studio更新后,3.2.0我遇到以下问题:
任务':mobile:dataBindingGenBaseClassesDebug'的执行失败.
>无法猜测com.ACME.database.model.Order
也看到了这个答案,暗示了"包名必须以小写字母开头".
......似乎是相似的,好像这个variable任务是原因:
<data class=".databinding.OrderFragmentBinding">
<variable name="order" type="com.ACME.database.model.Order"/>
...
</data>
Run Code Online (Sandbox Code Playgroud)
found:用于绑定类的新数据绑定编译器,它不解释行为的变化.
问:这样的作业是否也受到该命名惯例的影响?我的意思是,有没有机会(除了改变大写的包名)以使数据绑定v2"猜测"成功?
android android-gradle-plugin android-databinding android-studio-3.2 androidx
我正在尝试在新应用程序中实现 Dagger2 注入,唯一失败的是 DaggerAppCompatActivity 和 SupportFragmentInjector。
当我转到 DaggerAppCompatActivity 代码时,我看到:
它尝试在 androidx 重构之前从库版本中引用 AppCompatActivity 和 Fragment。当我继承这个类时,我什至不能调用 setContentView(),因为它不可用。
我想将此代码复制粘贴到我自己的基本活动中,但 HasSupportFragmentInjector 使用 pre-adroidX Fragment。
有没有办法让它与 AndroidX 一起工作?
编辑:这是我在尝试使用 DaggerAppCompatActivity 作为@ContributesAndroidInjector 提到的活动的基类时得到的错误。如果我只是简单地做 AndroidInjection.inject(this) 而不是这个继承,它工作得很好。
C:\Users\micha\Workspace\StudioProjects\BirthdayGift\app\build\tmp\kapt3\stubs\debug\com\mpowloka\birthdaygift\common\di\ApplicationComponent.java:8: error: [Dagger/MissingBinding] [dagger.android.AndroidInjector.inject(T)] java.util.Map<java.lang.Class<? extends androidx.fragment.app.Fragment>,javax.inject.Provider<dagger.android.AndroidInjector.Factory<? extends androidx.fragment.app.Fragment>>> cannot be provided without an @Provides-annotated method.
public abstract interface ApplicationComponent {
^
java.util.Map<java.lang.Class<? extends androidx.fragment.app.Fragment>,javax.inject.Provider<dagger.android.AndroidInjector.Factory<? extends androidx.fragment.app.Fragment>>> is injected at
dagger.android.DispatchingAndroidInjector.<init>(injectorFactories)
dagger.android.DispatchingAndroidInjector<androidx.fragment.app.Fragment> is injected at
dagger.android.support.DaggerAppCompatActivity.supportFragmentInjector
com.mpowloka.birthdaygift.persons.PersonsActivity is injected at
dagger.android.AndroidInjector.inject(T)
component path: com.mpowloka.birthdaygift.common.di.ApplicationComponent ? com.mpowloka.birthdaygift.common.di.ActivityBindingModule_PersonsActivity.PersonsActivitySubcomponent
Run Code Online (Sandbox Code Playgroud)
编辑 2:我的项目依赖项(包含在单独的 gradle 文件中): …
应该使用什么,因为该类已被弃用。ParcelableCompat已过时,newCreator()已过时,ParcelableComparCreatorCallbacks <>已被弃用。谢谢!
public static final Parcelable.Creator<SavedState> CREATOR
= ParcelableCompat.newCreator(new ParcelableCompatCreatorCallbacks<SavedState>() {
@Override
public SavedState createFromParcel(Parcel in, ClassLoader loader) {
return new SavedState(in, loader);
}
@Override
public SavedState[] newArray(int size) {
return new SavedState[size];
}
});
Run Code Online (Sandbox Code Playgroud) 由于AndroidX不兼容,在编译时出现错误:
Android依赖项“ androidx.vectordrawable:vectordrawable”对于编译(1.0.0)和运行时(1.0.1)类路径具有不同的版本。您应该通过DependencyResolution手动设置相同的版本
以下->这篇帖子<-我向build.gradle添加了一些代码
allprojects {
configurations.all {
resolutionStrategy.force"androidx.vectordrawable:vectordrawable:1.0.0",
}
repositories {
google()
jcenter()
}
Run Code Online (Sandbox Code Playgroud)
下次跑步给了我另一个错误
Android依赖项“ androidx.core:core”对于编译(1.0.0)和运行时(1.0.1)类路径具有不同的版本。您应该通过DependencyResolution手动设置相同的版本
我试图添加这个
“ androidx.vectordrawable:vectordrawable:1.0.0”,“ androidx.core:core:1.0.0”,
但我可能做错了,因为我得到了经典的“意外的bla bla bla”
有什么建议吗?
提前致谢
[编辑]我试过这个老把戏一样好,但没有工作(也降级包所需HERE)
rootProject.allprojects {
project.configurations.all {
resolutionStrategy.eachDependency { details ->
if (details.requested.group == 'androidx.core') {
details.useVersion "1.0.1"
}
if (details.requested.group == 'androidx.lifecycle') {
details.useVersion "2.0.0"
}
if (details.requested.group == 'androidx.versionedparcelable') {
details.useVersion "1.0.0"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在返回另一个错误
Android依赖项“ androidx.appcompat:appcompat”对于编译(1.0.0)和运行时(1.0.2)类路径具有不同的版本。您应该通过DependencyResolution手动设置相同的版本
我正在尝试使用带有底部导航视图的 androidx 导航。所以当我在 xml 文件中放置带有 android:name = "androidx.navigation.fragment.NavHostFragment" 的片段时,它给了我一个错误。我猜 xml 没有看到这个库或这个 Fragment
Here is xml file :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".weather.WeatherActivity"
android:orientation="vertical"
android:weightSum="10"
>
<androidx.appcompat.widget.Toolbar
android:id="@+id/w_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay"
android:theme="@style/ToolbarColoredBackArrow"
/>
<fragment
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="9.6"
android:id="@+id/nav_host_fragment"
app:defaultNavHost = "true"
app:navGraph = "@navigation/mobile_navigation"
android:name="androidx.navigation.fragment.NavHostFragment"
/>
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_nav"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.4"
app:menu="@menu/bottom_nav"
>
</com.google.android.material.bottomnavigation.BottomNavigationView>
</LinearLayout>
Activity class:
class WeatherActivity : AppCompatActivity() {
private lateinit var navController: NavController
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(com.example.upgrade.R.layout.activity_weather)
val …Run Code Online (Sandbox Code Playgroud) android kotlin android-jetpack androidx android-jetpack-navigation
我一直在学习 AndroidX,我想ViewHolder在我自己的Adapter类中创建一个非嵌套的类。到目前为止,我正在做类似的事情
主适配器.kt
class MainAdapter : ListAdapter<MainResponse, MainAdapter.MainViewHolder>(MainDiffCallback()) {
//onCreate
//onBind
//...
class MainViewHolder(
private val binding: ListItemMainBinding
) : RecyclerView.ViewHolder(binding.root) {
fun bind(listener: View.OnClickListener) {
with(binding) {
this.listener = listener
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想将它们创建为单独的文件,例如
主适配器.kt
class MainAdapter : ListAdapter<MyObject, MainViewHolder>(MainDiffCallback()) {
//onCreate
//onBind
//...
}
Run Code Online (Sandbox Code Playgroud)
MainViewHolder.kt
class MainViewHolder(private val binding: ListItemMainBinding): RecyclerView.ViewHolder(binding.root) {
fun bind(listener: View.OnClickListener, manufacturer: String, color: Int) {
with(binding) {
binding.listener = listener
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用不同的文件,我不确定这将如何在MainAdapter. 这会class …
generic-type-argument android-recyclerview android-databinding androidx android-listadapter
在迁移到 androidX 之前,发布版本适用于每个 HTTP 请求。
迁移到 androidX 后,每个GET请求都有效,但所有POST请求都无效。它无法向服务器端发送参数。POST请求的所有内容都是空的。
我所做的唯一更改是将此项目迁移到 androidX。
我不确定在哪里可以找到更多的见解... :(
[更新]:通过kushan评论推荐添加接口和POJO :)
界面
@POST("/api/preference")
Call<RoasterPreference> updatePreference(@Body RoasterPreference roasterPreference);
Run Code Online (Sandbox Code Playgroud)
POJO 对象
import com.google.gson.annotations.SerializedName;
public class RoasterPreference {
@SerializedName("type")
private String type;
@SerializedName("value")
private String value;
public RoasterPreference(String _type,String _value){
type = _type;
value = _value;
}
}
Run Code Online (Sandbox Code Playgroud)
来自调试版本的 OkHttp 日志:
D/OkHttp: --> POST http://192.168.0.1:9999/api/preference
Content-Type: application/json; charset=UTF-8
Content-Length: 29
{"type":"t_unit","value":"0"}
--> END POST (29-byte body)
Run Code Online (Sandbox Code Playgroud)
发布版本中的 OkHttp 日志:
D/OkHttp: --> POST …Run Code Online (Sandbox Code Playgroud) 每当我在我的应用程序 gradle 中启用它时
dataBinding {
enabled = true
}
Run Code Online (Sandbox Code Playgroud)
然后同步 -> 完全成功。
但是当我“运行”它时,它构建失败并显示此错误
java.lang.NullPointerException at android.databinding.tool.store.LayoutFileParser.parseOriginalXml(LayoutFileParser.java:135) at android.databinding.tool.store.LayoutFileParser.parseXml(LayoutFileParser.java:93) ...
我的应用程序很少有 Kotlin 代码,android 版本是 3.5,minSdkVersion 19,targetSdkVersion 28,并升级到 androidX
我该如何解决这个问题?我应该搜索哪个部分来解决这个问题???
除了上面的代码,一切都很完美。
编辑 当我在升级到 androidX 之前回滚我的代码并编译它时,它还显示“空点异常”,此时,除了“空点异常”之外,没有额外的消息。
我刚刚通过Refactor -> Move to AndroidxAndroid Studio 中的选项迁移到了 androidx 。默认情况下,该build.gradle文件正在使用:
implementation 'androidx.appcompat:appcompat:1.0.0'
Run Code Online (Sandbox Code Playgroud)
我在项目的很多地方都使用了 LocalBroadcastManager。我可以完美地import androidx.localbroadcastmanager.content.LocalBroadcastManager与上面的 v1.0.0 一起使用androidx.appcompat。但是当我将其更新为 1.1.0 时:
implementation 'androidx.appcompat:appcompat:1.1.0'
Run Code Online (Sandbox Code Playgroud)
导入不起作用。我收到Unresolved reference : localbroadcastmanager错误。
我试图清理项目并多次重建项目,但问题仍然存在。
有什么解决办法吗?谢谢。
我正在使用导航抽屉,这没有错误
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:design:28.0.0'
Run Code Online (Sandbox Code Playgroud)
但是在androidx中更新后
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.appcompat:design:1.1.0'
Run Code Online (Sandbox Code Playgroud)
此代码不适用于导航抽屉。
我的问题是这种情况下的依赖是什么。请帮忙。
android android-appcompat android-support-library material-components-android androidx