小编Jos*_*hua的帖子

如何在WorkManager for Android中创建具有参数的Worker?

Android架构有一个新的组件WorkManager.

例子中,

class CompressWorker(context : Context, params : WorkerParameters)
    : Worker(context, params) {

    override fun doWork(): Result {

        // Do the work here--in this case, compress the stored images.
        // In this example no parameters are passed; the task is
        // assumed to be "compress the whole library."
        myCompress()

        // Indicate success or failure with your return value:
        return Result.SUCCESS

        // (Returning RETRY tells WorkManager to try this task again
        // later; FAILURE says not to …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-architecture-components android-workmanager

14
推荐指数
2
解决办法
6019
查看次数

如何使用rowspan和colspan解析表

首先,我阅读了解析带有rowspan和colspan的表.我甚至回答了这个问题.请在将此标记为重复之前阅读.

<table border="1">
  <tr>
    <th>A</th>
    <th>B</th>
  </tr>
  <tr>
    <td rowspan="2">C</td>
    <td rowspan="1">D</td>
  </tr>
  <tr>
    <td>E</td>
    <td>F</td>
  </tr>
  <tr>
    <td>G</td>
    <td>H</td>
  </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

它将渲染出来

+---+---+---+
| A | B |   |
+---+---+   |
|   | D |   |
+ C +---+---+
|   | E | F |
+---+---+---+
| G | H |   |
+---+---+---+
Run Code Online (Sandbox Code Playgroud)
<table border="1">
  <tr>
    <th>A</th>
    <th>B</th>
  </tr>
  <tr>
    <td rowspan="2">C</td>
    <td rowspan="2">D</td>
  </tr>
  <tr>
    <td>E</td>
    <td>F</td>
  </tr>
  <tr>
    <td>G</td>
    <td>H</td>
  </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

但是,这将呈现如下.

+---+---+-------+
| …
Run Code Online (Sandbox Code Playgroud)

html python html-table

10
推荐指数
1
解决办法
3526
查看次数

如何更改定期工作请求期间而不使用 WorkManager 立即运行?

val request = PeriodicWorkRequestBuilder<FooWorker>(1, TimeUnit.DAYS).build()
WorkManager.getInstance().enqueueUniquePeriodicWork(
    "FOO",
    ExistingPeriodicWorkPolicy.REPLACE,
    request
)
Run Code Online (Sandbox Code Playgroud)

上面的代码是在RANonCreateApplication,以确保该请求被排入队列。但是,这会导致一个问题,即FooWorker每次用户启动应用程序时都会运行,因为ExistingPeriodicWorkPolicy.REPLACE取消以前的工作并将新工作加入队列,导致它立即运行。

如果我们更改为ExistingPeriodicWorkPolicy.KEEP,即使期间或工作人员更改,我们也无法替换工作。

有没有办法在当前运行后替换请求?

例如,原始请求每天运行 1 次,新请求每小时运行 1 次。运行下一个原始请求后,将其替换为新请求。

android kotlin android-workmanager

8
推荐指数
1
解决办法
2661
查看次数

只有一个项目显示在回收站视图中

我在回收站视图中显示所有项目时遇到问题.我的代码只显示一个项目(主页.我有3个项目:主页,浏览照片和我的旅行)

fragment_navigation_drawer.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/fragment_navigation_drawer"
    android:background="#EEE"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.traveldiaries.ztir.traveldiaries.NavigationDrawerFragment">

    <!-- TODO: Update blank fragment layout -->
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="220dp"
        android:background="#16a085"
        android:id="@+id/linearLayout">

    </LinearLayout>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/drawerList"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    </android.support.v7.widget.RecyclerView>

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

RecyclerAdapter.java

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MyViewHolder> {
    private LayoutInflater inflater;
    List<MenuList> data = Collections.emptyList();

    public RecyclerAdapter(Context context, List<MenuList> data){
        inflater= LayoutInflater.from(context);
        this.data = data;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view=inflater.inflate(R.layout.itemlist,parent,false);
        MyViewHolder holder= new MyViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) { …
Run Code Online (Sandbox Code Playgroud)

xml android android-layout

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

如何禁用 pytest 转储源代码?

当其中一项测试失败时,pytest 将转储引发异常的函数的源代码。但是,当错误是从另一个库引发时,它仍然会转储函数源代码淹没输出。

是否可以从转储源代码中禁用 pytest 并只有堆栈跟踪?堆栈跟踪通常足以跟踪问题。

我搜索了一下,但我能找到的都是与--show-capture.

python pytest

7
推荐指数
2
解决办法
796
查看次数

在 Typescript 中重载通用箭头函数的语法错误

interface Foo1 {
  (param: number): number
  (param: string): string
}

const foo1: Foo1 = (param: number | string) => param as any
const foo2 = <T>(param: T) : T => param 

interface Foo3<T1, T2> {
  (param: T1): T1
  (param: T2): T2
}

const foo3: Foo3<T1, T2> = <T1, T2>(param: T1 | T2) => param as any
// [ts] Cannot find name 'T1'. [2304]
// [ts] Cannot find name 'T2'. [2304]
Run Code Online (Sandbox Code Playgroud)

我在 StackOverflow 上搜索过,但问题只涉及其中一个或没有回答问题。

generics typescript arrow-functions

7
推荐指数
1
解决办法
901
查看次数

如何使用SQLAlchemy在SQLite上创建全文搜索索引并查询?

我正在创建一个可以执行基本操作的简单应用程序。SQLite 用作数据库。我想执行通配符搜索,但我知道它的性能很差。我想尝试全文搜索,但我无法完整举例说明如何进行搜索。我确认 SQLite 有全文搜索支持。这是我的示例代码。

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class Person(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.Text, unique=True, nullable=False)
    thumb = db.Column(db.Text, nullable=False, default="")

    role = db.relationship("Role", backref="person", cascade="delete")


class Role(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    person_id = db.Column(db.Integer, db.ForeignKey(Person.id, ondelete="CASCADE"), nullable=False)
    role = db.Column(db.Text, nullable=False)
Run Code Online (Sandbox Code Playgroud)

如何创建 FTS 索引并使用 SQLAlchemy 查询它。例如,在 Person 中搜索 name。

python sqlite full-text-search sqlalchemy flask-sqlalchemy

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

如何防止 withRouter 导致重新渲染 PureComponent?

我可以通过 调用链接history.push("/path")。要访问history,我必须使用withRouterwhich 将多个道具传递给组件。即使路径没有改变,match经过的withRouter也是不同的。这会导致PureComponent重新渲染。有没有办法解决这个问题?

例子:

class HomeButton extends PureComponent {
  onClick = () => {
    const { history } = this.props;
    history.push("/");
  }

  render() {
    return <Button onClick={this.onClick}/>
  }
}

export default withRouter(HomeButton);
Run Code Online (Sandbox Code Playgroud)

我使用了shallowEqualExplain来检查导致更新的道具。

javascript reactjs react-router

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

Android会议室DAO界面不适用于继承

interface Marker<T : BaseFoo> {
    fun getSpecialFoo(): List<T>
}

@Dao
interface FooDao: Marker<Foo> {
    @Query("SELECT * FROM foo WHERE bar = :bar")
    fun get(bar: Int): List<Foo>

    @Transaction
    override fun getSpecialFoo(): List<Foo> {
        return get(1)
    }
}
Run Code Online (Sandbox Code Playgroud)

这导致

抽象的DAO方法必须使用以下注释之一进行注释:Insert,Delete,Query,Update,RawQuery

但是,Marker尚未标记为@Dao和已FooDao覆盖getSpecialFoo。为什么仍然显示此错误?

我需要,Marker因为我需要具有某些方法的通用DAO。有办法解决这个问题吗?

我能想到的唯一方法是将dao标记为Any并转换类型运行时或为DAO构建包装器。

android kotlin android-room

6
推荐指数
2
解决办法
535
查看次数

如何在 TypeScript 声明中使用 Webpack 别名

我正在使用 TypeScript 编写 NPM 包,但找不到在 TypeScript 声明中转换 Webpack 别名的方法。

webpack.config.js

{
  // ...more Webpack configurations
  resolve: {
  extensions: [".ts", ".js"],
  alias: {
    "@": resolvePath("src")
  }
}
Run Code Online (Sandbox Code Playgroud)

配置文件

{
  "compilerOptions": {
    // More options
    "paths": {
      "@/*": ["src/*"]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用babel-loaderwith@babel/preset-typescript但它不输出声明文件。

tsc --emitDeclarationOnly发出声明文件,但不会替换@/为正确的路径。对于ts-loader.

我可以在 Jest 中使用moduleNameMapper. 如果我可以让它工作构建声明文件,我就不再需要编写类似../../../../model.

我在网上找到的大多数答案都是关于编译 JavaScript 文件的,我对此没有问题。任何帮助将不胜感激。

typescript webpack

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