小编sky*_*ler的帖子

在注销时,清除活动历史记录堆栈,阻止"后退"按钮打开仅登录的活动

我的应用程序中的所有活动都要求用户登录才能查看.用户几乎可以从任何活动中注销.这是应用程序的要求.在用户注销的任何时候,我都想将用户发送到Login Activity.此时我希望此活动位于历史堆栈的底部,以便按"后退"按钮可将用户返回到Android的主屏幕.

我已经看到这个问题问了几个不同的地方,都回答了类似的答案(我在这里概述),但我想在这里提出收集反馈.

我已经尝试通过设置其Intent标志来打开Login活动,FLAG_ACTIVITY_CLEAR_TOP这似乎是在文档中概述的,但是没有实现我将Login活动放在历史堆栈底部并阻止用户导航回来的目标以前看到的登录活动.我也尝试使用android:launchMode="singleTop"清单中的Login活动,但这也没有完成我的目标(并且似乎无论如何都没有效果).

我相信我需要清除历史堆栈,或者完成之前打开的所有活动.

一种选择是让每个活动onCreate检查登录状态,finish()如果没有登录.我不喜欢这个选项,因为后退按钮仍可供使用,当活动靠近时自动导航.

下一个选项是维护LinkedList对所有可以从任何地方静态访问的开放活动的引用(可能使用弱引用).注销时,我将访问此列表并迭代所有先前打开的活动,并finish()在每个活动上进行调用.我很快就会开始实施这种方法.

但是,我宁愿使用一些Intent标志技巧来实现这一目标.我很高兴发现我可以满足我的应用程序的要求,而不必使用我上面概述的两种方法中的任何一种.

有没有办法通过使用Intent或清单设置来实现这一点,或者是我的第二个选择,保持已LinkedList打开的活动是最佳选择?或者我还有另一种选择吗?

android activity-lifecycle android-lifecycle

228
推荐指数
6
解决办法
11万
查看次数

获取函数参数的默认值?

对于这个功能

def eat_dog(name, should_digest=True):
    print "ate dog named %s. Digested, too? %" % (name, str(should_digest))
Run Code Online (Sandbox Code Playgroud)

我希望,在函数外部,读取它的参数和附加的任何默认值.所以对于这个具体的例子,我想知道它name没有默认值(即它是必需的参数),这True是默认值should_digest.

我知道inspect.getargspec(),它确实给了我关于参数和默认值的信息,但我发现两者之间没有联系:

ArgSpec(args=['name', 'should_digest'], varargs=None, keywords=None, defaults=(True,))

从这个输出我怎么能告诉True(在defaults元组中)是默认值should_digest

另外,我知道接近问题的"请求宽恕"模型,但不幸的是,该错误的输出不会告诉我缺少参数的名称:

>>> eat_dog()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: eat_dog() takes at least 1 argument (0 given)
Run Code Online (Sandbox Code Playgroud)

为了给出上下文(为什么我要这样做),我通过JSON API在模块中公开函数.如果调用者省略了某些函数参数,我想返回一个特定的错误,该错误命名了省略的特定函数参数.如果客户端省略了参数,但函数签名中提供了默认值,我想使用该默认值.

python

52
推荐指数
4
解决办法
2万
查看次数

如何在Python中记录模块常量?

我有一个模块,errors.py其中定义了几个全局常量(注意:我知道Python没有常量,但我已经使用UPPERCASE按惯例定义了它们).

"""Indicates some unknown error."""
API_ERROR = 1

"""Indicates that the request was bad in some way."""
BAD_REQUEST = 2

"""Indicates that the request is missing required parameters."""
MISSING_PARAMS = 3
Run Code Online (Sandbox Code Playgroud)

使用reStructuredText如何记录这些常量?正如你所看到的,我已经在他们上面列出了一个文档字符串,但我没有找到任何表明这样做的文档,我只是猜测它.

python restructuredtext python-sphinx

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

Environment.getExternalStorageDirectory不返回可移动存储的路径

