Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在Facebook墙上发布消息,但不再次显示登录页面_Android_Facebook - Fatal编程技术网

Android 在Facebook墙上发布消息,但不再次显示登录页面

Android 在Facebook墙上发布消息,但不再次显示登录页面,android,facebook,Android,Facebook,我正在用Android开发一个应用程序,在用户的Facebook墙上发布消息。有很多例子和链接,但问题是 在我的应用程序中,用户只会在安装时登录到他/她的Facebook帐户。然后,每当他/她按下特定按钮时,自定义消息必须发布在Facebook墙上,而不要求再次登录 在可用的示例中,将显示登录页面,用户必须再次登录。救命啊 编辑:我再次澄清我的想法。我的应用程序是在用户按下按钮时将用户的位置发布到Facebook墙上以获得帮助。这是一个安全应用程序。因此在使用时登录Facebook发布消息是不公

我正在用Android开发一个应用程序,在用户的Facebook墙上发布消息。有很多例子和链接,但问题是

在我的应用程序中,用户只会在安装时登录到他/她的Facebook帐户。然后,每当他/她按下特定按钮时,自定义消息必须发布在Facebook墙上,而不要求再次登录

在可用的示例中,将显示登录页面,用户必须再次登录。救命啊

编辑:我再次澄清我的想法。我的应用程序是在用户按下按钮时将用户的位置发布到Facebook墙上以获得帮助。这是一个安全应用程序。因此在使用时登录Facebook发布消息是不公平的

如何做到这一点请帮助。。
谢谢。

您应该在SharedReferences中保存登录名和密码

SharedPreferences.Editor editor = mSharedPreferences.edit();
editor.putString("access_token",facebook.getAccessToken());
editor.putLong("access_expires",facebook.getAccessExpires());
editor.commit();

请参阅

我正在发布以下代码,这些代码执行登录到facebook、发布到facebook墙、显示个人资料图像、显示好友列表和注销。。。。希望你会喜欢:)

