android - 这是在 facebook 3.0 Request.newMeRequest 方法的 onCompleted 方法中调用异步任务的正确方法

标签 android android-asynctask facebook-sdk-3.1

我试过了,但是在调用后执行方法后我收到了 WindowLeaked 错误消息。

这是我的代码:

    Request meRequest=Request.newMeRequest(session, new GraphUserCallback()
                {

                        @Override
                        public void onCompleted(GraphUser user, Response response)
                        {
                            if(response.getError()==null)
                            {

                                try 
                                {


                                    MyAsyncTask async = new MyAsyncTask ();
                                    async.execute("fbsignup");

                                } catch (Exception e) 
                                {
                                   Log.v("FB  error:::::::::", e.getMessage());
                                }

                            }
                        }

                });
     meRequest.executeAsync();

这是 MyAsyncTask 类,当我尝试在不使用 asynctask 的情况下调用 Intent 时它工作正常,所以我想我的错误仅在 asynctask 中。

private class MyAsyncTask extends AsyncTask<String, Void, Void> {

    private ProgressDialog pDialog = null;
    private String responseFromServer = null;
    private boolean hasExceptionOccured = false;
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(getActivity());
        pDialog.setMessage("Please wait..");
        pDialog.setCancelable(false);
        pDialog.show();

    }

    @Override
    protected Void doInBackground(String... params) {

        try 
        {

            // Parse graph user data and check whether user has registered or not.
            // If user is not registered mandatory password popup. 

            ServiceHandler handler = new ServiceHandler();
            List<NameValuePair> parameters = new ArrayList<NameValuePair>();

            if(params[0].equalsIgnoreCase("fbsignup"))
            {

                parameters.add(new BasicNameValuePair("email", UserEmailID));   

                responseFromServer = handler.makeServiceCall(URL, 2, parameters);

            }

        } catch (Exception e) 
        {
             Log.v("CLassName::::::SignupwithEmail:::::::AsyncTask", e.getMessage());
             hasExceptionOccured = true; 
        }

        return null;
    }


     @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            if (pDialog!=null)
            { 
                pDialog.dismiss();
            }

            try 
            {   

                    if(responseFromServer.contains("success"))
                    {
                    Intent i = new Intent(getActivity(), HomePage.class);
                    getActivity().startActivity(i);
                    getActivity().finish(); 
                    }

            } catch (Exception e) 
            {
                Log.v("Main FRagment FB async::::::", e.getMessage());
            }   

        }    

}

最佳答案

嘿,你可以使用更新的 facebook v3.6 sdk。请下载并获取一些内部可用的示例应用程序。 Facebook v3.6

登录后的用户

Session session = Session.getActiveSession();

requestMyAppFacebookFriends(session);


 private List<GraphUser> getResults(Response response) {
            GraphMultiResult multiResult = response
                    .getGraphObjectAs(GraphMultiResult.class);
            GraphObjectList<GraphObject> data = multiResult.getData();
            return data.castToListOf(GraphUser.class);
    }
     private void requestMyAppFacebookFriends(Session session) {
            Request friendsRequest = createRequest(session);
            friendsRequest.setCallback(new Request.Callback() {

                @Override
                public void onCompleted(Response response) {

                  //List<GraphUser> friends = getResults(response);

                  //Log.e("RESULT : ", "@"+friends.size());

                // TODO: your code here

                   }
            });
            friendsRequest.executeAsync();
        }
     private Request createRequest(Session session) {
            Request request = Request.newGraphPathRequest(session, "me/friends", null);

            Set<String> fields = new HashSet<String>();
            String[] requiredFields = new String[] { "id", "name", "picture","installed" };
            fields.addAll(Arrays.asList(requiredFields));

            Bundle parameters = request.getParameters();
            parameters.putString("fields", TextUtils.join(",", fields));
            request.setParameters(parameters);

            return request;
        }

关于android - 这是在 facebook 3.0 Request.newMeRequest 方法的 onCompleted 方法中调用异步任务的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21771497/

相关文章:

android - 如何添加进度对话框

ios - 在 Swift 中使用 Facebook API。 "App ID not found"?

ios - 如何在 iOS 应用程序中集成 Facebook 用户的 Newsfeed(或)Wall post

android - ListView 和以编程方式为行留边距

android - Android 上的 phonegap 换行警报

java - 在 doInBackground 中获取变量 退出 AsyncTask

java - ViewPager 中每个 ImageView 的 ID

Android Facebook SDK 3.2获取个人资料电子邮件信息显示为空

android - 在 Android 中以编程方式更改应用语言

android - 从抽屉导航 ActionBar 中删除应用程序图标不起作用