问题描述:

Excuse me,

I want to try facebook developer for android Tutorial. at Show Friends part.

I have succeed doing Step hello Scrumptious, Autenticate with login and personalize part.

At Show Friends part, I get error

The method getRequestCode() is undefined for the type

SelectionFragment

I use API level 17 before. Then try to change to API Level 10, I get many errors. And I change to API Level 8, then, the previous error appears. getRequestCode() method is still not working.

Can You help me to give any clue error? I have try to search at internet but, really I do not know what is the problem. I try to re-read the tutorial, make new project, and trying then still fails for many times.

Please help.

Thank You.

package com.firstfbapp;

import java.util.ArrayList;

import java.util.List;

import android.app.Activity;

import android.content.Context;

import android.content.Intent;

import android.net.Uri;

import android.os.Bundle;

import android.support.v4.app.Fragment;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.ArrayAdapter;

import android.widget.ImageView;

import android.widget.ListView;

import android.widget.TextView;

import com.facebook.Request;

import com.facebook.Response;

import com.facebook.Session;

import com.facebook.SessionState;

import com.facebook.UiLifecycleHelper;

import com.facebook.model.GraphUser;

import com.facebook.widget.ProfilePictureView;

public class SelectionFragment extends Fragment {

private static final String TAG = "SelectionFragment";

private ProfilePictureView profilePictureView;

private TextView userNameView;

private UiLifecycleHelper uiHelper;

private ListView listView;

private List<BaseListElement> listElements;

private Session.StatusCallback callback = new Session.StatusCallback() {

@Override

public void call(final Session session, final SessionState state,

final Exception exception) {

onSessionStateChange(session, state, exception);

}

};

private static final int REAUTH_ACTIVITY_CODE = 100;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

uiHelper = new UiLifecycleHelper(getActivity(), callback);

uiHelper.onCreate(savedInstanceState);

}

public void onClick(View view) {

// Do nothing for now

startPickerActivity(PickerActivity.FRIEND_PICKER, getRequestCode());

}

@Override

public void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if (requestCode == REAUTH_ACTIVITY_CODE) {

uiHelper.onActivityResult(requestCode, resultCode, data);

} else if (resultCode == Activity.RESULT_OK) {

// Do nothing for now

}

}

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

super.onCreateView(inflater, container, savedInstanceState);

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

// Check for an open session

Session session = Session.getActiveSession();

if (session != null && session.isOpened()) {

// Get the user's data

makeMeRequest(session);

}

// Find the user's profile picture custom view

profilePictureView = (ProfilePictureView) view

.findViewById(R.id.selection_profile_pic);

profilePictureView.setCropped(true);

// Find the user's name view

userNameView = (TextView) view.findViewById(R.id.selection_user_name);

// Find the list view

listView = (ListView) view.findViewById(R.id.selection_list);

// Set up the list view items, based on a list of

// BaseListElement items

listElements = new ArrayList<BaseListElement>();

// Add an item for the friend picker

listElements.add(new PeopleListElement(0));

// Set the list view adapter

listView.setAdapter(new ActionListAdapter(getActivity(),

R.id.selection_list, listElements));

return view;

}

private void startPickerActivity(Uri data, int requestCode) {

Intent intent = new Intent();

intent.setData(data);

intent.setClass(getActivity(), PickerActivity.class);

startActivityForResult(intent, requestCode);

}

@Override

public void onResume() {

super.onResume();

uiHelper.onResume();

}

@Override

public void onSaveInstanceState(Bundle bundle) {

super.onSaveInstanceState(bundle);

uiHelper.onSaveInstanceState(bundle);

}

@Override

public void onPause() {

super.onPause();

uiHelper.onPause();

}

@Override

public void onDestroy() {

super.onDestroy();

uiHelper.onDestroy();

}

private void makeMeRequest(final Session session) {

// Make an API call to get user data and define a

// new callback to handle the response.

Request request = Request.newMeRequest(session,

new Request.GraphUserCallback() {

@Override

public void onCompleted(GraphUser user, Response response) {

// If the response is successful

if (session == Session.getActiveSession()) {

if (user != null) {

// Set the id for the ProfilePictureView

// view that in turn displays the profile

// picture.

profilePictureView.setProfileId(user.getId());

// Set the Textview's text to the user's name.

userNameView.setText(user.getName());

}

}

if (response.getError() != null) {

// Handle errors, will do so later.

}

}

});

request.executeAsync();

}

private void onSessionStateChange(final Session session,

SessionState state, Exception exception) {

if (session != null && session.isOpened()) {

// Get the user's data.

makeMeRequest(session);

}

}

private class ActionListAdapter extends ArrayAdapter<BaseListElement> {

private List<BaseListElement> listElements;

public ActionListAdapter(Context context, int resourceId,

List<BaseListElement> listElements) {

super(context, resourceId, listElements);

this.listElements = listElements;

// Set up as an observer for list item changes to

// refresh the view.

for (int i = 0; i < listElements.size(); i++) {

listElements.get(i).setAdapter(this);

}

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

View view = convertView;

if (view == null) {

LayoutInflater inflater = (LayoutInflater) getActivity()

.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

view = inflater.inflate(R.layout.listitem, null);

}

BaseListElement listElement = listElements.get(position);

if (listElement != null) {

view.setOnClickListener(listElement.getOnClickListener());

ImageView icon = (ImageView) view.findViewById(R.id.icon);

TextView text1 = (TextView) view.findViewById(R.id.text1);

TextView text2 = (TextView) view.findViewById(R.id.text2);

if (icon != null) {

icon.setImageDrawable(listElement.getIcon());

}

if (text1 != null) {

text1.setText(listElement.getText1());

}

if (text2 != null) {

text2.setText(listElement.getText2());

}

}

return view;

}

}

private class PeopleListElement extends BaseListElement {

public PeopleListElement(int requestCode) {

super(getActivity().getResources().getDrawable(

R.drawable.action_people), getActivity().getResources()

.getString(R.string.action_people), getActivity()

.getResources().getString(R.string.action_people_default),

requestCode);

}

@Override

protected View.OnClickListener getOnClickListener() {

return new View.OnClickListener() {

@Override

public void onClick(View view) {

// Do nothing for now

}

};

}

}

}

网友答案:

From what I can see you have to extend FragmentActivity and not Fragment as said in the tutorial: "First, create a new class in your package named ''PickerActivity'' that subclasses FragmentActivity."
Second you call the getRequestCode() in the onClick of the fragment and not in the one of PeopleListElement.

网友答案:

I modify PeopleListElement as the following

private class PeopleListElement extends BaseListElement {
    private int requestCode;
    public PeopleListElement(int requestCode) {
        super(getActivity().getResources().getDrawable(R.drawable.action_people),
                getActivity().getResources().getString(R.string.action_people),
                getActivity().getResources().getString(R.string.action_people_default),
                requestCode);
        this.requestCode = requestCode;
    }

    @Override
    protected View.OnClickListener getOnClickListener() {
        return new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startPickerActivity(PickerActivity.FRIEND_PICKER, requestCode);
            }
        };
    }
}

I declare a variable named "requestCode" in PeopleListElement. This variable is assigned a value whenever PeopleListElement's constructor is called. Then I replace getRequestCode() with "requestCode".

相关阅读:
Top