我正在创建一个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
自动增量字段?
我正在kotlin中实现Room persistence lib来实现我的数据库.
以下是我的Entity
,Dao
和Database
类:
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) 我在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) 我想实现在线视频播放功能并下载它.我的意思是应该使用相同的下载流进行下载和播放,以便保存视频以供离线使用,并防止分别播放和下载两倍的数据费用.
到目前为止,我已经实现了视频下载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) 尽管调试rxJava网络电话在一个应用程序我碰到这样一种情况,如果我们dispose
或clear
处置对象通过链的订阅返回observables
那么只有第一个observable
得到处理而不是其他链接observables
的flatMap
.
看看下面的演示代码片段:
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) 我正在制作一份注册表,其中需要一个复选框来同意条款和条件。所以问题是复选框的文本包含打开网页的链接(见下图)。TextView
我想知道是否可以像使用一样使复选框可点击ClickableSpan
。
到目前为止我已经使用以下代码完成了此操作:
\n\n以下方法接受字符串并返回SpannableString
我设置为复选框的内容。
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\nt.setText(makeSpannable(
"Ich akzeptiere die <a href=\'http://www.google.com\'>AGB\'s</a> und …
我正在创建一个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)
有人知道吗?
已经两个月了,我一直在与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) 我正在kotlin中实现Room persistence lib来实现我的数据库.在Android Room Persistences库和Kotlin线程中询问相同的问题,应用这些解决方案会导致不同的gradle错误:
以下是我的Entity
,Dao
和Database
类:
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) 我面临两个问题。为什么 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 ×10
kotlin ×4
adapter ×1
android-room ×1
layer-list ×1
mvp ×1
rx-java ×1
rx-java2 ×1
unit-testing ×1