如何在android中应用StrictMode

时间:2012-04-23 07:18:31

标签: android

我是Android的新手我在Android应用程序中工作,从Android应用程序分享Twitter推文,我收到错误retrieveRequestToken引发“与服务提供商的通信失败:null”。我从堆栈流程中得到了一个解决方案(http://stackoverflow.com/questions/8534831/method-retrieverequesttoken-raises-communication-with-the-service-provider-fail)。它说我们将能够通过StrictMode解决这个问题。我不知道如何申请。

这是ma代码:

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+"");
        }

请帮帮我。 提前谢谢。

2 个答案:

答案 0 :(得分:1)

试一试 -

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);
}

答案 1 :(得分: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);

           }
} );

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