小编Ada*_*m S的帖子

如何使用步骤执行Swift for-in循环?

通过在Swift 3.0中删除传统的C风格for循环,我该如何做到以下几点?

for (i = 1; i < max; i+=2) {
    // Do something
}
Run Code Online (Sandbox Code Playgroud)

在Python中,for-in控制流语句具有可选的步骤值:

for i in range(1, max, 2):
    # Do something
Run Code Online (Sandbox Code Playgroud)

但Swift范围运营商似乎没有相应的:

for i in 1..<max {
    // Do something
}
Run Code Online (Sandbox Code Playgroud)

swift

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

在RecyclerView的末尾添加空间

我有一个带有gridlayout的recyclerview.我想要的是当用户滚动到列表的末尾时(请参阅我的坏模型),应该有一个高度为50dp的空白空间,这与我的网格尺寸不同.

请注意,此空间仅在最末端可见,因为我不想更改布局.我可以这样做,以便recycerview的边距为50dp,但我不想这样做.

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

    <android.support.v7.widget.RecyclerView
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity"
        android:scrollbars="vertical"
        />

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

android android-layout android-gridlayout android-recyclerview

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

如何使用Android视图数据绑定格式化double?

假设我有一个Earthquake有字段的类public final double magnitude;,我的布局类似于这个:

<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable name="earthquake" type="com.example.Earthquake"/>
    </data>
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="48dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:text="@{String.format(earthquake.magnitude)}" />
        ...
    </LinearLayout>
</layout>
Run Code Online (Sandbox Code Playgroud)

注意我必须"@{String.format(earthquake.magnitude)}"使用此字段,否则我收到此错误:

在android.widget.TextView上找不到属性'android:text'的setter,参数类型为double.

不幸的是,这导致双重打印完全准确.如何格式化显示的double值?

android

13
推荐指数
1
解决办法
4824
查看次数

我可以将Swift默认参数值公开给Objective-C吗?

假设我有一些Swift类,其中包含我想要暴露给Objective-C的方法:

@objc(Worker) class Worker : NSObject {
    func performWork(label: String = "Regular Work") {
        // Perform work
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以用两种方式来称呼它:

Worker().performWork()
Worker().performWork("Swift Development")
Run Code Online (Sandbox Code Playgroud)

但是,当从Objective-C调用时,我没有得到此方法的"默认"版本 - 我必须提供一个标签:

[[[Worker alloc] init] performWork:@"Obj-C Development"];
Run Code Online (Sandbox Code Playgroud)

请参阅AppName-Swift.h下面的标题中的定义:

SWIFT_CLASS_NAMED("Worker")
@interface Worker : NSObject
- (void)performWork:(NSString * __nonnull)label;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end
Run Code Online (Sandbox Code Playgroud)

希望看到一个带有此签名的方法:

- (void)performWork;
Run Code Online (Sandbox Code Playgroud)

我意识到ObjC不支持默认参数值,但我的假设是Swift默认值只是生成额外的Swift函数,而简单的实现调用"真实"函数(即它们是语法糖,隐藏了我们用于的典型实现) OBJ-C).

有没有办法将此默认值公开给Objective-C?如果没有,任何人都可以向我指出任何文件,说明为什么这不可用?

objective-c swift

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

如何使用appendFormat格式化Swift中的字符串?

我想使用appendFormat将字符串附加到NSMutableString,插入空格以获得字符串的最小长度.

在objective-c中,我刚刚使用过

[text.mutableString appendFormat:@"%-12s", "MyString"];
Run Code Online (Sandbox Code Playgroud)

我会的

"MyString    "
Run Code Online (Sandbox Code Playgroud)

但在斯威夫特,我试过了

text.mutableString.appendFormat("%-12s", "MyString")
Run Code Online (Sandbox Code Playgroud)

我得到了一切,但不是"MyString".它似乎是一些随机字符,我不知道它来自哪里.

有没有人知道为什么会这样,我该怎么办?

感谢你们!

xcode nsmutablestring ios swift

9
推荐指数
2
解决办法
6427
查看次数

我是否应该更喜欢使用ContextCompat或PermissionChecker进行Android权限检查?

我可以选择以下任一方式检查我的应用是否具有给定的权限.

哪一个更受欢迎?

ContextCompat(来自support-compatlib):

ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE)
Run Code Online (Sandbox Code Playgroud)

