【问题标题】:How to access Facebook methods in AsyncTask如何在 AsyncTask 中访问 Facebook 方法
【发布时间】:2013-07-01 11:53:04
【问题描述】:

我需要做什么来获取当前登录用户的 userId、facebook 个人资料图片、emailid 和地址。

一旦应用授权用户登录,我将在异步任务中调用以下方法,但它失败并抛出异常:-

“android.os.NetworkOnMainThreadException”

请查看我在 asynctask 的 doInBackground() 中执行的方法:-

private void callFBMethods() {

    try {
        response = facebook.request("/me");
        if(response!=null)
        {
            handler.sendEmptyMessage(0);
        }
        JSONObject json = Util.parseJson(response);
        mainURL = Constant.FB_PIC_URL+json.getString("id")+"/picture?type=small";
        //To registere new user here
        Vector<Object> userData = new Vector<Object>();
        userData.add(Constant.CURRENT_FLAG);

        userData.add(json.getString("username"));
        userData.add(json.getString("name"));
        userData.add(json.getString("id"));
        userData.add(mainURL);

        new AsynServices(mActivity, userData, 4).execute();
    } catch (Exception e) {
        // TODO: handle exception
        System.out.println("exception occurs:-"+e.getMessage());
    }   

}

【问题讨论】:

    标签: java android multithreading networking android-asynctask


    【解决方案1】:

    NetworkOnMainThreadException 此错误是因为从 Android API 14 开始,您必须在 AsyncTask 中运行与互联网相关的代码。像这样你可以在 AsyncTask 中运行你的代码

    private class Task extends AsyncTask<Void, Void, Void> {
    
       @Override
       protected String doInBackground(String... urls) {
    
          // call your methods from here
    
          try {
             response = facebook.request("/me");
             if(response!=null)
             {
                handler.sendEmptyMessage(0);
             }
             JSONObject json = Util.parseJson(response);
             mainURL = Constant.FB_PIC_URL+json.getString("id")+"/picture?type=small";
             //To registere new user here
             Vector<Object> userData = new Vector<Object>();
             userData.add(Constant.CURRENT_FLAG);
    
             userData.add(json.getString("username"));
             userData.add(json.getString("name"));
             userData.add(json.getString("id"));
             userData.add(mainURL);
    
             // instead of calling another Asynctask here just write related code here.
    
             new AsynServices(mActivity, userData, 4).execute();
    
         } catch (Exception e) {
             // TODO: handle exception
             System.out.println("exception occurs:-"+e.getMessage());
         } 
       }
    }
    

    【讨论】:

    • 是的,我做了同样的事情,但它不起作用,请参阅我在 doInBackground 方法中运行的代码。谢谢。
    • 是的,我和你在这里写的一样,但这在我基于 Froyo 的三星中工作,但在基于 Jelly bean 的 HTC 中不工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 2019-03-15
    • 2019-02-04
    • 1970-01-01
    相关资源
    最近更新 更多