从API级别8开始,Android似乎重新定义了"外部"存储.通过http://developer.android.com/reference/android/os/Environment.html阅读,附在文档中getExternalStorageDirectory我看到评论:"不要在这里混淆'外部'一词.这个目录可以更好被认为是媒体/共享存储......在具有多个"外部"存储目录的设备中......,该目录代表用户将与之交互的"主要"外部存储."

我的应用程序将文件写入获取的路径getExternalStorageDirectory,并且我已经让用户请求选择写入他们的可移动SD卡.我一直认为它getExternalStorageDirectory返回了可移动SD卡的路径,但这已不再适用.如何访问此SD卡的路径?

android

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

调用MediaPlayer.reset()的IllegalStateException

Android的文档MediaPlayer显示该reset()调用没有无效状态:http://developer.android.com/reference/android/media/MediaPlayer.html#Valid_and_Invalid_States(无效状态列为{}或"无" ").

但是,我看到IllegalStateException在调用时抛出reset():

java.lang.IllegalStateException
at android.media.MediaPlayer._reset(Native Method)
at android.media.MediaPlayer.reset(MediaPlayer.java:1061)
at com.example.android.player.AsyncPlayer$AsyncHandler.handleMessage(AsyncPlayer.java:654)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.os.HandlerThread.run(HandlerThread.java:60)
Run Code Online (Sandbox Code Playgroud)

文档不正确吗?

android media-player

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

带有IN子句的SQLAlchemy原始SQL参数替换

我有一个SQL语句,SELECT foo FROM bar WHERE id IN %s.我有一个整数列表,例如[1, 2, 3],我希望它变成一个看起来像的SQL语句SELECT foo FROM bar WHERE id IN (1, 2, 3).

我使用SQLAlchemy Core作为其连接池,并使一些带有多个VALUES子句的插入更容易编写和维护.我更喜欢在原始SQL中编写大部分查询.

要在Pyscopg2中这样做我做cursor.execute('SELECT .. WHERE IN %s', (tuple(my_list),)).但是,我无法在SQLAlchemy中完成这项工作.

engine.execute('SELECT ... WHERE IN %s', tuple(my_list))引发异常:TypeError:并非在字符串格式化期间转换所有参数.如果我只传递列表而不包含在元组中,则会引发同样的异常.

如果我使用命名参数,就像engine.execute('SELECT ... WHERE id IN :ids', ids=my_list)我得到一个ProgrammingError异常,因为SQLAlchemy创建了错误的SQL :( SELECT * FROM foo WHERE id IN :ids它不会替换我的变量的:ids值).如果我传递一个元组,则会引发同样的异常.

如何WHERE IN()在SQLAlchemy中使用原始SQL 的子句?

python sqlalchemy

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

使用带有psycopg2的try/except或"with closing"?

我在Python中使用Psycopg2来访问PostgreSQL数据库.我很好奇是否可以安全地使用with closing()模式来创建和使用游标,或者我应该使用显式try/except包装查询.我的问题是关于插入或更新,以及交易.

