0

私はAndroidを初めて使用し、AndroidアプリケーションからのTwitterツイートを共有するAndroidアプリケーションで作業していますが、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+"");
        }

私を助けてください。前もって感謝します。

4

2 に答える 2

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);
}
于 2012-04-23T07:25:19.203 に答える
0

Suvan Royによって提供された回答は、1つのメソッドが(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
    }

リソースをより有効に活用するために、ハンドラーまたは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 に答える