在facebook 3.0 Request.newMeRequest方法中,在onCompleted方法中调用异步任务的正确方法是哪种

时间:2014-02-14 05:28:24

标签: android android-asynctask facebook-sdk-3.1

我尝试了这个,但是在调用postexecute方法后我收到了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());
            }   

        }    

}

2 个答案:

答案 0 :(得分:1)

嘿,你可以使用更新的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;
        }

答案 1 :(得分:0)

我添加了

   Looper.loop(); 

  async.execute("fbsignup");

这解决了我的问题。

相关问题