поэтому у меня есть CanvasView, который показывает отладочную информацию моего приложения. Это в основном наложенный вид с прозрачным фоном, поэтому все нарисованное на холсте плавает на экране. Поскольку мне нужна некоторая информация из нативного c ++, которая возвращает wchar_t *, как я могу использовать env->NewString
, поскольку android теперь делает wchar_t равным 4 байта, а jchar - 2 байта?
Мой java код, который вызывает нативный Функция c ++ в моей библиотеке:
private static String get_Name();
private class CanvasView extends View{
public CanvasView(Context context){
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paintText = new Paint();
paintText.setStyle(Paint.Style.FILL);
paintText.setColor(Color.WHITE);
paintText.setShadowLayer(5.5f, 0, 0, Color.BLACK);
paintText.setTextSize(convertSizeToDp(7.5f));
paintText.setTextAlign(Paint.Align.LEFT);
paintText.drawText(get_Name(), x, y, paintText);
// the rest of the code
// ...
}
}
get_Name
в основном возвращает строку jstring, полученную из NewString((const jchar* )myWchar, myLen)
Возвращаемые результаты иногда не являются строкой Unicode, или даже мое приложение аварийно завершает работу, когда NewString
называется.