2015-11-03 166 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 
    }