安卓:上传照片,从SD卡的Facebook墙上 [英] Android: Uploading photos from SD Card to Facebook Wall

查看:107
本文介绍了安卓:上传照片,从SD卡的Facebook墙上的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想从我的SD卡的照片上传到我的Facebook帐户,并仍然有没有运气。
我没有得到任何错误,但我想上传的图片没有出现在我的墙上。
这里是我的code(主类的全部code):

I'm trying to upload pictures from my SD Card to my facebook account and still got no luck. I'm not getting any errors but the pictures I'm trying to upload are not appearing on my wall. Here's my code (full code of the Main Class):

import com.facebook.android.AsyncFacebookRunner;
import com.facebook.android.DialogError;
import com.facebook.android.Facebook;
import com.facebook.android.FacebookError;
import com.facebook.android.AsyncFacebookRunner.RequestListener;
import com.facebook.android.Facebook.DialogListener;

public class Gallery extends Activity {
    private static final String TAG = "Gallery";
    // Constants
    private static final int UPDATE_GRID_VIEW = 0;
    // References to our images
    private ArrayList<Uri> picUri = new ArrayList<Uri>();
    private ArrayList<String> picName = new ArrayList<String>();
    private GridView mGridview;
    private ImageAdapter mImageAdapter;
    // For FaceBook
    private Facebook facebook;
    private String fb_AppId = "MY_APP_ID";

    // Progress Dialog
    private ProgressDialog progressD;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.gallery);
        initializeViews();
        initFacebook();
        authorizeFbUser();
    }

    public void initializeViews(){
        PictureListThread picThread = new PictureListThread();
        picThread.start();

        mImageAdapter = new ImageAdapter(this);
        mGridview = (GridView) findViewById(R.id.gallery_gridview);
        mGridview.setAdapter(mImageAdapter);
        mGridview.setOnItemClickListener(mOnItemClickListener);
    }

    // Facebook Methods and Classes
    public void initFacebook(){
        facebook = new Facebook(fb_AppId);

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

    public void authorizeFbUser(){
        facebook.authorize(this, new String[] { "email", "read_stream" },
            new DialogListener() {
                @Override
                public void onComplete(Bundle values) {
                    Log.d(TAG, "******************* FACEBOOK::authorize::onComplete *******************");
                }

                @Override
                public void onFacebookError(FacebookError error) {
                    Log.d(TAG, "******************* FACEBOOK::authorize::onFacebookError *******************");
                }

                @Override
                public void onError(DialogError e) {
                    Log.d(TAG, "******************* FACEBOOK::authorize::onError *******************");
                }

                @Override
                public void onCancel() {
                    Log.d(TAG, "******************* FACEBOOK::authorize::onCancel *******************");
                }
        });
    }

    public class mRequestListener implements RequestListener{

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

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

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

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

        @Override
        public void onComplete(String response, Object state) {
            Log.d(TAG, "******************* FACEBOOK::onComplete *******************");
        }

    }
    // Methods

    private Handler mHandler = new Handler() {
        @Override public void handleMessage(Message msg) {
            if(msg.what == UPDATE_GRID_VIEW) {
                mImageAdapter.notifyDataSetChanged();
            } 
        }
    };

    // Inner Classes

    private OnItemClickListener mOnItemClickListener = new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            Log.d(TAG,"[][][][][][][][][][]-------------> PATH: "+picUri.get(position).toString());
            byte[] data = null;
            Bitmap bi = BitmapFactory.decodeFile(picUri.get(position).toString());
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            bi.compress(Bitmap.CompressFormat.JPEG, 100, baos);
            data = baos.toByteArray();
            Log.d(TAG,"[][][][][][][][][][]-------------> DATA: "+data);

            Bundle param = new Bundle();
            param.putString("method", "photos.upload");
            param.putString("message", picName.get(position));
            param.putByteArray("picture", data);

            AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(facebook);
            mAsyncRunner.request("me/photos", param, "POST", new mRequestListener(), null);



            Log.d(TAG,"[][][][][][][][][][]-------------> Gallery::mOnItemClickListener END!");
        }
    };

    private class PictureListThread extends Thread {
        @Override
        public void run() {
            Log.d(TAG, "******************* PictureListThread::run() STARTED! *******************");;   
            System.gc();
            String[] proj = { MediaStore.Images.Media.DATA, MediaStore.Images.Media.TITLE};
            Cursor picturecursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                    proj, null, null, MediaStore.Images.Media.TITLE);

            if (picturecursor == null)
                return;

            if (!picturecursor.moveToFirst())
                return;

            do { 
                String picTitle = picturecursor.getString(picturecursor.getColumnIndex(MediaStore.Images.Media.TITLE));
                if(picTitle.contains("KEYWORD")){
                    picName.add(picTitle);
                    picUri.add(Uri.parse(picturecursor.getString(picturecursor.getColumnIndex(MediaStore.Images.Media.DATA))));
                    Log.d(TAG,"[][][][][][][][][][]-------------> PICTURE ADDED: "+picTitle);   
                    mHandler.sendEmptyMessage(UPDATE_GRID_VIEW);
                }
            } while (picturecursor.moveToNext());

        }

    }

    public class ImageAdapter extends BaseAdapter {
        private Context mContext;

        public ImageAdapter(Context c) {
            mContext = c;
        }

        public int getCount() {
            return picUri.size();
        }

        public Object getItem(int position) {
            return null;
        }

        public long getItemId(int position) {
            return 0;
        }

        // create a new ImageView for each item referenced by the Adapter
        public View getView(int position, View convertView, ViewGroup parent) {
            ImageView imageView;
            if (convertView == null) {  // if it's not recycled, initialize some attributes
                imageView = new ImageView(mContext);
                imageView.setLayoutParams(new GridView.LayoutParams(150, 100));
                imageView.setPadding(8, 8, 8, 8);
            } else {
                imageView = (ImageView) convertView;
            }

            imageView.setImageURI(picUri.get(position));
            return imageView;
        }


    }

}

我的

mRequestListener()::的onComplete()

mRequestListener()::onComplete()

是被称为没有错误,所以我不知道为什么图片不上我的花墙。

is being called with no errors and so I'm wondering why the pictures are not displaying on my wall.

我失去了一些东西在这里?

Am I missing something here?

请帮忙。

在此先感谢!

推荐答案

把此行。

mAsyncRunner.request("me/photos", param, "POST", new mRequestListener(), null);

而不是

mAsyncRunner.request(null, param, "POST", new mRequestListener(), null);

和检查的照片将出现在墙上或不?

and check photo will appear on wall or not?

添加publish_stream的权限。

这篇关于安卓:上传照片,从SD卡的Facebook墙上的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