2017-02-22 18 views
0

Am наследуя интерфейс, который называется ISurfaceTextureListener в этом кодеКак избежать превращения весь мой код на статические

class Camera 
{ 
    TextureView mTextureView; 
    Context _context; 
    public Camera (Context context, TextureView textureView) 
    { 
     _context = context; 
     mTextureView = textureView; 
     mTextureView.SurfaceTextureListener = new TextureViewListener(); 
    } 
    private class TextureViewListener : Java.Lang.Object, TextureView.ISurfaceTextureListener 
    { 
     public void OnSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) 
     { 
      OpenCamera(width, height); //Error Occurring Here 
     } 
    } 
    public void OpenCamera(int width, int height) 
    { 
     //Codes 
    } 
} 

Ошибка: ссылка на объект требуется для доступа к не-статического поля, метод и т.д ..

Я не хочу ставить OpenCamera(), потому что мне придется превратить весь мой код в статические методы, так есть ли способ избежать этого?

ПРИМЕЧАНИЕ: am только наследует интерфейс, потому что я не могу переопределить метод «OnSurfaceTextureAvailable» объекта Listener, единственный способ, которым я нашел, - назначить унаследованный класс для слушателя объекта, и он работал отлично.

+3

Где OpenCamera() живут? Можете ли вы включить этот код в сообщение? –

+1

вам нужно создать экземпляр класса, в котором принадлежит OpenCamera, а затем вызвать OpenCamera на этом объекте. –

+1

Эта ошибка является странной, если вы используете функцию экземпляра, поскольку вы отправили какой-либо нестатический член, который должен быть уже доступен, поскольку «это» предполагается, когда экземпляр явно не используется. Добавьте больше кода, чтобы понять, почему эта ошибка может произойти (как минимум, функция OpenCamera). – Gusman

ответ

3

Ошибка - это полная противоположность тому, что вы думаете. Это не намек на то, что вы должны статично ставить OpenCamera(); это намек на то, что вы пытаетесь получить к нему доступ, как если бы он был статичным, а на самом деле это не так.

Вам нужно someObjectIhaventToldYouAnythingAbout.OpenCamera(width, height);

EDIT

Итак, после того, как ваш комментарий и ваши изменения, где вы, по сути говорит нам о someObjectIhaventToldYouAnythingAbout, кажется, что вы должны делать это:

mTextureView.SurfaceTextureListener = new TextureViewListener(this); 
} 
private class TextureViewListener : Java.Lang.Object, TextureView.ISurfaceTextureListener 
{ 
    readonly Camera camera; 

    TextureViewListener(Camera camera) 
    { 
     this.camera = camera; 
    } 

    public void OnSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) 
    { 
     camera.OpenCamera(width, height); //Error Occurring Here 
    } 
} 
public void OpenCamera(int width, int height) 
{ 
    //Codes 
} 
+0

Спасибо за ваш ответ, когда я меняю OpenCamera() на статическую ошибку, в любом случае я добавил еще один код, это класс внутри класса, это перепутано? пожалуйста, просмотрите код –

+0

Ну, да, конечно, если вы сделаете OpenCamera() static, ошибка исчезнет, ​​но это то же самое, что сказать, что если вам не нравится татуировка на руке, вы можете порезать руку, и тогда татуировка исчезла, но это не очень хорошее решение, не так ли? Я изменил свой ответ, чтобы показать вам, что вы должны делать вместо этого. –

Смежные вопросы