据我所知,所有Psycopg2查询都发生在一个事务中,并且由调用代码来提交或回滚事务.如果在with closing(...块内发生错误,是否发出回滚?在旧版本Psycopg2的,回滚被明确发出close(),但不是这种情况了(见http://initd.org/psycopg/docs/connection.html#connection.close).

通过一个例子,我的问题可能更有意义.这是一个使用的例子with closing(...

with closing(db.cursor()) as cursor:
     cursor.execute("""UPDATE users                    
             SET password = %s, salt = %s
             WHERE user_id = %s""",
             (pw_tuple[0], pw_tuple[1], user_id))
     module.rase_unexpected_error()
     cursor.commit()
Run Code Online (Sandbox Code Playgroud)

当module.raise_unexpected_error()引发错误时会发生什么?交易是否回滚?据我了解事务,我要么提交它们要么回滚它们.那么在这种情况下,会发生什么?

或者我可以这样写我的查询:

cursor = None
try:
    cursor = db.cursor()
    cursor.execute("""UPDATE users                    
            SET password = %s, salt = %s
            WHERE user_id = %s""",
            (pw_tuple[0], pw_tuple[1], user_id))
    module.rase_unexpected_error()
    cursor.commit()
except BaseException:
    if cursor is not None:
        cursor.rollback()
finally:
    if cursor is not None: …
Run Code Online (Sandbox Code Playgroud)

python postgresql psycopg2

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

使用SQLAlchemy更新PostgreSQL数组

我正在尝试使用SQLAlchemy Core中的SQL语句更新PostgreSQL表上的整数数组.我首先尝试使用查询生成器,但无法弄清楚如何做到这一点.我相信Psycopg2,我正在使用的方言,可以自动将数组形成PostgreSQL可以接受的格式.

这是表模式:

CREATE TABLE surveys (
    survey_id serial PRIMARY KEY,
    question_ids_ordered INTEGER[],
    created_at TIMESTAMP NOT NULL DEFAULT now(),
);
Run Code Online (Sandbox Code Playgroud)

和SQLAlchemy声明:

survey_id = 46
question_ids_ordered = [237, 238, 239, 240, 241, 242, 243]

with engine.begin() as conn:
    conn.execute("""UPDATE surveys
                    SET question_ids_ordered = %s
                    WHERE survey_id = %s""",
                    question_ids_ordered, survey_id)
Run Code Online (Sandbox Code Playgroud)

我收到的追溯是:

Traceback (most recent call last):
  File "foo.py", line 16, in <module>
    res = add_question_to_group(current_user, 46, 358, question_ids_ordered, new_group_name="Jellyfish?")
  File "/vagrant/workspace/panel/panel/survey.py", line 80, in add_question_to_group
    question_ids_ordered, survey_id)
  File "/home/vagrant/.virtualenvs/project/lib/python2.6/site-packages/sqlalchemy/engine/base.py", line 664, …
Run Code Online (Sandbox Code Playgroud)

python postgresql sqlalchemy

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

Pymongo游标限制(1)返回1个以上的结果

这些是我的收藏中的所有文件:

{
    "_id" : ObjectId("5110291e6ee1c31d5b275d01"),
    "d" : 24,
    "s" : [
        1,
        2,
        3
    ]
}
{
    "_id" : ObjectId("511029266ee1c31d5b275d02"),
    "d" : 24,
    "s" : [
        4,
        5,
        6
    ]
}
{
    "_id" : ObjectId("5110292e6ee1c31d5b275d03"),
    "d" : 24,
    "s" : [
        7,
        8
    ]
}
Run Code Online (Sandbox Code Playgroud)

这个我要运行的查询:

mongo = get_collection(self.collection_name)
res = mongo.find().sort([('_id', -1)]).skip(1).limit(1)
Run Code Online (Sandbox Code Playgroud)

get_collection()是我制作的辅助方法.迭代游标,res只生成一个文档:

res = mongo.find().sort([('_id', -1)]).skip(1).limit(1)
for document in res:
    print document

> {u's': [4.0, 5.0, 6.0], u'_id': ObjectId('511029266ee1c31d5b275d02'), u'd': 24.0}
Run Code Online (Sandbox Code Playgroud)

但是,使用偏移量访问res会为第0个和第1个元素返回两个不同的文档:

res = mongo.find().sort([('_id', …
Run Code Online (Sandbox Code Playgroud)

python mongodb pymongo

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

有条件地加入Jinja中的字符串列表

我有一个清单

users = ['tom', 'dick', 'harry']
Run Code Online (Sandbox Code Playgroud)

Jinja模板中,我想打印除tom加入之外的所有用户的列表.我无法在将变量传递给模板之前对其进行修改.

我尝试了列表理解,并使用Jinja的reject过滤器,但我无法让这些工作,例如

{{ [name for name in users if name != 'tom'] | join(', ') }}
Run Code Online (Sandbox Code Playgroud)

给出语法错误.

如何有条件地加入列表项?

python jinja2

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