小编Zak*_*Mak的帖子

在Activity中调用第三方库的两次本机方法会导致Android应用程序关闭

我在我的应用程序中集成了两个本机库(.so).库编译得很好,我也可以在我的应用程序中加载它们.我第一次调用库的本机方法时工作正常,但如果我在Activity中再次调用相同的方法,应用程序将关闭.

我面临的问题与此处提到的完全相同:http:
//grokbase.com/t/gg/android-ndk/1226m68ydm/app-exit-on-second-native-call

可行的解决方案是在另一个Activity中调用本机方法,并通过System.exit(0)强制关闭它.在文章之后,我尝试在成功操作后将指针设置为NULL,但这也没有帮助我.一旦由System.loadLibrary()加载库,也无法卸载它.

我想在不创建新Activity的情况下多次调用本机方法.任何想法如何解决这个问题?

(我最终找到了一个解决方案......就在这里)

好的,我终于找到了解决这个问题的方法.解决方案实际上非常简单.构建另一个独立的本机库(实用程序库)来加载和卸载其他库.我们需要做的是在实用程序的本机方法中使用dlopen()和dlclose().我们可以通过System.loadLibrary()像以前一样加载实用程序库.

因此,在实用程序库的本机方法中,我们需要做的是:

使用#include <dlfcn.h>//这是调用dlopen()和dlclose()函数所必需的.

提供处理程序和函数原型:

void *handle;
typedef int (*func)(int); // define function prototype
func myFunctionName; // some name for the function
Run Code Online (Sandbox Code Playgroud)

通过dlopen()打开库:

handle = dlopen("/data/data/my.package.com/lib/somelibrary.so", RTLD_LAZY);
Run Code Online (Sandbox Code Playgroud)

获取并调用库的功能:

myFunctionName = (func)dlsym(handle, "actualFunctionNameInLibrary");
myFunctionName(1); // passing parameters if needed in the call
Run Code Online (Sandbox Code Playgroud)

现在呼叫完成了.通过dlclose()关闭它:

dlclose(handle);
Run Code Online (Sandbox Code Playgroud)

希望这将有助于其他人面临同样的问题.

java-native-interface android android-ndk

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

网络服务发现Android

我正在构建一个使用网络服务发现的应用程序.我已经跟进了这篇文章http://developer.android.com/training/connect-devices-wirelessly/nsd-wifi-direct.html,该应用程序正在运行,但我有几个问题基于下面显示的代码.

WifiP2pDnsSdServiceInfo.newInstance("_ test","_ presence._tcp",record);

似乎记录不能容纳太多数据.例如,如果记录大小为20,则不调度信息.你能告诉我尺寸限制吗?我可以发送多少数据?

我不清楚_ presence._tcp等可用的服务类型.它是供应商特定的吗?支持的服务类型列表将很高兴知道.服务类型是否决定了我可以发送的信息量?如果是这样,哪种服务类型更适合发送大小合适的地图.

更新:我已经在http://files.dns-sd.org/draft-cheshire-dnsext-dns-sd.txt查看了该草案,请参阅6.2 DNS-SD TXT记录大小.看起来大小限制很小,如"所说的典型DNS-SD TXT记录的总大小 - 200字节或更少.在更多数据合理的情况下(例如LPR打印[BJP]),将总大小保持在400字节以下应该允许它适合单个512字节的DNS消息".有什么想法吗?

android service-discovery

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

导航到另一个页面时如何显示 Primefaces 确认对话框?

当用户尝试离开页面时,我试图显示 Primefaces 确认对话框。当前页面可能有一些未保存的数据,因此在离开页面之前询问用户是否要保存它们的对话框。

目前,当用户点击离开页面时,我可以只显示确认对话框,如下所示:

function onBeforeUnload_Handler(){
 confirmation.show(); // confirmation is the "widgetVar" value of p:confirmDialog
} 

window.onbeforeunload = onBeforeUnload_Handler;
Run Code Online (Sandbox Code Playgroud)

然而,问题是在显示对话框时,它会导航到另一个页面,而无需等待用户的响应。我希望当前页面等待用户响应并执行“保存”或“不保存”等操作,然后导航离开。

我尝试在“confirmation.show()”之后添加“return false”,但这会导致浏览器警告框弹出。

(Primefaces 3.0.M1)

非常感谢

javascript primefaces

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

将授权的curl -u post请求与JSON数据转换为RestTemplate等效项

我正在使用 github api 使用curl 命令创建存储库,如下所示,它工作正常。

curl -i -u "username:password" -d '{ "name": "TestSystem", "auto_init": true, "private": true, "gitignore_template": "nanoc" }' https://github.host.com/api/v3/orgs/Tester/repos
Run Code Online (Sandbox Code Playgroud)

现在我需要执行上面相同的 url,HttpClient并且我正在我的项目中使用RestTemplate

我以前工作过RestTemplate,我知道如何执行简单的 url,但不知道如何使用RestTemplate-将上述 JSON 数据发布到我的 url

RestTemplate restTemplate = new RestTemplate();

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);

// Create a multimap to hold the named parameters
MultiValueMap<String, String> parameters = new LinkedMultiValueMap<String, String>();
parameters.add("username", username);
parameters.add("password", password);

// Create the http entity for the request
HttpEntity<MultiValueMap<String, String>> entity =
            new …
Run Code Online (Sandbox Code Playgroud)

java git post curl resttemplate

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