【问题标题】:Android AsyncTask Error with Facebook SDKFacebook SDK 的 Android AsyncTask 错误
【发布时间】:2015-06-18 16:10:50
【问题描述】:

我在 Android 应用程序中使用 Facebook SDK 进行登录。我可以用 Facebook 登录。我想将 AccessToken 和电子邮件插入我的数据库。我解决了获取电子邮件,但我可以使用异步从用户那里获取电子邮件。然后我使用 AsyncTask 将数据插入数据库。当我将 AsyncTask 与 Facebook SDK 一起使用时,我遇到了异常。

AsyncTask #5 java.lang.RuntimeException: 执行doInBackground()时出错

我的代码

private JSONParser jParser = new JSONParser();
private String AccessToken;
public String Email;
private LoginAPI api = new LoginAPI();
@Override
protected void onCreate(Bundle savedInstanceState) {
    FacebookSdk.sdkInitialize(getApplicationContext());
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    loginButton = (LoginButton)findViewById(R.id.login_button);

    if(Profile.getCurrentProfile()!=null){
        user = Profile.getCurrentProfile();
        new LoginAPI().execute();
    }
    loginButton.setReadPermissions("public_profile");
    loginButton.setReadPermissions("email");
    callbackManager = CallbackManager.Factory.create();

    LoginManager.getInstance().registerCallback(callbackManager,
            new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult) {
                    user = Profile.getCurrentProfile();
                    AccessToken = loginResult.getAccessToken().getToken();

                    GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                        @Override
                        public void onCompleted(JSONObject user, GraphResponse graphResponse) {
                            Email = user.optString("email");
                            api.execute();
                        }
                    }).executeAsync();

                }

                @Override
                public void onCancel() {
                    AlertDialog alertMessage = new AlertDialog.Builder(Login.this).create();
                    alertMessage.setMessage("Iptal");
                    alertMessage.show();
                }

                @Override
                public void onError(FacebookException exception) {
                    AlertDialog alertMessage = new AlertDialog.Builder(Login.this).create();
                    alertMessage.setMessage(exception.toString());
                    alertMessage.show();
                }
            });
}

class LoginAPI extends AsyncTask<String, String, String> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    protected String doInBackground(final String... args) {

        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new NameValuePair() {
            @Override
            public String getName() {
                return "Email";
            }

            @Override
            public String getValue() {
                return Email;
            }
        });
        params.add(new NameValuePair() {
            @Override
            public String getName() {
                return "AccessToken";
            }

            @Override
            public String getValue() {
                return AccessToken;
            }
        });

        JSONObject json = jParser.makeHttpRequest("WebServiceURL", "POST", params); //Exception Line

        try {

            if (json != null) {
                Sonuc = json.getBoolean("Result");
                Mesaj = json.getString("Message");
                JSONObject _uye = json.getJSONObject("Data");
                if(_uye!=null){
                    localUser = new User(_uye.getInt("UserID"),
                            _uye.getString("FacebookID"),
                            _uye.getString("NameSurname"),
                            _uye.getString("Email"),
                            _uye.getString("ProfileImage"));
                }
                else{
                    localUser = new User(1,"","","","");
                }
            }
        } catch (JSONException e) {
            return e.getMessage().toString();
        }
        return null;
    }

    protected void onPostExecute(String file_url) {

        runOnUiThread(new Runnable() {
            public void run() {
                if(Sonuc){
                    Intent welcomeAct = new Intent(getBaseContext(), Welcome.class);
                    welcomeAct.putExtra("User",localUser);
                    Login.this.startActivity(welcomeAct);
                }
                else{
                    AlertDialog alertMessage = new AlertDialog.Builder(Login.this).create();
                    alertMessage.setMessage(Mesaj);
                    alertMessage.show();
                }
            }
        });

    }
}

【问题讨论】:

  • 请发布完整的 LogCat 输出。我们不能只用一条异常跟踪线来帮助您;完整的 LogCat 将指出是哪一行和哪个 API 导致了错误。

标签: java android facebook android-asynctask


【解决方案1】:

我解决了这个问题。我在 OnActivityResult 事件中编写了 AsyncTask 代码。验证过程完成后,我调用 AsyncTask。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多