或者PermissionChecker(来自support-core-utilslib):

PermissionChecker.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE)
Run Code Online (Sandbox Code Playgroud)

请注意(截至25.3.1)-core-utils取决于-compat:

| | +--- com.android.support:support-core-utils:25.3.1 | | | +--- com.android.support:support-annotations:25.3.1 | | | \--- com.android.support:support-compat:25.3.1 (*)

android android-support-library

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

我应该使用vnd.youtube:videoID吗?

在使用模拟器时,我注意到在尝试查看YouTube视频时,浏览器会出现错误消息,说明无法加载页面vnd.youtube:ngc978y6rCU?some=parameters.我没有Android设备,但我可以假设启动VIEW设置数据URI 的意图vnd.youtube:VIDEO_ID将启动默认的YouTube应用程序并观看该视频.

现在,我的应用程序必须能够显示YouTube视频.现在我有一个定制的YouTube活动就是这样,但我想:

  • 删除我的自定义活动,只是VIEWvnd.youtube:VIDEO_IDUri 启动一个意图,或
  • 测试是否Intent 可用并使用它,或者,如果它不可用,使用我的自定义活动.

这是一个好主意吗?这有用吗(正如我说我没有Android设备,我只是从朋友那里借一个来测试我的最终应用程序)?我该走哪条路?

android android-intent

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

无法在Android 4.4 KitKat上快速关闭ChunkedInputStream

我有一个Android Daydream,使用Twitter4j的流媒体实现显示一连串的推文.这适用于Android 4.2和4.3.但是在4.4上,我无法快速关闭流(in onDreamingStopped).

我得到这个堆栈跟踪,NetworkOnMainThreadException不是问题.

连接重用问题似乎与此问题有关.这个OkHttp变更集(在这里合并到Android中)改变了close行为方式ChunkedInputStream.如果还有更多数据需要读取,它现在会尝试丢弃流,而不是简单地将自己标记为"已关闭"然后断开套接字,以便能够快速重用套接字.如果它无法丢弃流,则会像以前一样断开套接字.

我现在得到a的原因NetworkOnMainThreadException是因为(从堆栈跟踪中看到)丢弃流现在尝试从流中读取.这很容易解决 - 我只是AsyncTask在关闭我的白日梦时放弃它并忘掉它.

问题是在超时集内没有丢弃流.查看HttpTransport#discardStream最新版本源的方法,它指定套接字上的100ms超时(原始提交指定30ms),然后尝试从stream(Util.skipAll)读取以清空缓冲区.但是我看到BufferedInputStream.read()呼叫周围有多秒钟的延迟.这种延迟的长度似乎有所不同.