//将此代码添加到MainActivity
包com.example.abc;
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.io.IOException;
导入java.net.MalformedURLException;
导入java.net.URL;
导入java.util.ArrayList;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入android.widget.Button;
导入android.app.Activity;
导入android.content.Intent;
导入android.content.SharedReferences;
导入android.graphics.Bitmap;
导入android.graphics.BitmapFactory;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.ImageView;
导入android.widget.ListView;
导入android.widget.TextView;
导入android.widget.Toast;
导入com.facebook.android.AsyncFacebookRunner;
导入com.facebook.android.AsyncFacebookRunner.RequestListener;
导入com.facebook.android.DialogError;
导入com.facebook.android.facebook;
导入com.facebook.android.facebook.DialogListener;
导入com.facebook.android.facebook错误;
导入com.facebook.android.Util;
导入android.app.Activity;
导入android.view.Menu;
公共类MainActivity扩展了活动{
//你的Facebook应用程序ID
私有静态字符串APP\u ID=“你的APP ID”;//替换为你的APP
//身份证
ArrayList好友列表;
ListView lv;
//Facebook类的实例
公共静态Facebook=新Facebook(应用程序ID);
公共静态AsyncBookRunner mAsyncRunner;
字符串FILENAME=“AndroidSSO_数据”;
公众共享参考文献MPREF;
SharedReferences.Editor;
公共静态字符串用户名;
//钮扣
静态按钮btnFbLogin;
静态按钮btnFbGetProfile;
静态按钮btnPostToWall;
静态按钮btnShowFriends;
静态按钮故障;
阵列适配器;
ImageView用户图片;
URL img_值=null;
@抑制警告(“弃用”)
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
用户图片=(ImageView)findViewById(R.id.imageView1);
btnFbLogin=(按钮)findViewById(R.id.btn\u fblogin);
btnFbGetProfile=(按钮)findViewById(R.id.btn\u get\u profile);
btnPostToWall=(按钮)findviewbyd(R.id.btn\u fb\u post\u to\u wall);
btnShowFriends=(按钮)findViewById(R.id.btn\u show\u friends);
btnLogout=(按钮)findViewById(R.id.btn\u注销);
mAsyncRunner=新的AsyncFacebookRunner(facebook);
好友列表=新建ArrayList();
lv=(ListView)findViewById(R.id.list);
/**
*登录按钮点击事件
* */
btnFbLogin.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Log.d(“图像按钮”、“点击按钮”);
登录Facebook();
}
});
/**
*获取facebook个人资料信息
* */
btnFbGetProfile.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//交朋友();
getProfileInformation();
}
});
/**
*获取好友信息
* */
btnShowFriends.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
马辛克鲁纳
.request(“我/朋友”,新朋友requestListener());
}
});
/**
*发布到Facebook墙
* */
btnPostToWall.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
postToWall();
}
});
btnLogout.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//交朋友();
从Facebook()注销;
意向意向=新意向(MainActivity.this,MainActivity.class);
星触觉(意向);
}
});
}
/**
*功能登录到facebook
* */
@抑制警告(“弃用”)
public void loginToFacebook(){
mPrefs=getPreferences(模式\私有);
String access\u token=mPrefs.getString(“access\u token”,null);
long expires=mPrefs.getLong(“访问到期”,0);
if(访问令牌!=null){
setAccessToken(访问令牌);
btnFbLogin.setVisibility(View.INVISIBLE);
//使“获取配置文件”按钮可见
btnFbGetProfile.setVisibility(View.VISIBLE);
//使墙上的柱子可见
btnPostToWall.setVisibility(View.VISIBLE);
btnShowFriends.setVisibility(View.VISIBLE);
//使照片库按钮可见
btnLogout.setVisibility(View.VISIBLE);
Log.d(“FB会话”,“facebook.isSessionValid());
}
如果(过期!=0){
setAccessExpires(expires);
}
如果(!facebook.issio)
//   Add this code to your MainActivity
package com.example.abc;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;

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

import android.widget.Button;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

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;

import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

// Your Facebook APP ID
private static String APP_ID = "your app id"; // Replace with your App
                                                    // ID
ArrayList<String> friends_list;
ListView lv;
// Instance of Facebook Class
public static Facebook facebook = new Facebook(APP_ID);
public static AsyncFacebookRunner mAsyncRunner;
String FILENAME = "AndroidSSO_data";
public SharedPreferences mPrefs;
SharedPreferences.Editor editor;
public static  String username;
// Buttons
static Button btnFbLogin;
static Button btnFbGetProfile;
static Button btnPostToWall;
static Button btnShowFriends;
static Button btnLogout;
ArrayAdapter<String> adapter;
ImageView user_picture; 
URL img_value = null;
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    user_picture= (ImageView)findViewById(R.id.imageView1);
    btnFbLogin = (Button) findViewById(R.id.btn_fblogin);
    btnFbGetProfile = (Button) findViewById(R.id.btn_get_profile);
    btnPostToWall = (Button) findViewById(R.id.btn_fb_post_to_wall);
    btnShowFriends = (Button) findViewById(R.id.btn_show_friends);
    btnLogout = (Button) findViewById(R.id.btn_logout);
    mAsyncRunner = new AsyncFacebookRunner(facebook);
    friends_list = new ArrayList<String>();
    lv = (ListView) findViewById(R.id.list);

    /**
     * Login button Click event
     * */
    btnFbLogin.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Log.d("Image Button", "button Clicked");
            loginToFacebook();
        }
    });

    /**
     * Getting facebook Profile info
     * */
    btnFbGetProfile.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // getFriends();
            getProfileInformation();

        }
    });
    /**
     * Getting Friends info
     * */
    btnShowFriends.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            mAsyncRunner
                    .request("me/friends", new FriendsRequestListener());

        }
    });

    /**
     * Posting to Facebook Wall
     * */
    btnPostToWall.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            postToWall();
        }
    });
    btnLogout.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // getFriends();
            logoutFromFacebook();
            Intent intent = new Intent(MainActivity.this, MainActivity.class);
            startActivity(intent);

        }
    });

}

/**
 * Function to login into facebook
 * */
