Помощь с ошибкой 1061 - вызов возможно неопределенного метода - PullRequest
0 голосов
/ 04 августа 2011

Во-первых, вот точная ошибка, которую я получаю:

Error 1061: Call to a possibly undefined method _initRemoteClassAlias through a reference with a static type Class

Итак, как говорится, вот что, я думаю, я знаю об этом. Он вызывает метод с именем _initRemoteClassAlias, но не может его найти. Итак, вот мое предположение, где возникает путаница / проблема. Метод, который он пытается вызвать, был автоматически создан FlashBuilder в классе _Super PHP-скрипта, который я написал. (в этом случае ошибка возникает из-за: services.cascobackend._Super_CASCOBackend.as) - Вот первый маленький кусочек кода из рассматриваемого класса _Super:

package services.cascobackend
{
import com.adobe.fiber.core.model_internal;
import com.adobe.fiber.services.wrapper.RemoteObjectServiceWrapper;
import com.adobe.serializers.utility.TypeUtility;
import mx.rpc.AbstractOperation;
import mx.rpc.AsyncToken;
import mx.rpc.remoting.Operation;
import mx.rpc.remoting.RemoteObject;
import valueObjects.Ticket;

import mx.collections.ItemResponder;
import com.adobe.fiber.valueobjects.AvailablePropertyIterator;

[ExcludeClass]
internal class _Super_CASCOBackend extends com.adobe.fiber.services.wrapper.RemoteObjectServiceWrapper
{

// Constructor
public function _Super_CASCOBackend()
{
    // initialize service control
    _serviceControl = new mx.rpc.remoting.RemoteObject();

    // initialize RemoteClass alias for all entities returned by functions of this service
    valueObjects.Ticket._initRemoteClassAlias();

    var operations:Object = new Object();
    var operation:mx.rpc.remoting.Operation;

    operation = new mx.rpc.remoting.Operation(null, "throwExceptionOnError");
     operation.resultType = Object;
    operations["throwExceptionOnError"] = operation;
    operation = new mx.rpc.remoting.Operation(null, "getTicketsByUser");
     operation.resultElementType = valueObjects.Ticket;
    operations["getTicketsByUser"] = operation;

    _serviceControl.operations = operations;
    _serviceControl.convertResultHandler = com.adobe.serializers.utility.TypeUtility.convertResultHandler;
    _serviceControl.source = "CASCOBackend";
    _serviceControl.endpoint = "http://localhost/CMphp/public/gateway.php";


     preInitializeService();
     model_internal::initialize();
}

И конкретная строка, в которой происходит ошибка:

valueObjects.Ticket._initRemoteClassAlias();

В приложении я создал (очевидно) объект значения с именем Ticket, который выглядит следующим образом:

package valueObjects
{
[Bindable]
[RemoteClass(alias="Ticket")]

public class Ticket
{
        public var ticketid:int;
        public var ticketNumber:String;
etc...
etc...

Функция PHP, на которую она ссылается, просто захватывает все элементы с определенными параметрами и возвращает массив Ticket [] с результатами в виде отдельных элементов Ticket, например:

...
        mysqli_stmt_execute($stmt);
    $this->throwExceptionOnError();

    $rows = array();
    $row = new Ticket();

    mysqli_bind_result($stmt, $row->ticketid, etc...

Также - когда я запускаю тест этой функции во FlashBuilder, он возвращает элементы так, как я ожидал, даже с ошибкой, связанной с отображением _initRemoteClassAlias. И если я просто закомментирую эту строку, то код просто ничего не возвращает при запуске (хотя все равно возвращает значения при тестировании в FB)

Итак - я перепутал это в течение ЧАСОВ и искал ответы, но у меня нет идей. Надеюсь, у вас есть немного!

Заранее спасибо за помощь! -CS

EDIT ::: РЕДАКТИРОВАТЬ :::

Хорошо, вот полный код _Super, созданный Flex:

    /**
 * This is a generated class and is not intended for modification.  To customize  behavior
 * of this service wrapper you may modify the generated sub-class of this class - CASCOBackend.as.
 */
 package services.cascobackend
 {
 import com.adobe.fiber.core.model_internal;
 import com.adobe.fiber.services.wrapper.RemoteObjectServiceWrapper;
 import com.adobe.serializers.utility.TypeUtility;
 import mx.rpc.AbstractOperation;
 import mx.rpc.AsyncToken;
 import mx.rpc.remoting.Operation;
 import mx.rpc.remoting.RemoteObject;
 import valueObjects.Ticket;

 import mx.collections.ItemResponder;
 import com.adobe.fiber.valueobjects.AvailablePropertyIterator;

 [ExcludeClass]
 internal class _Super_CASCOBackend extends                com.adobe.fiber.services.wrapper.RemoteObjectServiceWrapper
 {

     // Constructor
     public function _Super_CASCOBackend()
     {
    // initialize service control
    _serviceControl = new mx.rpc.remoting.RemoteObject();

    // initialize RemoteClass alias for all entities returned by functions of this service
    valueObjects.Ticket._initRemoteClassAlias();

    var operations:Object = new Object();
    var operation:mx.rpc.remoting.Operation;

    operation = new mx.rpc.remoting.Operation(null, "throwExceptionOnError");
     operation.resultType = Object;
    operations["throwExceptionOnError"] = operation;
    operation = new mx.rpc.remoting.Operation(null, "getTicketsByUser");
     operation.resultElementType = valueObjects.Ticket;
    operations["getTicketsByUser"] = operation;

    _serviceControl.operations = operations;
    _serviceControl.convertResultHandler = com.adobe.serializers.utility.TypeUtility.convertResultHandler;
    _serviceControl.source = "CASCOBackend";
    _serviceControl.endpoint = "http://localhost/CMphp/public/gateway.php";


     preInitializeService();
     model_internal::initialize();
}

//init initialization routine here, child class to override
protected function preInitializeService():void
{
    destination = "CASCOBackend";

}


/**
  * This method is a generated wrapper used to call the 'throwExceptionOnError' operation. It returns an mx.rpc.AsyncToken whose 
  * result property will be populated with the result of the operation when the server response is received. 
  * To use this result from MXML code, define a CallResponder component and assign its token property to this method's return value. 
  * You can then bind to CallResponder.lastResult or listen for the CallResponder.result or fault events.
  *
  * @see mx.rpc.AsyncToken
  * @see mx.rpc.CallResponder 
  *
  * @return an mx.rpc.AsyncToken whose result property will be populated with the result of the operation when the server response is received.
  */
public function throwExceptionOnError(link:Object) : mx.rpc.AsyncToken
{
    var _internal_operation:mx.rpc.AbstractOperation = _serviceControl.getOperation("throwExceptionOnError");
    var _internal_token:mx.rpc.AsyncToken = _internal_operation.send(link) ;
    return _internal_token;
}

/**
  * This method is a generated wrapper used to call the 'getTicketsByUser' operation. It returns an mx.rpc.AsyncToken whose 
  * result property will be populated with the result of the operation when the server response is received. 
  * To use this result from MXML code, define a CallResponder component and assign its token property to this method's return value. 
  * You can then bind to CallResponder.lastResult or listen for the CallResponder.result or fault events.
  *
  * @see mx.rpc.AsyncToken
  * @see mx.rpc.CallResponder 
  *
  * @return an mx.rpc.AsyncToken whose result property will be populated with the result of the operation when the server response is received.
  */
public function getTicketsByUser(userid:Object) : mx.rpc.AsyncToken
{
    var _internal_operation:mx.rpc.AbstractOperation = _serviceControl.getOperation("getTicketsByUser");
    var _internal_token:mx.rpc.AsyncToken = _internal_operation.send(userid) ;
    return _internal_token;
    }

}

}

1 Ответ

1 голос
/ 04 августа 2011

Достаточно просто, _initRemoteClassAlias() не является частью Ticket или что это не static public.

Я не знаю, кто создал код, но он не соответствует никаким стандартам, которые я вижу.

...