我在我的应用程序中集成了两个本机库(.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)
希望这将有助于其他人面临同样的问题.
我正在构建一个使用网络服务发现的应用程序.我已经跟进了这篇文章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消息".有什么想法吗?
当用户尝试离开页面时,我试图显示 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)
非常感谢
我正在使用 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) android ×2
android-ndk ×1
curl ×1
git ×1
java ×1
javascript ×1
post ×1
primefaces ×1
resttemplate ×1