0

我正在尝试让 Salesforce REST API 与 Android 和新的 android 编程一起使用,按照示例代码连接 SFDC http://wiki.developerforce.com/page/Getting_Started_with_the_Mobile_SDK_for_Android#Authentication

我正在尝试从 SFDC 获取一些记录并将它们显示在 android 应用程序中,看起来像在“client.sendAsync(sfRequest, new AsyncRequestCallback()”处进行异步调用时 - 抛出 NullPointerException。

我确实在网上看到了一些类似的问题,但没有帮助我。希望有人能指出我正确的方向来解决这个问题。非常感谢。

    public class GetAccountsActivity extends Activity {

    private PasscodeManager passcodeManager;

    private String soql;
    private String apiVersion;
    private RestClient client;
    private TextView resultText;
    private RestRequest sfRequest;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Get Api Version
        apiVersion = getString(R.string.api_version);
      //Create Query
        soql = "select id, name from Account limit 10";

      //  Setup view
        setContentView(R.layout.get_accounts_activity);
        ((TextView) findViewById(R.id.Acc_Title)).setText(apiVersion);
        // Passcode manager

        passcodeManager = ForceApp.APP.getPasscodeManager();
    }

    @Override 
    public void onResume() {
        super.onResume();   

    //Get SFClient
        // Login options
        String accountType = ForceApp.APP.getAccountType();
        LoginOptions loginOptions = new LoginOptions(
                null, // login host is chosen by user through the server picker 
                ForceApp.APP.getPasscodeHash(),
                getString(R.string.oauth_callback_url),
                getString(R.string.oauth_client_id),
                new String[] {"api"});

        new ClientManager(this, accountType, loginOptions).getRestClient(this, new RestClientCallback() {
            @Override
            public void authenticatedRestClient(RestClient client) {
                if (client == null) {
                    ForceApp.APP.logout(GetAccountsActivity.this);
                    return;
                }
                GetAccountsActivity.this.client = client;
            }
        });
          //Get Rest Object to query
            try {
                sfRequest = RestRequest.getRequestForQuery(apiVersion, soql);
                //Use SF Rest Client to send the request
                client.sendAsync(sfRequest, new AsyncRequestCallback(){
                    @Override
                    public void onSuccess(RestRequest request, RestResponse response){
                    //Check responses and display results
                    // EventsObservable.get().notifyEvent(EventType.RenditionComplete);
                    }//end onSuccess

                    @Override
                    public void onError(Exception exception) {
                        //printException(exception);
                        EventsObservable.get().notifyEvent(EventType.RenditionComplete);                
                    }//End Exception for Async Method
                });
            }catch (UnsupportedEncodingException e) {
                //printHeader("Could Send Query request");
                //printException(e);
                return;
            }
    }
}

在此处输入代码

4

1 回答 1

0

您正在从 onResume() 调用 client.sendAsync 但在调用 authenticatedRestClient 回调之前未设置客户端,您需要将 sendAsync 调用移动到 authenticatedRestClient 回调中。

于 2012-07-11T16:10:47.797 回答