对于我的应用程序,我必须发送一封带有照片的邮件(我正在使用网络服务来做到这一点)。
我想知道是否有一些Android手机不能用相机生成jpg文件(例如png文件)。
我正在尝试学习Android NDK的基础知识,但是当我必须在c ++类中使用它时,我就陷入了困境.
我理解如何使用一个简单的函数,但我该怎么做才能操作c ++类的字段和方法?
我正在尝试使用这个简单的c ++类:
#include <cstdlib>
#include <jni.h>
using namespace std;
class Point {
int x, y; // coordonnées du point
public:
Point() {
this->x = 0;
this->y = 0;
}
Point(int x, int y) {
this->x = x;
this->y = y;
}
int getX() const {
return x;
}
int getY() const {
return y;
}
Point symetrique() const {
return Point(-x, -y);
}
bool operator ==(const Point &p) const {
return this->x == p.getX() && …Run Code Online (Sandbox Code Playgroud) 我有一个奇怪的错误,我无法找到它来自哪里.logcat中唯一出现的是:
01-10 17:07:10.665: A/libc(20449): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1)
当我运行我的应用程序时,我不会立即收到此错误,我会在一段随机时间(1分钟到5分钟之间)之后得到它.我无法重现这个错误,它似乎是随机的,因为没有其他信息,所以很难调试.我试图在我的库中添加一些日志信息,但我仍然不能说崩溃发生在哪里.
我运行相同的应用程序x次,我得到不同的SIGSEGV地址(有时它是与以前相同的地址:
01-10 17:29:04.650: A/libc(21588): Fatal signal 11 (SIGSEGV) at 0x6c707063 (code=1)
01-10 17:25:55.165: A/libc(21473): Fatal signal 11 (SIGSEGV) at 0x0069004c (code=1)
01-10 17:11:58.780: A/libc(20742): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1)
01-10 17:00:02.010: A/libc(20160): Fatal signal 11 (SIGSEGV) at 0x00000018 (code=1)
我的应用程序使用的c ++库具有从服务器接收更新的NetworkThread.在Java端有一个WorkerThread,检查是否有来自NetworkThread的新更新,如果有新的更新,它通知所有的监听器.我还有一个LocationSpotter(在Java端),在更新位置时进行一些JNI调用.
有没有办法调试这个或使用我从SIGSEGV获得的地址来调试应用程序?此外,我正在使用共享JavaVM对象来获取某些方法来检索当前的JNIEnv(并调用AttachCurrentThread).这个线程安全吗?
我注意到在收到SIGSEGV错误之后(在应用程序实际崩溃之前)我仍然收到来自NetworkThread的更新.这意味着NetworkThread可能正在运行.
我还注意到一行可能是我的问题的根源(在notifyAll方法中)因为在SIGSEGV之前打印的最后一条消息是"notifyAll1":
for (unsigned i = 0; i < listeners.size(); i++) {
try {
__android_log_print(ANDROID_LOG_INFO, "FROM C++", "notifyAll1");
if (listeners.at(i) == NULL)
__android_log_print(ANDROID_LOG_INFO, "FROM …Run Code Online (Sandbox Code Playgroud) 我在这个子喷气机上阅读了很多主题,但没有人能回答我的问题.
我从并发线程访问我的数据库,我的SQLiteOpenHelper实现了单例的设计模式,所以我的应用程序只有一个实例.
我使用以下代码访问我的数据库:
SQLiteDatabase db = DatabaseHelper.getInstance().getWritableDatabase();
...
Do some update in the DB
...
db.close();
Run Code Online (Sandbox Code Playgroud)
我不明白为什么我仍然得到"db already closed"错误,getWritableDatabase()方法是否应该锁定数据库,直到调用close()为止?来自其他线程的其他getWritableDatabase()调用应该等到db关闭?这是对的还是我错过了什么?