小编lst*_*kov的帖子

grep:组捕获

我有以下字符串:

{"_id":"scheme_version","_rev":"4-cad1842a7646b4497066e09c3788e724","scheme_version":1234}
Run Code Online (Sandbox Code Playgroud)

我需要获得"scheme version"的值,在这个例子中是1234.

我试过了

grep -Eo "\"scheme_version\":(\w*)"
Run Code Online (Sandbox Code Playgroud)

然而它又回来了

"scheme_version":1234
Run Code Online (Sandbox Code Playgroud)

我该怎么做?我知道我可以添加sed调用,但我更愿意用单个grep来实现.

regex linux bash grep

51
推荐指数
5
解决办法
9万
查看次数

从"近期任务"中排除当前活动

我的应用程序在后台运行,在某些时候会显示活动以故意中断用户的流程.我的活动启动了一项新任务,该任务在前台时出现在"近期任务"列表中.有什么方法可以预防吗?设置android:excludeFromRecents不起作用 - 仅在暂停后,"近期任务"中不再显示活动.

清单看起来像:

<activity
    android:name="com.example.recenttasks.MainActivity"
    android:excludeFromRecents="true">
</activity>
Run Code Online (Sandbox Code Playgroud)

和活动以这种方式开始:

@Override
public void onReceive(Context context, Intent intent) {
    Intent i = new Intent(context, MainActivity.class);
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(i);
}
Run Code Online (Sandbox Code Playgroud)

android android-activity

21
推荐指数
2
解决办法
6873
查看次数

从UIColor预设中获取RGB值

我的应用程序我将RGB颜色值传递给服务器.我的应用程序使用UIColor预定义值,如[UIColor grayColor],[UIColor redColor].我知道我可以使用以下代码:

const CGFloat *c = CGColorGetComponents(color.CGColor)
Run Code Online (Sandbox Code Playgroud)

但是,仅适用于RBG色彩空间中的颜色,[UIColor grayColor]不是.

有没有办法获得非RBG颜色的RGB值?

谢谢!

iphone objective-c uicolor cgcolorspace

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

如何模拟getApplicationContext

我有一个存储应用程序上下文信息的应用程序 应用程序上下文信息在MyApp类中的活动之间共享,该类扩展了Application类.

我正在为我的活动编写单元测试,我想检查当用户单击活动中的按钮时,应用程序状态将发生变化.像这样的东西:

@Override
public void onClick(View pView) {
    ((MyApp)getApplicationContext()).setNewState();
}   
Run Code Online (Sandbox Code Playgroud)

问题是我不知道如何模拟该应用程序上下文.我使用ActivityUnitTestCase作为测试用例库.当我调用setApplication时,它会更改Activity类的mApplication成员的值,但不会更改应用程序上下文的值.我也尝试过setActivityContext,但它似乎不对(它不是应用程序上下文而是活动上下文)并且它在startActivity中触发断言).

所以问题是 - 如何模拟getApplicationContext()

java junit android unit-testing

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

带列表视图和消息的对话框

我需要创建包含ListView和消息的对话框,但是根据http://code.google.com/p/android/issues/detail?id=10948,使用标准AlertDialog是不可能的.所以我决定使用text和listview创建自定义视图,并将其附加到对话框.

但是,我的列表视图是空的.这是java代码:

    AlertDialog.Builder builder = new AlertDialog.Builder(this);

    builder.setTitle("Hello, title!");

    LayoutInflater factory = LayoutInflater.from(this);
    View content = factory.inflate(R.layout.dialog, null);

    ListView lv = (ListView) content.findViewById(R.id.list);
    lv.setAdapter(new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_single_choice, ITEMS));
    lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);

    builder.setView(content).setPositiveButton("OK", this).setNegativeButton("Cancel", this);

    AlertDialog alert = builder.create();
    alert.show();
Run Code Online (Sandbox Code Playgroud)

我也有:

    final String[] ITEMS = new String[] { "a", "b", "c" };
Run Code Online (Sandbox Code Playgroud)

这是对话框布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Hello, text!" />

    <ListView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/list"
    ></ListView>

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

结果如下: dialog_with_empty_list_view

任何帮助是极大的赞赏.谢谢!

android listview dialog android-alertdialog

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

任务状态和django-芹菜

我使用django-celery并且有这样的任务:

class TestTask(Task):
    name = "enabler.test_task"

    def run(self, **kw):
        debug_log("begin test task")
        time.sleep(5)
        debug_log("end test task")

    def on_success(self, retval, task_id, args, kwargs):
        debug_log("on success")

    def on_failure(self, retval, task_id, args, kwargs):
        debug_log("on failure")
Run Code Online (Sandbox Code Playgroud)

我使用django shell来运行任务:

python manage.py shell

r = tasks.TestTask().delay()
Run Code Online (Sandbox Code Playgroud)

从芹菜日志我看到任务执行:

[2012-01-16 08:13:29,362: INFO/MainProcess] Got task from broker: enabler.test_task[e2360811-d003-45bc-bbf8-c6fd5692c32c]
[2012-01-16 08:13:29,390: DEBUG/PoolWorker-3] begin test task
[2012-01-16 08:13:34,389: DEBUG/PoolWorker-3] end test task
[2012-01-16 08:13:34,390: DEBUG/PoolWorker-3] on success
[2012-01-16 08:13:34,390: INFO/MainProcess] Task enabler.test_task[e2360811-d003-45bc-bbf8-c6fd5692c32c] succeeded in 5.00004410744s: None
Run Code Online (Sandbox Code Playgroud)

然而,当我从地狱检查任务状态时,我总是得到PENDING:

>>> r = tasks.TestTask().delay() …
Run Code Online (Sandbox Code Playgroud)

python celery django-celery

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

为什么proguard处理AndroidManifest.xml

我看到一些原因不明的Proguard行为.

AFAIK proguard不关注android清单.另外,在我的proguard.cfg中,我没有提及BroadcastReceiver相关的类.所以我认为那些应该被删除.

但是我在bin/proguard.txt中看到了一些奇怪的东西:

# view AndroidManifest.xml #generated:784
-keep class com.fiksu.asotracking.InstallTracking { <init>(...); }
Run Code Online (Sandbox Code Playgroud)

并且该类(BroadcastReceiver的后代)不会被剥离.理性并没有对我说任何有意义的事:

[proguard] com.fiksu.asotracking.InstallTracking
[proguard]   is kept by a directive in the configuration.
Run Code Online (Sandbox Code Playgroud)

如果清单中没有提到类,它将被剥离.

很高兴知道为什么.

java optimization android proguard broadcastreceiver

9
推荐指数
1
解决办法
2779
查看次数

正则表达式和逃脱和未转义的分隔符

有关的问题

我有一个字符串

a\;b\\;c;d
Run Code Online (Sandbox Code Playgroud)

在Java中看起来像

String s = "a\\;b\\\\;c;d"
Run Code Online (Sandbox Code Playgroud)

我需要用分号按照以下规则拆分它:

  1. 如果分号前面有反斜杠,则不应将其视为分隔符(在ab之间).

  2. 如果反斜杠本身被转义,因此不会以分号方式转义,那么分号应该是分隔符(在bc之间).

因此,如果在它之前存在零或偶数个反斜杠,则应将分号视为分隔符.

例如上面,我想得到以下字符串(java编译器的双反斜杠):

a\;b\\
c
d
Run Code Online (Sandbox Code Playgroud)

java regex escaping backslash

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

批量添加多个联系人

我完全可以使用以下代码逐个添加联系人:

    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

    ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
            .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
            .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null).build());

    ops.add(ContentProviderOperation
            .newInsert(Data.CONTENT_URI)
            .withValueBackReference(Data.RAW_CONTACT_ID, 0)
            .withValue(Data.MIMETYPE,
                    CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
                    .withValue(StructuredName.GIVEN_NAME, "Hello")
                    .withValue(StructuredName.FAMILY_NAME, "World").build());

    try {
        getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
    } catch (RemoteException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (OperationApplicationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试逐个添加大约500个联系人时 - 它需要几分钟,这对我的应用来说太长了.是否有更快的方式添加多个联系人?

java android contacts android-contentprovider

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

可能的假阳性 - 铿锵静态分析器和正则表达式

一位同事通过clang静态分析仪发现了一个奇怪的警告(实际上来自clang-check).

这段代码:

#include <regex>

int main() {
    std::regex_match("jee", std::regex("lol"));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

产生分析仪警告:

 /usr/local/clang+llvm-3.9.0-x86_64-apple-darwin/bin/../include/c++/v1/regex:5724:17:
 warning: Called C++ object pointer is null
                 s.__node_->__exec_split(true, s);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 warning generated.
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

c++ regex clang clang-static-analyzer llvm-clang

6
推荐指数
0
解决办法
366
查看次数