1

当我使用 scribe 库将图像发布到 twitter 时,出现以下异常

org.scribe.exceptions.OAuthException: Response body is incorrect. Can't extract token and secret from this: '<?xml version="1.0" encoding="UTF-8"?

我正在使用 scribe1.3.3 库。

我在谷歌搜索这个异常,但没有找到任何解决方案。

源代码:

  OAuthService oAuth = new ServiceBuilder()
                    .provider(TwitterApi.class)
                    .apiKey("6JyIkj71ZqG4wk3YF0Y4hw")        // REPLACE WITH YOUR OWN!!!
                    .apiSecret("sJl9aRVqlEt7nxlKvpMVK6tLULz5FSQ2KUOW0yie4")  // REPLACE WITH YOUR OWN!!!
                    .callback(TwitterDialog.redirectedurl)             // REPLACE WITH YOUR OWN!!!
                    .build();
 Uri uri = Uri.parse(TwitterDialog.redirectedurl);
            Token requestToken = new Token( uri.getQueryParameter("oauth_token"),uri.getQueryParameter("oauth_verifier"));
            Verifier verifier = new Verifier(uri.getQueryParameter("oauth_verifier"));
if(verifier!=null){
                Log.e("verifier created","created");
            }

            Token accesstoken=oAuth.getAccessToken(requestToken, verifier);


            Log.e("raw resp", accesstoken.getRawResponse());

 if(accesstoken!=null){

           Log.e("hello","hhello");
         Log.e("access token","hi"+accesstoken.toString());
        OAuthRequest request = new OAuthRequest(Verb.POST, "https://upload.twitter.com/1/statuses/update_with_media.json");



    oAuth.signRequest(accesstoken, request);  // ENTER USER'S ACCESS TOKEN

// ADD MULTIPART FORM

    try
    {
        MultipartEntity entity = new MultipartEntity();

        entity.addPart("status", new StringBody("insert vacuous statement here"));       // THIS IS THE TWITTER MESSAGE
        entity.addPart("media", new FileBody(new File("/storage/sdcard0/HelloAlbum/1361964305003.jpg")));  // THIS IS THE PHOTO TO UPLOAD

        ByteArrayOutputStream out = new ByteArrayOutputStream();
        entity.writeTo(out);

        request.addPayload(out.toByteArray());
        request.addHeader(entity.getContentType().getName(), entity.getContentType().getValue());
    }
    catch (UnsupportedEncodingException e) {e.printStackTrace();}
    catch (IOException e) {e.printStackTrace();}

// SEND REQUEST

    try {JSONObject response = new JSONObject (request.send().getBody());}
    catch (JSONException e) {Log.e("TOUR_APP_TAG", "JSONException Thrown: " + e.getMessage());}

   }

日志输出:

     03-05 15:52:24.810: E/AndroidRuntime(28777): FATAL EXCEPTION: main
03-05 15:52:24.810: E/AndroidRuntime(28777): org.scribe.exceptions.OAuthException: Response body is incorrect. Can't extract token and secret from this: '<?xml version="1.0" encoding="UTF-8"?>
03-05 15:52:24.810: E/AndroidRuntime(28777): <hash>
03-05 15:52:24.810: E/AndroidRuntime(28777):   <request>/oauth/access_token</request>
03-05 15:52:24.810: E/AndroidRuntime(28777):   <error>Invalid / expired Token</error>
03-05 15:52:24.810: E/AndroidRuntime(28777): </hash>
03-05 15:52:24.810: E/AndroidRuntime(28777): '
03-05 15:52:24.810: E/AndroidRuntime(28777):    at org.scribe.extractors.TokenExtractorImpl.extract(TokenExtractorImpl.java:41)
03-05 15:52:24.810: E/AndroidRuntime(28777):    at org.scribe.extractors.TokenExtractorImpl.extract(TokenExtractorImpl.java:27)
03-05 15:52:24.810: E/AndroidRuntime(28777):    at org.scribe.oauth.OAuth10aServiceImpl.getAccessToken(OAuth10aServiceImpl.java:103)
03-05 15:52:24.810: E/AndroidRuntime(28777):    at org.scribe.oauth.OAuth10aServiceImpl.getAccessToken(OAuth10aServiceImpl.java:84)
03-05 15:52:24.810: E/AndroidRuntime(28777):    at org.scribe.oauth.OAuth10aServiceImpl.getAccessToken(OAuth10aServiceImpl.java:89)
03-05 15:52:24.810: E/AndroidRuntime(28777):    at com.android.twitter.TwitterActivity$1.onComplete(TwitterActivity.java:317)
03-05 15:52:24.810: E/AndroidRuntime(28777):    at com.twitter.android.TwitterApp$1.handleMessage(TwitterApp.java:236)
03-05 15:52:24.810: E/AndroidRuntime(28777):    at android.os.Handler.dispatchMessage(Handler.java:99)
03-05 15:52:24.810: E/AndroidRuntime(28777):    at android.os.Looper.loop(Looper.java:137)
03-05 15:52:24.810: E/AndroidRuntime(28777):    at android.app.ActivityThread.main(ActivityThread.java:5039)
03-05 15:52:24.810: E/AndroidRuntime(28777):    at java.lang.reflect.Method.invokeNative(Native Method)
03-05 15:52:24.810: E/AndroidRuntime(28777):    at java.lang.reflect.Method.invoke(Method.java:511)
03-05 15:52:24.810: E/AndroidRuntime(28777):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
03-05 15:52:24.810: E/AndroidRuntime(28777):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
03-05 15:52:24.810: E/AndroidRuntime(28777):    at dalvik.system.NativeStart.main(Native Method)

为什么在 TSQL 中出现 DATETIME 转换错误?

我知道关于这个话题有很多问题,甚至是我不久前问过自己的一个(这里)。现在我遇到了一个不同的问题,我自己和我的同事都不知道这种奇怪行为的原因是什么。

我们有一个相对简单的 SQL 语句,如下所示:

SELECT
    CONVERT(DATETIME, SUBSTRING(MyText, CHARINDEX('Date:', MyText) + 8, 16) AS MyDate,
    SomeOtherColumn,
    ...
FROM
    MyTable
INNER JOIN MyOtherTable
    ON MyTable.ID = MyOtherTable.MyTableID
WHERE
    MyTable.ID > SomeValue AND
    MyText LIKE 'Date: %'

这不是我的数据库,也不是我的 SQL 语句,而且我没有创建出色的模式来将日期时间值存储在 varchar 列中,所以请忽略这一点。

我们现在面临的问题是 SQL 转换错误 241(“从字符串转换日期和/或时间时转换失败。”)。

现在我知道查询优化器可能会更改执行计划,在尝试转换后可以使用 WHERE 子句过滤结果,但真正奇怪的是,当我删除所有 WHERE 子句时,我没有收到任何错误.

当我在上面的语句中添加一行时,我也没有收到任何错误,如下所示:

SELECT
    MyText, -- This is the added line
    CONVERT(DATETIME, SUBSTRING(MyText, CHARINDEX('Date:', MyText) + 8, 16) AS MyDate,
    ...

一旦我删除它,我就会再次收到转换错误。手动检查 MyText 列中的值而不尝试转换它们并不表明存在任何可能导致问题的记录。

转换错误的原因是什么?当我还选择列作为 SELECT 语句的一部分时,为什么我没有遇到它?

更新

这里是执行计划,虽然我认为它不会有帮助。 第1部分 在此处输入图像描述

4

0 回答 0