0

我是 android 新手,我正在一个 android 应用程序中工作,该应用程序从 android 应用程序共享 twitter 推文,我收到一个错误,retrieveRequestToken raises “Communication with the service provider failed: null”。我从堆栈溢出(http://stackoverflow.com/questions/8534831/method-retrieverequesttoken-raises-communication-with-the-service-provider-fail)得到了解决方案。它说我们将能够通过 StrictMode 解决这个问题。我不知道如何应用这个。

这是马代码:

try {

            Log.i(TAG, "Retrieving request token from Google servers");
            final String url = provider.retrieveRequestToken(consumer,Constants.OAUTH_CALLBACK_URL);                                                
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url))
                    .setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP
                            | Intent.FLAG_ACTIVITY_NO_HISTORY
                            | Intent.FLAG_FROM_BACKGROUND);         
            context.startActivity(intent);



        } catch (Exception e) {

            Log.e("Error",e+"");
        }

请帮我。提前致谢。

4

2 回答 2

1

Try it -

private void enableStrictMode(Bundle savedInstanceState) {
    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
                                             .detectDiskReads()
                                             .detectDiskWrites()
                                             .detectNetwork()
                                             .penaltyLog()
                                             .build());

    super.onCreate(savedInstanceState);
}

@Override
public void onCreate(Bundle savedInstanceState) {
    enableStrictMode(savedInstanceState);
    setContentView(layout.main);
}
于 2012-04-23T07:25:19.203 回答
0

Suvan Roy 提供的答案将帮助您在控制台中看到一种方法需要太多时间(在 UI 线程中),但不是为什么它不起作用。

我的建议:

  • 激活 StricMode,但仅在 DEBUG 模式下激活,不适用于 Google Play 版本,并始终在控制台日志中检查“严格模式”错误

在您的应用程序类(如果有的话)和您的活动中执行此操作

    @Override 
    public void onCreate(Bundle savedInstanceState) {
       if (BuildConf.DEBUG){
             StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
                                             .detectDiskReads()
                                             .detectDiskWrites()
                                             .detectNetwork()
                                             .penaltyLog()
                                             .build());
    }
    super.onCreate(savedInstanceState);
       // your code here
    }

为了更好地利用资源,我建议还通过 Handler 或 AsynchTask 调用网络提供商。请参阅您的代码示例:

new Handler().post( new Runnable()
{
           @Override
           public void run()
           {
              Log.i(TAG, "Retrieving request token from Google servers");
              final String url = provider.retrieveRequestToken(consumer,Constants.OAUTH_CALLBACK_URL);                                                
              Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url))
                      .setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP
                              | Intent.FLAG_ACTIVITY_NO_HISTORY
                              | Intent.FLAG_FROM_BACKGROUND);         
              context.startActivity(intent);

           }
} );

我希望您找到了问题的根源并利用了我的建议;)

于 2014-09-18T12:16:15.977 回答