这不是一个大问题 - 因为我现在必须从UI线程关闭此流,我不会导致onDreamingStopped调用需要很长时间才能返回(这导致白日梦停留在屏幕上很长时间按下/回家后的时间 - 我最初的错误报告导致我跟随这个兔子洞.但是,它确实会在关闭之后将此连接暂停一段时间.

我已经测试了使用两个不同活动级别的Twitter帐户关闭流所需的时间.第一个在我试图关闭流时没有看到任何活动,我一直看到通话大约需要30秒.第二个帐户有更多的活动,关闭流的时间在这个上更加多变 - 从1.5到30秒不等.当一条新的推文进入时,它会立即关闭(一个新的块被写入流中).

为什么我在关闭KitKat的流时遇到这种延迟?为什么它不尊重正在设置的100ms超时?

这类似于Android KitKat HttpURLConnection断开AsyncTask - 虽然这可能是FixedLengthInputStream在引擎盖下使用,但同样的更改已应用于close该类的方法.

java android okhttp

4
推荐指数
1
解决办法
1025
查看次数

如何使用 Android 6.0 备份恢复默认共享首选项?

我有各种各样的文件,我不想通过新的 Marshmallow Autobackup 功能进行备份- 一个领域数据库,一个我用来存储“最近看到”信息的共享首选项文件,日志文件等。

而不是使用<exclude ... />对于这些,我更愿意简单地备份的唯一文件我做的关心-用户设置,存储在默认的共享偏好。文档表明使用 an<include ... />将自动排除未明确包含的每个文件。

默认共享首选项文件使用什么路径?

<full-backup-content>
    <include domain="sharedpref" path="?"/>
</full-backup-content>
Run Code Online (Sandbox Code Playgroud)

android

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

如何防止Android通知覆盖自己?

我正在使用XMPP(smack)创建消息传递应用程序,每当收到新消息时我都会发送通知.问题是,如果我收到来自两个不同用户的消息,我只能看到最后一个通知.我该怎么改变它?这是我的代码.

Intent thisIntent = new Intent(mApplicationContext, ChatActivity.class);
thisIntent.putExtra("EXTRA_CONTACT_JID",contactJid);
PendingIntent contentIntent = PendingIntent.getActivity(mApplicationContext, 0, thisIntent, PendingIntent.FLAG_UPDATE_CURRENT);

NotificationCompat.Builder b = new NotificationCompat.Builder(mApplicationContext);

b.setAutoCancel(true)
        .setDefaults(Notification.DEFAULT_ALL)
        .setWhen(System.currentTimeMillis())
        .setSmallIcon(R.drawable.fab_bg_mini)
        .setTicker("Hearty365")
        .setContentTitle("New message")
        .setContentText(" You received a new message from " + contactJid)
        .setContentIntent(contentIntent)
        .setContentInfo("Info");
if(!ChatActivity.active){
    b.setDefaults(Notification.DEFAULT_LIGHTS| Notification.DEFAULT_SOUND);
}

NotificationManager notificationManager = (NotificationManager) mApplicationContext.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(1, b.build());
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我放了一个额外的contactJid,这对我来说非常重要.我需要设置它,如果用户点击一个通知,其contactJid将是这个,如果另一个,它的contactJid将是另一个.

android android-notifications

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

FileOpenPicker.PickSingleFileAsync永远不会返回

根据标题.我单击我的按钮,可以在调用线路上的断点处进入调试器openPicker.PickSingleFileAsync()- 但此调用永远不会返回.我可以选择一个文件,然后单击"打开",但我从未回到我的方法中来实际对该文件执行某些操作.这一切都在一个新的Windows Metro"空白应用程序"中,只有一个按钮和一个图像.

    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        OpenFile().Wait();
    }

    private async Task OpenFile()
    {
        FileOpenPicker openPicker = new FileOpenPicker();
        openPicker.ViewMode = PickerViewMode.Thumbnail;
        openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
        openPicker.FileTypeFilter.Add(".jpg");
        openPicker.FileTypeFilter.Add(".jpeg");
        openPicker.FileTypeFilter.Add(".png");

        // can break on following line
        var file = await openPicker.PickSingleFileAsync();

        // this line is never reached
        if (file != null)
        {
           // do stuff
        }
    }
Run Code Online (Sandbox Code Playgroud)

这是根据MSDN上的示例代码.当我使用PickMultipleFilesAsync时,我得到相同的结果.

我错过了一些明显的东西吗

.net async-await windows-8 visual-studio-2012

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

为什么我的SQL create语句导致我的应用程序崩溃?

错误信息:

android.database.sqlite.SQLiteException: near "transaction": syntax error (code 1): , while compiling: **create table transaction ( _id integer primary key autoincrement, amount real, type varchar(20), date integer)
Run Code Online (Sandbox Code Playgroud)

我的应用程序存储由自动生成的ID,花费的金额,付款类型和日期组成的货币交易.我的应用程序编译正常,但是当我尝试运行数据库是sqlite数据库的活动时,应用程序崩溃了上面的消息.至于我意识到我的SQL语句是有效的,任何人都可以提供任何可能是原因的洞察力吗?

Java代码:

 db.execSQL("create table transaction (" +
        " _id integer primary key autoincrement, amount real, type varchar(20), date integer)");
Run Code Online (Sandbox Code Playgroud)

谢谢

java sqlite android android-sqlite

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