我有一个活动,显示从服务器获取的一些数据.如果没有可用的连接,活动将显示一些缓存数据; 如果连接可用,则活动将获取数据并显示它.这一切都按预期工作.
现在,我想让我的活动在连接发生后立即重新加载数据.我正在使用一个扩展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声明为我的活动的私有类吗?或者还有其他解决方案吗?
我正在使用算法第4版来稍微改进我的图论.这些书附带了大量的图形处理代码.
目前,我遇到了以下问题:如何在无向图中找到所有周期?我想修改现有的循环检测代码来做到这一点.
这是重要的部分:
private void dfs(Graph G, int u, int v) {
marked[v] = true;
for (int w : G.adj(v)) {
// short circuit if cycle already found
if (cycle != null) return;
if (!marked[w]) {
edgeTo[w] = v;
dfs(G, v, w);
}
// check for cycle (but disregard reverse of edge leading to v)
else if (w != u) {
cycle = new Stack<Integer>();
for (int x = v; x != w; x = edgeTo[x]) …Run Code Online (Sandbox Code Playgroud) 正当我认为我终于理解了泛型时,我遇到了以下示例:
public class Organic<E> {
void react(E e) { }
static void main(String[] args) {
//1: Organic<? extends Organic> compound = new Aliphatic<Organic>();
//2: Organic<? super Aliphatic> compound = new Aliphatic<Organic>();
compound.react(new Organic());
compound.react(new Aliphatic());
compound.react(new Hexane());
} }
class Aliphatic<F> extends Organic<F> { }
class Hexane<G> extends Aliphatic<G> { }
Run Code Online (Sandbox Code Playgroud)
它说,如果第1行被取消注释,则以下内容将无法编译:
compound.react(new Organic());
compound.react(new Aliphatic());
compound.react(new Hexane());
Run Code Online (Sandbox Code Playgroud)
如果第2行是ucommented,则以下内容将无法编译:
compound.react(new Organic());
Run Code Online (Sandbox Code Playgroud)
在第二个例子中,允许脂肪族和它的超类型.那么为什么不允许脂肪族?
在第一个例子中,为什么new Organic不允许?
第一个编译错误:
- The method react(capture#1-of ? extends Organic) in the type Organic<capture#1-of ? extends …Run Code Online (Sandbox Code Playgroud) 我有RSA base64编码的公钥,我需要用来验证数字签名.我不明白如何使用公钥初始化RSA.
我的代码看起来像:
unsigned char *signature = ""; //signature string
char *original = ""; // my original string
unsigned char sha2HashDigest[SHA256_DIGEST_LENGTH];
SHA256(original, strlen(original), sha2HashDigest);
char *key = "base64encodedKey";
RSA *r = RSA_new();
//SET RSA public key?! how?
int result = RSA_verify(NID_sha256, sha2HashDigest, SHA256_DIGEST_LENGTH,
signature, strlen(signatrue), r);
if (result != 1) // handle error
Run Code Online (Sandbox Code Playgroud)
注意:我在iOS应用程序中执行此操作,但我认为这与此问题无关.
更新:我最终按照vond的建议使用EVP.公钥是PEM格式的文件.这是我的代码:
FILE *fp = fopen([keyFilePath UTF8String], "r");
if (!fp) return NO;
EVP_PKEY *pubKey = PEM_read_PUBKEY(fp,NULL,NULL,NULL);
EVP_MD_CTX md_ctx;
EVP_MD_CTX_init(&md_ctx);
EVP_VerifyInit(&md_ctx, EVP_sha256());
EVP_VerifyUpdate (&md_ctx, (unsigned char*)[msgData bytes], [msgData …Run Code Online (Sandbox Code Playgroud) 我已经定义了一个类POI.h:
@interface POI : NSObject
Run Code Online (Sandbox Code Playgroud)
这只是一个具有某些属性的简单类,定义如下:
- (NSString *) getValue:(NSString *)key;
Run Code Online (Sandbox Code Playgroud)
在我的控制器中,当我尝试记录该方法的调用时:
NSLog(@"Name: %@", [poi getValue:@"name"]);
Run Code Online (Sandbox Code Playgroud)
我明白了
Apple LLVM编译器4.2错误命令
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
失败,退出代码为254
基于以前的一些SO答案,我在尝试从void方法记录返回值时发现了错误254.所以我得出结论,我的编译器试图调用的方法实际上是
- (void)getValue:(void *)value;
Run Code Online (Sandbox Code Playgroud)
定义在NSValue.h,它是无效类型.
现在,我真的想了解为什么会发生这种情况.我的getValue方法的不正确和愚蠢的命名是唯一的原因吗?我怎么能避免呢?
实际错误消息:
LBSViewController.mm
- 解析器在文件的末尾
- 代码生成
- 在模块'/Users/myuser/Documents/workspace/project1/Classes/LBSViewController.mm'上运行'Function Pass Manager'.
- 在函数'
@"\01-[LBSViewController initializeLBS]"' 上运行'ARM指令选择'clang:错误:无法执行命令:分段错误:11
clang:错误:clang frontend命令因信号失败(使用-v查看调用)
Apple LLVM版本4.2(clang-425.0.27)(基于LLVM 3.2svn)
目标:arm-apple-darwin12.5.0
线程模型:posix
clang:注意:诊断消息:请向http://developer.apple.com/bugreporter/提交错误报告, 并包括崩溃回溯,预处理源和关联运行脚本.
clang:注意:诊断消息:
请将以下文件附加到BUG报告:
预处理的源和相关的运行脚本位于:
clang:注意:诊断消息:/var/folders/y_/h89vdcjj7zs8s5zjh77x4h0h0000gn/T/LBSViewController-A4zhXy.mm
clang :注意:诊断消息:/var/folders/y_/h89vdcjj7zs8s5zjh77x4h0h0000gn/T/LBSViewController-A4zhXy.sh
clang:注意:诊断消息:
在我为 OCJP 学习时,我遇到了以下问题:
class CardBoard {
Short story = 200;
CardBoard go(CardBoard cb) {
cb = null;
return cb;
}
public static void main(String[] args) {
CardBoard c1 = new CardBoard();
CardBoard c2 = new CardBoard();
CardBoard c3 = c1.go(c2);
c1 = null;
// do Stuff
}}
Run Code Online (Sandbox Code Playgroud)
当达到 //doStuff 时,有多少对象符合 GC 条件?
正确答案是2,意思c1和story对象。
当到达行 //doStuff 时,c3 也为空。为什么它也没有资格进行 GC?
我想获得范围为1 ... 2 ^ k-1的二进制表示的整数列表.或者,我需要一个k位的所有可能组合的列表.所以,例如,假设k是3,我需要:
001
010
011
100
101
110
111
Run Code Online (Sandbox Code Playgroud)
正如我计划在Java中这样做的时候,我正在考虑使用BitSet来表示每个数字,并将值存储在列表中,但我认为这个问题可能与语言无关.基本上,我需要弄清楚生成整个集合的算法.
我想我需要一个递归解决方案,这个方法会考虑先前设置的位.
void fill(int k, int i, boolean wasSet) {
if (i==k) return;
BitSet bs = new BitSet();
for (int j=0; j<k; j++) {
if (!wasSet) {
bs.set(i);
fill(k, i, true);
} else {
fill(k, j, false);
}
}
Run Code Online (Sandbox Code Playgroud)
注意:这个函数原型显然是非常错误的.
注意2:我真的很想避免使用字符串,因为我后来需要使用这个值来执行其他一些计算,BitSet非常方便
我需要从文件的绝对路径获取文件名(我知道该file.getName()方法,但我不能在这里使用它).
编辑:我不能使用file.getName()因为我不需要文件名; 我也需要文件路径的一部分(但同样,不是整个absoulte路径).在提供某个路径之后,我需要文件路径的一部分.
假设该文件位于文件夹中:
C:\Users\someUser
Run Code Online (Sandbox Code Playgroud)
在Windows机器上,如果我创建一个模式字符串如下:
String patternStr = "C:\\Users\\someUser\\(.*+)";
Run Code Online (Sandbox Code Playgroud)
我得到一个例外: java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence反斜杠.
如果我使用Pattern.quote(File.pathSeparator):
String patternStr = "C:" + Pattern.quote(File.separator) + "Users" + Pattern.quote(File.separator) + "someUser" + Pattern.quote(File.separator) + "(.*+)";
Run Code Online (Sandbox Code Playgroud)
生成的模式字符串是:C:\Q;\EUsers\Q;\EsomeUser\Q;\E(.*+)当然与实际fileName"C:\ Users\someUser\myFile.txt"不匹配.
我在这里错过了什么?解析文件名的正确方法是什么?
在我的iOS项目中,我的图像以@ 2x.png结尾,用于视网膜分辨率.我正在使用命令行svn.当我尝试添加image@2x.png到svn repo时,我这样做:
svn add image@2x.png
Run Code Online (Sandbox Code Playgroud)
然后我收到如下警告:
svn: warning: 'image' not found
Run Code Online (Sandbox Code Playgroud)
图像没有添加到subversion控件,我不能提交它."常规图像",即."image.png"很好.
我究竟做错了什么?怎么解决这个?