小编cha*_*l03的帖子

如何将主键作为Room Persistence lib的自动增量

我正在创建一个Entity(Room Persistence lib)类Food,我想把它foodId作为自动增量.

@Entity
class Food(var foodName: String, var foodDesc: String, var protein: Double, var carbs: Double, var fat: Double)
{
    @PrimaryKey
    var foodId: Int = 0
    var calories: Double = 0.toDouble()
}
Run Code Online (Sandbox Code Playgroud)

如何设置foodId自动增量字段?

android kotlin android-room

151
推荐指数
8
解决办法
7万
查看次数

Kotlin中的Room Persistence lib实现

我正在kotlin中实现Room persistence lib来实现我的数据库.

以下是我的Entity,DaoDatabase类:

Food.kt

@Entity
class Food(@ColumnInfo(name = "food_name") var foodName: String,
           @ColumnInfo(name = "food_desc") var foodDesc: String,
           @ColumnInfo(name = "protein") var protein: Double,
           @ColumnInfo(name = "carbs") var carbs: Double,
           @ColumnInfo(name = "fat") var fat: Double)
{
    @ColumnInfo(name = "id")
    @PrimaryKey(autoGenerate = true)
    var id: Long = 0
    @ColumnInfo(name = "calories")
    var calories: Double = 0.toDouble()
}
Run Code Online (Sandbox Code Playgroud)

PersonalizedFood.kt

@Entity(primaryKeys = arrayOf("food_id","date"))
class PersonalizedFood(@ColumnInfo(name = "quantity") var quantity: Int,
                       @ColumnInfo(name = "unit") var unit: …
Run Code Online (Sandbox Code Playgroud)

android kotlin

17
推荐指数
1
解决办法
1万
查看次数

RecyclerView.Adapter-错误:公共函数在Kotlin中公开其内部返回类型

我在Kotlin中实现了一个RecylcerView.Adapter类.我收到编译时错误,请参阅以下代码中的注释.

// Compile time Error: 'public' function exposes its 'internal' return type ViewHolder
class DietListAdapter(context: Context, private val foodList: ArrayList<Food>) : RecyclerView.Adapter<DietListAdapter.ViewHolder>() {

    private val inflater: LayoutInflater
    private var onItemClick: Callback<Void, Int>? = null

    init {
        inflater = LayoutInflater.from(context)
    }
    // Compile time Error: 'public' function exposes its 'internal' return type ViewHolder
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DietListAdapter.ViewHolder {
        val holder = ViewHolder(inflater.inflate(R.layout.layout_food_list_item, parent, false))
        return holder
    }
    // Compile time Error: 'public' function exposes its 'internal' parameter type …
Run Code Online (Sandbox Code Playgroud)

android kotlin

15
推荐指数
1
解决办法
4963
查看次数

下载视频和播放

我想实现在线视频播放功能并下载它.我的意思是应该使用相同的下载流进行下载和播放,以便保存视频以供离线使用,并防止分别播放和下载两倍的数据费用.

到目前为止,我已经实现了视频下载asyncTask和播放OnPostExecute.以下是代码:

public class MainActivity extends AppCompatActivity {


private Button btnPlay;
private MediaPlayer player;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    outFilePath = getExternalFilesDir("/") + "/video.mp4";
    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });

    prepareVideoView();

}

private VideoView videoView;
String videoPath = "http://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_5mb.mp4";
String outFilePath = "";//

