小编Lev*_*ira的帖子

导航架构组件 - 使用lambda表达式的操作导航

我添加了一个新动作Navigation.xml:

 <fragment
    android:id="@+id/launcher_home"
    android:name="com.example.android.codelabs.navigation.MainFragment"
    android:label="@string/home"
    tools:layout="@layout/main_fragment">
    <action
        android:id="@+id/go_to_step_one"
        app:destination="@id/flow_step_one" />
</fragment>
Run Code Online (Sandbox Code Playgroud)

调用导航操作时,如果我使用,导航工作正常:

 view.findViewById<Button>(R.id.navigate_action_bt)?.setOnClickListener(
            Navigation.createNavigateOnClickListener(R.id.go_to_step_one, null)
    )
Run Code Online (Sandbox Code Playgroud)

但是当用lambda调用它时,它不起作用:

 view.findViewById<Button>(R.id.navigate_action_bt)?.setOnClickListener {
        Navigation.createNavigateOnClickListener(R.id.go_to_step_one, null)
    }
Run Code Online (Sandbox Code Playgroud)

android kotlin android-architecture-components android-jetpack android-architecture-navigation

16
推荐指数
1
解决办法
2173
查看次数

Annotation参数必须是一个编译时间常数

我已经看到了这个问题。类似的错误,但就我而言是不同的。

与Room一起工作时,我正在创建桌子。工作正常。

@Daointerface 
UserDao {
@Query("SELECT * FROM user")
fun getAll(): List<User>

@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(user: User)

@Delete
fun delete(user: User)}
Run Code Online (Sandbox Code Playgroud)

但后来我发现所有表名都必须存储在不同的类中。如表名“用户”->存储在不同的类中。

例如。

class Table {
companion object {
    const val USER_TABLE = "user"
}}
Run Code Online (Sandbox Code Playgroud)

但是下面的代码不起作用。它不是从Table类中获取表名。给出编译时错误。“ Annotation参数必须是编译时间常数”,请帮帮我。

@Query("SELECT * FROM $Table.USER_TABLE")
fun getAll(): List<User>
Run Code Online (Sandbox Code Playgroud)

android kotlin android-room android-architecture-components android-jetpack

8
推荐指数
2
解决办法
8132
查看次数

如何基于另一个字段过滤ModelMultipleChoiceField?

基于下面的表格,我想知道如果有一种方法(或插件)使用字段tipo_indicador过滤indicadores字段:

tipo_indicador = forms.ModelChoiceField(
    queryset=TipoIndicador.objects.all(),
    label=u'Tipo de indicador',
    required=False,
)

indicadores = forms.ModelMultipleChoiceField(
    label= _(u'Indicadores'),
    required=False,
    queryset=Indicador.objects.all(),
    widget=admin_widgets.FilteredSelectMultiple(verbose_name=_(u'indicadores'), is_stacked=False)
Run Code Online (Sandbox Code Playgroud)

)

django django-templates django-models django-forms django-views

5
推荐指数
0
解决办法
188
查看次数

如何在改造中使用基本身份验证发送发帖请求?

在我的代码中,我想发送带有基本身份验证的帖子请求。

这是我的邮递员屏幕截图:

在此处输入图片说明

这是我的apiInterface类

@FormUrlEncoded
    @POST("GetBarcodeDetail")
    Call<PreliminaryGoodsAcceptResponse> PRELIMINARY_GOODS_ACCEPT_RESPONSE_CALL(@Field("ProcName") String procName, @Field("Barcode") String barcode, @Field("LangCode") String langCode);
Run Code Online (Sandbox Code Playgroud)

这是我的apiclient

public class ApiClient {

    public static final String BASE_URL = "http://192.**********";
    private static Retrofit retrofit = null;
    private static OkHttpClient sClient;

    public static Retrofit getClient() {
        if(sClient == null) {
            HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
            interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
            sClient = new OkHttpClient.Builder()
                    .addInterceptor(new HttpLoggingInterceptor(HttpLoggingInterceptor.Logger.DEFAULT))
                    .addInterceptor(interceptor)
                    .build();
        }

        if (retrofit==null) {
            retrofit = new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .client(sClient)
                    .build();
        }
        return retrofit;
    }

}
Run Code Online (Sandbox Code Playgroud)

我的问题是如何使用标头发送帖子请求:

标头用户名:EBA令牌:
34242353453456563DSFS

android header basic-authentication retrofit

5
推荐指数
2
解决办法
3167
查看次数

具有特定页面索引的分页库数据源

关于arch中的分页库。成分

它具有三个不同的数据源:

  1. PageKeyedDataSource:当请求需要下一个/上一个索引键时。
  2. ItemKeyedDataSource:当请求需要一个项目作为键时。
  3. PositionalDataSource:当请求需要索引来获取下一批时。

如果后端响应不支持下一个/上一个索引键而只支持当前页面,则使用哪个。当响应如下:

{
    "status": "success",
    "response": "1",
    "message": "Data fetched successfully",
    "data": {
        "total": 2,
        "per_page": "5",
        "page": 1,
        "items": [],
        "last_page": 1,
        "has_more": false
    }
}
Run Code Online (Sandbox Code Playgroud)

paging android android-architecture-components android-jetpack androidx

5
推荐指数
1
解决办法
1739
查看次数

如何在主线程上的 onCreate/ 中获取房间列表的大小?

如何轻松获得数据库大小的计数,以便我可以根据数据库是否为空执行适当的操作?

我有一个 App DB、视图模型、存储库、Dao 和所有其他部分,并且我的对象插入......但我无法调用onCreate()数据库中列表的大小。当我尝试获取mAppDatabase.vehicleDao().getAll().getValue().size(), 或 时mVehicleViewModel.getAll().getValue().size(),我得到空指针异常。

但是我知道我的对象正在插入,因为当我运行一个 observable 时,我可以记录它们的信息......但我无法在主线程/onCreate 中获得计数。帮助!示例代码如下:

protected void onCreate(Bundle savedInstanceState) {
...
mAppDatabase = AppDatabase.getInstance(MyActivity.this);
Log.d("LISTSIZEAPP", String.valueOf(mAppDatabase.myDao().getAll().getValue().size()));
ObserveItems();
Run Code Online (Sandbox Code Playgroud)

或者

protected void onCreate(Bundle savedInstanceState) {
...
mViewModel = ViewModelProviders.of(this).get(MyViewModel.class);
Log.d("LISTSIZEVM",  String.valueOf(mViewModel.getAll().getValue().size()));
ObserveItems();
Run Code Online (Sandbox Code Playgroud)

^ 两者的空指针异常(尝试在空对象引用上调用接口方法 'java.lang.Object[] java.util.List.toArray()')...

然而:

private void ObserveItems() {
    mViewModel.getAll().observe(this, new Observer<List<Foo>>() {
        @Override
        public void onChanged(@Nullable final List<Foo> foos) {
            mFoos= foos;
            for (Vehicle v: mFoos) {
                Log.d("ROOM INFO - FOOS", v.getFooTitle());
            }
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

我可以记录我想要的所有信息。所以这些项目是明确插入的。是什么赋予了?我错过了什么?谢谢你。

java android android-room android-architecture-components android-jetpack

3
推荐指数
1
解决办法
6139
查看次数

来自房间持久性库的 HashMap

我想从我的 sql 中获取一个密钥对对象,所以我怎么能像这样

@Query("SELECT id,name FROM table")
HashMap<Integer, String> getValues();
Run Code Online (Sandbox Code Playgroud)

android android-room android-jetpack

2
推荐指数
1
解决办法
3686
查看次数