@SuppressWarnings("deprecation")
public void loginToFacebook() {

    mPrefs = getPreferences(MODE_PRIVATE);
    String access_token = mPrefs.getString("access_token", null);
    long expires = mPrefs.getLong("access_expires", 0);

    if (access_token != null) {
        facebook.setAccessToken(access_token);

        btnFbLogin.setVisibility(View.INVISIBLE);

        // Making get profile button visible
        btnFbGetProfile.setVisibility(View.VISIBLE);

        // Making post to wall visible
        btnPostToWall.setVisibility(View.VISIBLE);

        btnShowFriends.setVisibility(View.VISIBLE);

        // Making photos gallery button visible


             btnLogout.setVisibility(View.VISIBLE);


            Log.d("FB Sessions", "" + facebook.isSessionValid());
        }

    if (expires != 0) {
            facebook.setAccessExpires(expires);
    }

    if (!facebook.isSessionValid()) {
        facebook.authorize(this,
                new String[] { "email", "publish_stream", "user_photos", "friends_photos" },
                new DialogListener() {

                    @Override
                    public void onCancel() {
                        // Function to handle cancel event
                    }

                    @Override
                    public void onComplete(Bundle values) {
                        // Function to handle complete event
                        // Edit Preferences and update facebook acess_token
                        editor = mPrefs.edit();
                        editor.putString("access_token",
                                facebook.getAccessToken());
                        editor.putLong("access_expires",
                                facebook.getAccessExpires());
                        editor.commit();

                        // Making Login button invisible
                             btnFbLogin.setVisibility(View.INVISIBLE);

                        // Making logout Button visible
                    btnFbGetProfile.setVisibility(View.VISIBLE);

                        btnShowFriends.setVisibility(View.VISIBLE);

                        // Making post to wall visible
                        btnPostToWall.setVisibility(View.VISIBLE);

                        // Making show access tokens button visible


                        btnLogout.setVisibility(View.VISIBLE);
                        getprofilepic();

                    }

                    @Override
                    public void onError(DialogError error) {
                        // Function to handle error

                    }

                    @Override
                    public void onFacebookError(FacebookError fberror) {
                        // Function to handle Facebook errors

                    }

                });
    }
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    facebook.authorizeCallback(requestCode, resultCode, data);
}

/**
 * Get Profile information by making request to Facebook Graph API
 * */
@SuppressWarnings("deprecation")
public void getProfileInformation() {
    mAsyncRunner.request("me", new RequestListener() {
        @Override
        public void onComplete(String response, Object state) {
            Log.d("Profile", response);
            String json = response;
            try {
                // Facebook Profile JSON data
                JSONObject profile = new JSONObject(json);

                // getting name of the user
                username = profile.getString("username");

                // getting email of the user
                final String email = profile.getString("email");

                runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        Toast.makeText(getApplicationContext(),
                                "Name: " + username + "\nEmail: " + email,
                                Toast.LENGTH_LONG).show();
                    }

                });

            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onIOException(IOException e, Object state) {
        }

        @Override
        public void onFileNotFoundException(FileNotFoundException e,
                Object state) {
        }

        @Override
        public void onMalformedURLException(MalformedURLException e,
                Object state) {
        }

        @Override
        public void onFacebookError(FacebookError e, Object state) {
        }
    });
}

/**
 * Function to post to facebook wall
 * */
@SuppressWarnings("deprecation")
public void postToWall() {
    // post on user's wall.
    facebook.dialog(this, "feed", new DialogListener() {
        @Override
        public void onFacebookError(FacebookError e) {
        }

        @Override
        public void onError(DialogError e) {
        }

        @Override
        public void onComplete(Bundle values) {
        }

        @Override
        public void onCancel() {
        }
    });

}

/**
 * Function to show Access Tokens
 * */
public void showAccessTokens() {
    String access_token = facebook.getAccessToken();

    Toast.makeText(getApplicationContext(),
            "Access Token: " + access_token, Toast.LENGTH_LONG).show();
}

public void logout() {
    if (mPrefs != null) {
        editor.remove("access_token");
        editor.remove("access_expires");
        editor.commit();
        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);

    }
}

private class FriendsRequestListener implements RequestListener {

    String friendData;