private void prepareVideoView() {
    MediaController …
Run Code Online (Sandbox Code Playgroud)

android

11
推荐指数
2
解决办法
8018
查看次数

在处理时停止rxJava可观察链执行

尽管调试rxJava网络电话在一个应用程序我碰到这样一种情况,如果我们disposeclear处置对象通过链的订阅返回observables那么只有第一个observable得到处理而不是其他链接observablesflatMap.

看看下面的演示代码片段:

CompositeDisposable testCompositeDisposal = new CompositeDisposable();

private void testLoadData() {
    Disposable disposable = Observable.create(sbr -> {
        for (int i = 0; i < 5; i++) {
            Thread.sleep(3000);
            Log.w("Debug: ", "First: " + i);
            sbr.onNext(true);
        }
        sbr.onComplete();
    }).subscribeOn(Schedulers.io()).flatMap(value -> Observable.create(sbr -> {
        for (int i = 0; i < 5; i++) {
            Thread.sleep(3000);
            Log.w("Debug: ", "Second: " + i);
            sbr.onNext(true);
        }
        sbr.onComplete();
    })).doOnNext(value -> {
        Log.w("Debug: ", "doONNext"); …
Run Code Online (Sandbox Code Playgroud)

android rx-java rx-java2

6
推荐指数
1
解决办法
4928
查看次数

如何在android中的CheckBox文本中添加链接?

我正在制作一份注册表,其中需要一个复选框来同意条款和条件。所以问题是复选框的文本包含打开网页的链接(见下图)。TextView我想知道是否可以像使用一样使复选框可点击ClickableSpan

\n\n

在此输入图像描述

\n\n

到目前为止我已经使用以下代码完成了此操作:

\n\n

以下方法接受字符串并返回SpannableString我设置为复选框的内容。

\n\n
private SpannableString makeSpannable(String text)\n{\nString temp = text;\nPattern pattern = Pattern\n    .compile("<a href=[\\\\\\"\']([\\\\.^>^<\\\\w:/]*)[\\\\\\"\']>([^>^<.]*)</a>");\nMatcher matcher = pattern.matcher(text);\nwhile (matcher.find())\n{\n    temp = temp.replace(matcher.group(0), (matcher.group(2)));\n}\n\nSpannableString linkedString = new SpannableString(temp);\nmatcher = pattern.matcher(text);\nwhile (matcher.find())\n{\n\n    final String href = matcher.group(1);\n\n    int index = temp.indexOf(matcher.group(2));\n    ClickableSpan clickable = new ClickableSpan() {\n\n    @Override\n    public void onClick(View widget)\n    {\n        loadLink(href);\n    }\n    };\n    linkedString.setSpan(clickable, index, index\n        + matcher.group(2).length(), 0);\n}\nreturn linkedString;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

t.setText(makeSpannable("Ich akzeptiere die <a href=\'http://www.google.com\'>AGB\'s</a> und …

android

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

以编程方式更改图层列表Drawable项的底部属性

我正在创建一个LayerDrawable创建底部笔划,但我不知道如何给出图层的下边距(Drawablw).

    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:bottom="2dp">
      ..
        </item>
    </layer-list>
Run Code Online (Sandbox Code Playgroud)

我想以编程方式设置上面的底部边距.

到目前为止,我已经这样做了:

Drawable[] list = new Drawable[2];
GradientDrawable strokeDrawable = new GradientDrawable(
    GradientDrawable.Orientation.TOP_BOTTOM, new int[] {
        strokeColor[0], strokeColor[0] });
GradientDrawable backgroundDrawable = new GradientDrawable(
    GradientDrawable.Orientation.TOP_BOTTOM, bgColor);
// Now how to set bottom margin to make border. 

list[0] = strokeDrawable;
list[1] = backgroundDrawable;

LayerDrawable layerDrawable = new LayerDrawable(list);
Run Code Online (Sandbox Code Playgroud)

有人知道吗?

android layer-list layerdrawable

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

如果我们仅可以返回一个值并在视图中进行设置,那么为什么要在Presenter中创建接口(MVP结构)

已经两个月了,我一直在与MVP Structure合作来创建Android应用。

正如我在有关MVP的每个链接中所介绍的那样,Presenter类负责处理所有业务登录和数据(来自Model类),我明白了并开始工作。

教程中显示的优点之一,我想在此强调,MVP使单元测试更加容易,因为它不依赖于视图(我也很理解)。

我不明白的是为什么要创建一个界面来更新来自演讲者的视图,而我只能调用一个演讲者的方法,该方法将返回一个值,我可以在那里设置它?

让我们来谈谈我上面提到的优势(单元测试)。使用这些接口单元测试会带来更多问题,因为方法需要接口实现来完成我们在单元测试中没有的操作(我知道工具测试也出现在单元测试中,但我只是在谈论非UI测试)。

我只喜欢调用presenter方法并获取值并在片段或活动本身中的视图中进行设置,其中,随着接口的创建会带来另一层次的复杂性和不必要的接口声明,因此所有视图操作都将得以实现。有点令人沮丧。

与我一起工作的一位朋友指出了我的代码中的这个问题,并告诉我查看所有在线引用以澄清我的错误。但是我想知道这些接口如何在编程实践中全面帮助。因为我不能只消化它。它变成了我的屁股上的痛苦。我看了所有在线参考资料都没有解决方法。

演示者界面

class Presenter
{

    private ViewInterface viewInterface;

    public void setViewInterface(ViewInterface viewInterface)
    {
        this.viewInterface = viewInterface;
    }

    // Here value is being passed to interface method that is implemented in fragment.
    // No problem with this implementation but why to do it. 
    // It will make unit test problematic as this method needs ViewInterface.
    public void calculate()
    {
        // Some calculation
        viewInterface.updateView(/*pass some paramerer*/);
    }
}
Run Code Online (Sandbox Code Playgroud)

没有界面的演示者

class Presenter
{


    // Here …
Run Code Online (Sandbox Code Playgroud)

mvp android unit-testing

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

Kotlin中的Room Persistence lib实现(Gradle错误)

我正在kotlin中实现Room persistence lib来实现我的数据库.在Android Room Persistences库和Kotlin线程中询问相同的问题,应用这些解决方案会导致不同的gradle错误:

以下是我的Entity,DaoDatabase类:

Food.kt

@Entity
class Food(@ColumnInfo(name = "food_name") var foodName: String,
           @ColumnInfo(name = "food_desc") var foodDesc: String,
           @ColumnInfo(name = "protein") var protein: Double,
           @ColumnInfo(name = "carbs") var carbs: Double,
           @ColumnInfo(name = "fat") var fat: Double)
{
    @ColumnInfo(name = "id")
    @PrimaryKey(autoGenerate = true)
    var id: Long = 0
    @ColumnInfo(name = "calories")
    var calories: Double = 0.toDouble()
}
Run Code Online (Sandbox Code Playgroud)

PersonalizedFood.kt

@Entity(primaryKeys = arrayOf("food_id","date"))
class PersonalizedFood(@ColumnInfo(name = "quantity") var quantity: Int,
                       @ColumnInfo(name …
Run Code Online (Sandbox Code Playgroud)

android kotlin

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

为什么在 android recyclerview 中两行(消息)之间有这么大的空间

在此输入图像描述

我面临两个问题。为什么 recyclerview 中的两行(消息)之间的空间太大。我正在尝试通过 recyclerview 制作一个聊天应用程序。为什么进入活动时消息没有出现,而是在单击消息编辑文本时出现消息。

我的代码:

我自己的聊天布局:

<TextView
    android:id="@+id/message"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_marginRight="10dp"
    android:textIsSelectable="true"
    android:background="@drawable/bg_bubble_gray"
    android:textSize="14dp" />

<TextView
    android:id="@+id/timestamp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignRight="@id/message"
    android:layout_below="@id/message"
    android:layout_marginBottom="25dp"
    android:padding="10dp"
    android:textSize="10dp" />
Run Code Online (Sandbox Code Playgroud)

chat layout myself:



 <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:paddingTop="5dp"
        android:paddingLeft="16dp"
        android:paddingRight="16dp"
        >

        <TextView
            android:id="@+id/message"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_marginLeft="10dp"
            android:textIsSelectable="true"
            android:background="@drawable/bg_bubble_white"
            android:textSize="14dp" />

        <TextView
            android:id="@+id/timestamp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_below="@id/message"
            android:layout_marginBottom="25dp"
            android:layout_marginLeft="10dp"
            android:paddingLeft="10dp"
            android:paddingTop="6dp"
            android:textSize="10dp" />

    </LinearLayout>
Run Code Online (Sandbox Code Playgroud)

适配器:

public class ChatRoomThreadAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

private static String TAG = ChatRoomThreadAdapter.class.getSimpleName();

private String …
Run Code Online (Sandbox Code Playgroud)

android adapter android-recyclerview

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