1

I'm following a tutorial I found on this website http://www.helloandroid.com/tutorials/using-facebook-sdk-android-development-part-2 and when I inserted the 2 sets of code segments in the classes the tutorial specifies I get 4 facebook sdk related errors. I inserted to the code segments bellow with the errors bold/starred.

Does anyone have any idea how I can fix these errors?

Here are the error messages i get when i mouse over the errors, in order:

1.onCreate(Bundle savedInstanceState) : The method onCreate(Bundle) of type main must override or implement a supertype method

  1. btnLogin.setOnClickListener(new OnClickListener() : OnClickListener cannot be resolved to a type

  2. LoginDialogListener : The type FBConnectionActivity.LoginDialogListener must implement the inherited abstract method Facebook.DialogListener.onComplete(Bundle)

  3. onComplete(Bundle values) : The method onComplete(Bundle) of type FBConnectionActivity.LoginDialogListener must override or implement a supertype method

Segment 1 (2 errors) : In this part the errors are at the oncreate and the onclicklistener

  package com.outfit.first;

import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;

public class main extends FBConnectionActivity {
    private TextView txtUserName;
    private ProgressBar pbLogin;
    private Button btnLogin;

@Override
public void **onCreate(Bundle savedInstanceState)** {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    txtUserName = (TextView) findViewById(R.id.textFacebook);
    pbLogin = (ProgressBar) findViewById(R.id.progressLogin);
    btnLogin = (Button) findViewById(R.id.buttonLogin);
            btnLogin.setOnClickListener(new **OnClickListener**() {
                    @Override
                    public void onClick(View arg0) {
                            pbLogin.setVisibility(ProgressBar.VISIBLE);
                            setConnection();
                            getID(txtUserName, pbLogin);
                    }
            });
}
}

Segment 2 (2 errors): In this part the errors are at the LoginDialogListener class and the onComplete(Bundle values) inside that class.

package com.outfit.first;

import com.facebook.android.AsyncFacebookRunner;
import com.facebook.android.Facebook;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.util.Log;
import android.widget.ProgressBar;
import android.widget.TextView;

public abstract class FBConnectionActivity extends Activity {
    public static final String TAG = "FACEBOOK";
    private Facebook mFacebook;
    public static final String APP_ID = "136907069717004";
    private AsyncFacebookRunner mAsyncRunner;
    private static final String[] PERMS = new String[] { "read_stream" };
    private SharedPreferences sharedPrefs;
    private Context mContext;

    private TextView username;
    private ProgressBar pb;

    public void setConnection() {
            mContext = this;
            mFacebook = new Facebook(APP_ID);
            mAsyncRunner = new AsyncFacebookRunner(mFacebook);
    }

    public void getID(TextView txtUserName, ProgressBar progbar) {
            username = txtUserName;
            pb = progbar;
            if (isSession()) {
                    Log.d(TAG, "sessionValid");
                    mAsyncRunner.**request**("me", new IDRequestListener());
            } else {
                    // no logged in, so relogin
                    Log.d(TAG, "sessionNOTValid, relogin");
                    mFacebook.**authorize**(this, PERMS, new LoginDialogListener());
            }
    }

    public boolean isSession() {
            sharedPrefs = PreferenceManager.getDefaultSharedPreferences(mContext);
            String access_token = sharedPrefs.getString("access_token", "x");
            Long expires = sharedPrefs.getLong("access_expires", -1);
            Log.d(TAG, access_token);

            if (access_token != null && expires != -1) {
                    mFacebook.setAccessToken(access_token);
                    mFacebook.setAccessExpires(expires);
            }
            return mFacebook.isSessionValid();
    }

    private class **LoginDialogListener** implements DialogListener {

            @Override
            public void **onComplete(Bundle values)** {
                    Log.d(TAG, "LoginONComplete");
                    String token = mFacebook.getAccessToken();
                    long token_expires = mFacebook.getAccessExpires();
                    Log.d(TAG, "AccessToken: " + token);
                    Log.d(TAG, "AccessExpires: " + token_expires);
                    sharedPrefs = PreferenceManager
                                    .getDefaultSharedPreferences(mContext);
                    sharedPrefs.edit().putLong("access_expires", token_expires)
                                    .commit();
                    sharedPrefs.edit().putString("access_token", token).commit();
                    mAsyncRunner.request("me", new IDRequestListener());
            }

            @Override
            public void onFacebookError(FacebookError e) {
                    Log.d(TAG, "FacebookError: " + e.getMessage());
            }

            @Override
            public void onError(DialogError e) {
                    Log.d(TAG, "Error: " + e.getMessage());
            }

            @Override
            public void onCancel() {
                    Log.d(TAG, "OnCancel");
            }
    }

    private class IDRequestListener implements RequestListener {

            @Override
            public void onComplete(String response, Object state) {
                    try {
                            Log.d(TAG, "IDRequestONComplete";);
                            Log.d(TAG, "Response: " + response.toString());
                            JSONObject json = Util.parseJson(response);

                            final String id = json.getString("id");
                            final String name = json.getString("name");
                            FBConnectionActivity.this.runOnUiThread(new Runnable() {
                                    public void run() {
                                            username.setText("Welcome: " + name+"\n ID: "+id);
                                            pb.setVisibility(ProgressBar.GONE);

                                    }
                            });
                    } catch (JSONException e) {
                            Log.d(TAG, "JSONException: " + e.getMessage());
                    } catch (FacebookError e) {
                            Log.d(TAG, "FacebookError: " + e.getMessage());
                    }
            }

            @Override
            public void onIOException(IOException e, Object state) {
                    Log.d(TAG, "IOException: " + e.getMessage());
            }

            @Override
            public void onFileNotFoundException(FileNotFoundException e,
                            Object state) {
                    Log.d(TAG, "FileNotFoundException: " + e.getMessage());
            }

            @Override
            public void onMalformedURLException(MalformedURLException e,
                            Object state) {
                    Log.d(TAG, "MalformedURLException: " + e.getMessage());
            }

            @Override
            public void onFacebookError(FacebookError e, Object state) {
                    Log.d(TAG, "FacebookError: " + e.getMessage());
            }

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            mFacebook.authorizeCallback(requestCode, resultCode, data);
    }
}
Peter
  • 5,071
  • 24
  • 79
  • 115

1 Answers1

3

Ctrl-Shift-o and everything should work(it does for me atleast)

Imports needed for first activity:

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;

And for the second :

import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.MalformedURLException;

import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.widget.ProgressBar;
import android.widget.TextView;

import com.facebook.android.AsyncFacebookRunner;
import com.facebook.android.AsyncFacebookRunner.RequestListener;
import com.facebook.android.DialogError;
import com.facebook.android.Facebook;
import com.facebook.android.Facebook.DialogListener;
import com.facebook.android.FacebookError;
import com.facebook.android.Util;
IamAlexAlright
  • 1,500
  • 1
  • 16
  • 29
  • Thank you so much that was amazing! That was like the fastest fix I've ever gotten on here. So how come those imports didn't show up when i moused over the errors? – Peter Jul 10 '11 at 23:10
  • Hey one more question I hope you don't mind. When I Add the connection activity to the manifest, which is i get the error, "Multiple annotations found at this line: - Element type "activity" must be followed by either attribute specifications, ">" or "/>". - Attribute "/" has no value - Attribute """ has no value" – Peter Jul 11 '11 at 01:07
  • remove the semicolon in the middle - just separate with a space – IamAlexAlright Jul 11 '11 at 01:14
  • BTW, since I've had issues before I prefer to add activities in this manner: Click on AndroidManifest.xml and you should be brought to the XML file. Below the file you should see tabs(Manifest, Application, Permissions,...). Click Application and scroll down, click Add and select Activity, then highlight the new acitivty and click the blue field Name* - just fill in the name and any other info and it'll add it all for you – IamAlexAlright Jul 11 '11 at 01:17
  • Thank you. So now that i have both of those classes and the manifest and the xml set up i want to be able to start facebook sdk from my main activity from a button press. I tried to use this code `Intent myIntent = new Intent(view.getContext(), FBConnectionActivity.class); startActivityForResult(myIntent, 0); ` but i get all sorts of errors in logcat and it crashes out. Is there another way to do this that works? – Peter Jul 11 '11 at 01:41