    // Method runs when request is complete
    public void onComplete(String response, Object state) {
        Log.v("", "FriendListRequestONComplete");
        // Create a copy of the response so i can be read in the run()
        // method.
        friendData = response;
        Log.v("friendData--", "" + friendData);
        // Create method to run on UI thread
        MainActivity.this.runOnUiThread(new Runnable() {
            public void run() {
                try {
                    // Parse JSON Data
                    JSONObject json;
                    json = Util.parseJson(friendData);

                    // Get the JSONArry from our response JSONObject
                    JSONArray friendArray = json.getJSONArray("data");

                    Log.v("friendArray--", "" + friendArray);

                    for (int i = 0; i < friendArray.length(); i++) {
                        JSONObject frnd_obj = friendArray.getJSONObject(i);
                        friends_list.add("Name:"+frnd_obj.getString("name") + "  ID:"
                                + frnd_obj.getString("id"));
                    }

                    adapter = new ArrayAdapter<String>(
                            getBaseContext(),
                            android.R.layout.simple_list_item_1,
                            android.R.id.text1, friends_list);

                    lv.setAdapter(adapter);

                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (FacebookError e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });
    }

    @Override
    public void onIOException(IOException e, Object state) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onFileNotFoundException(FileNotFoundException e,
            Object state) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onMalformedURLException(MalformedURLException e,
            Object state) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onFacebookError(FacebookError e, Object state) {
        // TODO Auto-generated method stub

    }
}
@SuppressWarnings("deprecation")
 public void logoutFromFacebook() {
  mAsyncRunner.logout(this, new RequestListener() {

   @Override
   public void onComplete(final String response, Object state) {
       Thread timer = new Thread() { //new thread         
            public void run() {
                Boolean b = true;
                try {

                       editor.remove("access_token");
                      editor.commit();
                     sleep(500);
                Log.d("Logout from Facebook", response);

                        runOnUiThread(new Runnable() {  
                        @Override
                        public void run() {
                            // TODO Auto-generated method stub
                           btnFbLogin.setVisibility(View.VISIBLE);

                           // making all remaining buttons invisible
                           btnFbGetProfile.setVisibility(View.INVISIBLE);
                           btnPostToWall.setVisibility(View.INVISIBLE);
                           btnShowFriends.setVisibility(View.INVISIBLE);
                           btnLogout.setVisibility(View.INVISIBLE);
                           adapter.clear();
                           adapter.notifyDataSetChanged();
                           Toast.makeText(getApplicationContext(), "You are logged out from Facebook", Toast.LENGTH_LONG).show();
                        }
                    });



                    while (b == true);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                finally {
                }
            };
        };
        timer.start();

   }

   @Override
   public void onIOException(IOException e, Object state) {
   }

   @Override
   public void onFileNotFoundException(FileNotFoundException e,
     Object state) {
   }

   @Override
   public void onMalformedURLException(MalformedURLException e,
     Object state) {
   }

   @Override
   public void onFacebookError(FacebookError e, Object state) {
   }
  });
 }


@SuppressWarnings("deprecation")
public void getprofilepic(){
    mAsyncRunner.request("me", new RequestListener() {
        @Override
        public void onComplete(String response, Object state) {
            Log.d("Profile", response);
            String json = response;

            try {

                // Facebook Profile JSON data
                final JSONObject profile = new JSONObject(json);
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {

                // getting name of the user
                try {
                    username = profile.getString("username");
                } catch (JSONException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }


try {
    img_value = new
    URL("https://graph.facebook.com/"+username+"/picture?type=normal");
} catch (MalformedURLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
Bitmap mIcon1 = null;

try {
    mIcon1 =
    BitmapFactory.decodeStream(img_value.openConnection().getInputStream());
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
user_picture.setImageBitmap(mIcon1); 
                    }

                });

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onIOException(IOException e, Object state) {
            }

            @Override
            public void onFileNotFoundException(FileNotFoundException e,
                    Object state) {
            }

            @Override
            public void onMalformedURLException(MalformedURLException e,
                    Object state) {
            }

            @Override
            public void onFacebookError(FacebookError e, Object state) {
            }
        });

}


}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >


<Button
    android:id="@+id/btn_fblogin"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:text="Login with Facebook" />

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

<Button
    android:id="@+id/btn_fb_post_to_wall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:text="Post to Wall"
    android:visibility="gone" />

<Button
    android:id="@+id/btn_get_profile"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:text="Get Profile Data"
    android:visibility="gone" />

<Button
    android:id="@+id/btn_show_friends"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:text="Show Friends"
    android:visibility="gone" />

<Button
    android:id="@+id/btn_logout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:text="Logout"
    android:visibility="gone" />

<ListView
    android:id="@+id/list"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >
</ListView>

</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.abc"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="8" />
<uses-permission android:name="android.permission.INTERNET"/>
<application
    android:allowBackup="true"
    android:icon="@drawable/icon"
    android:label="@string/app_name" >
    <activity
        android:name="com.example.abc.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
</application>

</manifest>