2015-11-03 165 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 
      } 
     }); 
    } 
} 

在倒数第二个“}”我的错误“缺少return语句”,但我的眼睛似乎是正确的。

回答

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请检查代码,这是活动,据我所知。 – 2015-11-07 05:27:33

1

解决此错误的方法始终是相同的:当方法具有返回类型并且并非所有代码路径都返回该类型的值时发生该错误。 onCreateView方法应该返回一个View,在你的情况下它不会。你是膨胀变成了view变量的视图,但你永远不会返回那个值。如下面的陈述

@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”注释不起作用。它用于确保您重写超类方法或实现接口方法。如果你定义一个带有Override注解的新方法,你会得到一个编译时错误。当您重写方法时,使用注释避免一些错误是一种很好的做法,但如果您愿意,可以安全地移除注释。 –

+0

通常,您看到的错误是在您“覆盖”不属于超类的一部分的方法时发生的。很多时候,当你拼写错误的方法名称(套管)时会发生这种情况。 –

0

添加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;//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 
    }