我想测试我的应用程序的低网络连接情况.除了站在电梯里,最好的办法是什么?我试过用铝箔包裹我的手机,但它没有多大帮助.
我需要在真实设备上测试它,而不是在模拟器中测试它.
我在一个xml布局中找到了以下属性:
android:background="@null"
Run Code Online (Sandbox Code Playgroud)
是什么意思@null?指定background ="@ null"和省略背景属性有什么区别?
如何创建一个始终指向原始文件夹两级的相对符号链接?我想创建一个可以在任何机器上运行的独立于计算机的别名,前提是原始文件夹存在两个级别.
基本上,我想要的是这样的:
|-- Original
|-- folder 1
|-- folder 2
|-- Original alias
Run Code Online (Sandbox Code Playgroud)
我需要这个用于我的XCode项目结构.我试过了:
ln -s Original /../../Original
Run Code Online (Sandbox Code Playgroud)
但它会创建一个找不到其原始文件夹的别名.
int在C中传输套接字的适当方法是什么?
到目前为止我所做的是:
int n = 4;
int tmp = htonl(n);
write(socket, &tmp, sizeof(tmp));
Run Code Online (Sandbox Code Playgroud)
和
int tmp,n;
read(socket, &tmp, sizeof(tmp));
n = ntohl(tmp);
Run Code Online (Sandbox Code Playgroud)
但是,收到的整数有时为0.并非总是如此,而是说5次中的2次.它永远不会是其他值,为什么?
更新:读取的返回值为-1,错误为:
Resource temporarily unavailable
Run Code Online (Sandbox Code Playgroud) 对于我的iOS项目,我有一个特定的文件夹结构:
|-- root
| |-- src
| | |-- xcode
| | |-- MyProject
| | |-- <sources>, ...
| | |-- MyProject.xcodeproj
|-- library
Run Code Online (Sandbox Code Playgroud)
在构建设置中,我想添加指向"库"的库搜索路径,它与"根"目录位于同一级别.当我把$(SRCROOT),搜索路径正确指向root/src/xcode目录.但是,我不知道如何在项目的src"上方"查找库两个文件夹.
我试过"../../$(SRCROOT)",但没有效果.
它甚至可能吗?
我正在使用CorePlot来绘制一组数据.我的x轴的数据由日期组成,而我的y轴的数据由浮点数组成(然后我将其转换为NSNumber).我从Feed中获取数据,并且Feed返回具有大量小数的数字,例如:0.46673718852844,4.59392222219,353.1293012045.我正在使用以下代码来正确格式化y轴:
NSNumberFormatter *numberFormatter = [[[NSNumberFormatter alloc] init] autorelease];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[numberFormatter setMaximumFractionDigits:3];
[numberFormatter setPositiveFormat:@"###0.000"];
CPTXYAxis *y = axisSet.yAxis;
y.labelingPolicy = CPTAxisLabelingPolicyAutomatic;
y.minorTicksPerInterval = 1;
y.preferredNumberOfMajorTicks = 5;
y.labelFormatter = numberFormatter;
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,一切正常.但是,有时它会沿轴的多个位置显示相同的值.见下图:

值正确显示,我只想避免不必要的(0.466)标签.我甚至尝试将数字四舍五入到numberForPlot方法中:
if(fieldEnum == CPTScatterPlotFieldY)
{
float floatNum = r.value;
floatNum *= 1000;
int intValue = (int) floatNum;
float decimal = floatNum - intValue;
if (decimal > 0.5) {
intValue++;
}
floatNum = intValue /1000.0;
return [NSNumber numberWithFloat:floatNum];
}
Run Code Online (Sandbox Code Playgroud)
但标签没有区别.
我使用openssl获取有关x509证书的数据.有没有办法将ASN1_INTEGER转换为ASN1_STRING,这可以很容易地转换为char数组?有没有办法将其转换为任何其他人类可读的格式?
编辑:我正在使用为iOS编译的openssl,因为我正在使用iOS项目.这是我用来从证书中提取序列号的代码:
ASN1_INTEGER *serial = X509_get_serialNumber(certificateX509);
long value = ASN1_INTEGER_get(serial);
NSLog(@"Serial %ld", value);
Run Code Online (Sandbox Code Playgroud)
certificateX509 是一个有效的X509对象,我已设法从它获得一些其他字段(发行人名称,到期日期等)
编辑2:
我终于找到了一个解决方案,这可能不是最简单的解决方案:
ASN1_INTEGER *serial = X509_get_serialNumber(certificateX509);
BIGNUM *bnser = ASN1_INTEGER_to_BN(serial, NULL);
int n = BN_num_bytes(bnser);
unsigned char outbuf[n];
int bin = BN_bn2bin(bnser, outbuf);
char *hexbuf = (char*) outbuf;
Run Code Online (Sandbox Code Playgroud)
然后,hexBuf包含其值需要读取为十六进制整数的字符,以便检索逻辑值.我使用NSMutableString来创建一个人类可读的字符串:
NSMutableString *str = [[NSMutableString alloc] init];
for (int i=0; i<n; i++) {
NSString *temp = [NSString stringWithFormat:@"%.6x", hexbuf[i]];
[str appendString:[NSString stringWithFormat:@"%@ ", temp]];
}
Run Code Online (Sandbox Code Playgroud)
如果有一种更简单的方法,我真的很想知道它.
第三方应用程序可以访问iPhone的钥匙串以便添加X509证书吗?如果是,怎么办?
如果没有,它可以访问钥匙串只是为了从中读取证书吗?
基本上,我需要的是:
1)我的应用程序需要访问https站点,该站点使用未由任何可信CA签名的证书.当尝试通过https连接时,我得到一个例外.
2)如果我能以编程方式将根证书添加到钥匙串中,那就太棒了; 如果用户可以通过Safari访问该站点,接受其证书,然后使用我的应用程序访问该站点就足够了.
到目前为止,我一直在使用以下界面来超越https:
@interface NSURLRequest (DummyInterface)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString*)host;
+ (void)setAllowsAnyHTTPSCertificate:(BOOL)allow forHost:(NSString*)host;
@end
Run Code Online (Sandbox Code Playgroud)
但这不是我想要的.
有什么建议?
我一直在学习的OCJP(原SCJP)和我碰到下面的例子,它使用LinkedHashSet传来:
public class Test{
int size;
public Test(int s){
this.size = s;
}
@Override
public boolean equals(Object obj) {
return (this.size == ((Test)obj).size);
}
public static void main(String[] args) {
LinkedHashSet<Test> s = new LinkedHashSet<Test>();
s.add(new Test(1));
s.add(new Test(2));
s.add(new Test(1));
System.out.println(s.size());
}
}
Run Code Online (Sandbox Code Playgroud)
现在,是什么是显示的问题,如果:
1)实现保持如
2)的hashCode覆盖插入类测试,如下所示:
public int hashCode() {return size/5};
Run Code Online (Sandbox Code Playgroud)
运行和编译代码表明第一种情况下set的大小是3,而在第二种情况下它是2.为什么?
在情况1中,虽然equals方法被覆盖,但它永远不会被调用.这是否意味着如果不覆盖hashCode方法,add()方法不会检查对象是否相等?
在情况2中,具有给定实现的hashCode和给定的Test对象集始终返回相同的数字.这与默认的hashCode实现有什么不同,为什么它会导致equals被调用?
我有一个活动,显示从服务器获取的一些数据.如果没有可用的连接,活动将显示一些缓存数据; 如果连接可用,则活动将获取数据并显示它.这一切都按预期工作.
现在,我想让我的活动在连接发生后立即重新加载数据.我正在使用一个扩展BroadcastReceiver的简单Receiver:
public class ConnectionChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
if (activeNetInfo != null) {
//what to do here?
}
}
}
Run Code Online (Sandbox Code Playgroud)
广播接收器在我的清单文件中声明如下:
<receiver android:name=".ConnectionChangeReceiver"
android:label="NetworkConnection">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
在我的活动中,我注册了接收器:
ConnectionChangeReceiver receiver = new ConnectionChangeReceiver(); this.registerReceiver(接收者,新的IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
现在,我很困惑,接下来要做什么.当执行onReceive方法时,如何让我的活动意识到这一点?我知道我可以开始一项新活动,但这不是我想要的.我应该将ConnectionChangeReceiver声明为我的活动的私有类吗?或者还有其他解决方案吗?