2015-11-03 2 views
-4

Итак, я нашел много примеров по этой проблеме, но метод исправления, похоже, отличается. Поэтому я ищу решение моей конкретной проблемы.Метод Java - отсутствующий оператор возврата

Вот мой код:

package com.example.frederik.snapsule; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

import com.facebook.CallbackManager; 
import com.facebook.FacebookCallback; 
import com.facebook.FacebookException; 
import com.facebook.FacebookSdk; 
import com.facebook.login.LoginResult; 
import com.facebook.login.widget.LoginButton; 

public class MainActivity extends Activity { 

    LoginButton login; 
    TextView info; 
    CallbackManager callbackManager; 

    //Creating and initializing the feature(Code from Facebook install guide) 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     FacebookSdk.sdkInitialize(getApplicationContext()); //Calls for the facebook feature 
    } 

    @Override 
    public View onCreateView(
      LayoutInflater inflater, 
      ViewGroup container, 
      Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.content_main, container, false); 

     login = (LoginButton) view.findViewById(R.id.login_button); 
     login.setReadPermissions("user_friends"); 

     // Callback registration 
     login.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
      @Override 
      public void onSuccess(LoginResult loginResult) { 
       // App code 
      } 

      @Override 
      public void onCancel() { 
       // App code 
      } 

      @Override 
      public void onError(FacebookException exception) { 
       // App code 
      } 
     }); 
    } 
} 

На второй последний «}» Я получаю ошибку «Отсутствует оператор возврата», но на моих глазах это кажется правильным.

ответ

4

OncreateView имеет тип возвращаемого View, поэтому вы должны вернуть вид, который прилагается к деятельности.

Если вы переопределяете метод onCreate, вам может не потребоваться переопределить метод OnCreateView. в onCreate способ можно использовать setContentView(R.layout.content_main).

@Override 
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.content_main, container, false); 

    login = (LoginButton) view.findViewById(R.id.login_button); 
    login.setReadPermissions("user_friends"); 

    // Callback registration 
    login.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      // App code 
     } 

     @Override 
     public void onCancel() { 
      // App code 
     } 

     @Override 
     public void onError(FacebookException exception) { 
      // App code 
     } 
    }); 
    /** 
    *return view 
    */ 
    return view; 
} 
+0

На самом деле получение «onCreateView» никогда не используется, поэтому у меня, похоже, есть проблема – KrownScripter

+0

Это действительно плохой совет! Прежде всего 'onCreate' и' onCreateView' делают совсем другие вещи, а также 'setContentView' недоступен в фрагментах. –

+0

@ThorstenDittmar, пожалуйста, проверьте код, это активность, насколько я вижу. –

1

Метод исправления этой ошибки всегда одинаков: ошибка возникает, когда метод имеет тип возвращаемого значения, а не все пути кода возвращают значение этого типа. Предполагается, что метод onCreateView должен вернуть View, что в вашем случае это не так. Вы раздувая вид в view переменная, но вы никогда return это значение.

Изменить код на:

@Override 
public View onCreateView(
     LayoutInflater inflater, 
     ViewGroup container, 
     Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.content_main, container, false); 

    login = (LoginButton) view.findViewById(R.id.login_button); 
    login.setReadPermissions("user_friends"); 

    // Callback registration 
    login.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      // App code 
     } 

     @Override 
     public void onCancel() { 
      // App code 
     } 

     @Override 
     public void onError(FacebookException exception) { 
      // App code 
     } 
    }); 

    return view; // <<< THIS IS IT 
} 
+0

Это сработало! Просто быстрый побочный вопрос, @Override выше onCreateView дает мне «метод не отменяет его суперкласс». Могу ли я просто удалить это, или это приведет к тому, что эта часть кода не будет запущена? – KrownScripter

+0

@Stenberg, аннотация '@ Override' не имеет никакого эффекта. Он используется, чтобы гарантировать, что вы переопределяете метод суперкласса или реализуете метод интерфейса. Если вы определяете новый метод с аннотацией переопределения на нем, вы получите ошибку времени компиляции. Рекомендуется использовать аннотацию, чтобы избежать некоторых ошибок, когда вы переопределяете методы, но вы можете безопасно удалить аннотацию, если хотите. –

+0

Обычно ошибка, которую вы видите, возникает, когда вы «переопределяете» метод, который не является частью суперкласса. Много раз это происходит, когда вы неправильно произносите имя метода (обсадку). –

0

Добавить оператор возврата, как указано ниже:

@Override 
public View onCreateView(
     LayoutInflater inflater, 
     ViewGroup container, 
     Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.content_main, container, false); 

    login = (LoginButton) view.findViewById(R.id.login_button); 
    login.setReadPermissions("user_friends"); 

    // Callback registration 
    login.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      // App code 
     } 

     @Override 
     public void onCancel() { 
      // App code 
     } 

     @Override 
     public void onError(FacebookException exception) { 
      // App code 
     } 
    }); 
    return view;//view must be returned from this method 
} 
1

На первый Добавьте это return view;

@Override 
     public void onError(FacebookException exception) { 
      // App code 
     } 
    }); 
    return view;//Add this 
} 

Где setContentView?

http://developer.android.com/intl/es/reference/android/app/Activity.html#setContentView(android.view.View)

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.your_layout); 
     FacebookSdk.sdkInitialize(getApplicationContext()); //Calls for the facebook feature 
    } 
Смежные вопросы