У меня есть некоторые проблемы с библиотекой java в Kotlin.
Я не могу найти способ доступа к элементам [L java .lang.Object I ' я пытаюсь привести его в массив или список; не могу найти никакой документации об этом.
Если кто-нибудь может дать мне голову. заранее спасибо
РЕДАКТИРОВАТЬ: некоторый код. Это класс java, который я реализую в kotlin, это API-интерфейс для подключения к Odoo, поэтому есть и другие библиотеки, включающие xmlrp c и другие классы API. Я постараюсь сделать это простым
public class Response {
private final boolean isSuccessful;
private final Exception errorCause;
private final Object responseObject;
private final Object[] responseObjectAsArray;
public Response(final Exception errorCause) {
this.isSuccessful = false;
this.errorCause = errorCause;
this.responseObject = null;
this.responseObjectAsArray = new Object[0];
}
public Response(final Object responseObject) {
this.isSuccessful = true;
this.errorCause = null;
this.responseObject = responseObject;
if (responseObject instanceof Object[]) {
this.responseObjectAsArray = (Object[]) responseObject;
} else {
this.responseObjectAsArray = new Object[]{responseObject};
}
}
public boolean isSuccessful() {
return isSuccessful;
}
public Throwable getErrorCause() {
return errorCause;
}
public Object getResponseObject() {
return responseObject;
}
public Object[] getResponseObjectAsArray() {
return responseObjectAsArray;
}
}
, вот функция из библиотеки
public RowCollection searchAndReadObject(final FilterCollection filter, final String[] fields, int offset, int limit, String order) throws XmlRpcException, OdooApiException {
String[] fieldArray = fields == null ? new String[]{} : fields;
Object[] preparedFilters = validateFilters(filter);
Response response = command.searchAndReadObject(modelName, preparedFilters,fieldArray,offset,limit,order);
FieldCollection fieldCol = new FieldCollection();
for (String fieldName : fieldArray) {
for (Field fld : allFields) {
if (fld.getName().equals(fieldName)) {
fieldCol.add(fld);
}
}
}
return new RowCollection(response.getResponseObjectAsArray(), fieldCol);
}
public RowCollection(Object [] openERPResultSet, FieldCollection fields) throws OdooApiException{
for (int i = 0; i < openERPResultSet.length; i++){
//aca tengo que chequear el objecto
Row row = new Row((HashMap<String, Object>) openERPResultSet[i], fields);
this.add(row);
}
}
и строка из набора строк
public Row (HashMap<String, Object> openERPResult, FieldCollection fields) throws OdooApiException{
this.openERPResult = openERPResult;
this.fields = fields;
// This is a new row, add entries for every field
if (openERPResult.isEmpty()){
this.put("id", 0);
for (int i = 0; i < fields.size(); i++)
this.put(fields.get(i).getName(),null);
}
}
Из команды searchAndReadObject
public Response searchAndReadObject(String objectName, Object[] filter, String[] fields, int offset, int limit, String order) throws XmlRpcException {
Response readResult;
Object offsetParam = offset < 0 ? false : offset;
Object limitParam = limit < 0 ? false : limit;
Object orderParam = order == null || order.length() == 0 ? false : order;
if (this.session.getServerVersion().getMajor() >= 8) {
readResult = new Response(session.executeCommandWithContext(objectName, "search_read", new Object[]{filter, fields,offsetParam,limitParam,orderParam}));
} else {
//TODO: Have to be rewritten/deleted considering the previous call
readResult = new Response(session.executeCommand(objectName, "search_read", new Object[]{filter, fields, session.getContext(),offsetParam,limitParam,orderParam}));
}
return readResult;
}
А это код в Kotlin, это простой доступ к записи:
object Constant{
const val URL :String= "localhost" //where im running Odoo 8
const val PORT: Int=8069
const val DB = "DataBase"
}
val sesion=Session(Constant.URL,Constant.PORT,Constant.DB,"admin","admin")
sesion.startSession()
val filter= FilterCollection()
filter.add("user_id","=",sesion!!.userID)
val clientAd=sesion!!.getObjectAdapter("res.partner")
val clients=clientAd.searchAndReadObject(filter, arrayOf("name", "city_id", "internal_code", "phone"),1,1,"id ASC")
проблема в том, когда я пытаюсь получить доступ к столбцу city_id
[
{
"internal_code": "1234",
"city_id": [ 21, "city name" ],
"id": 7,
"name": "Agrolait"
}]
клиентов [0] ["city_id"] является объектом []. Мне нужно получить доступ к элементам
clients[0]["city_id"]
res14: kotlin.Any! = [Ljava.lang.Object;@38f1f6c9
Я надеюсь, что это может прояснить мой вопрос