gpt4 book ai didi

android - Twitter + OAuth 集成

转载 作者:行者123 更新时间:2023-11-29 14:57:13 25 4
gpt4 key购买 nike

任何人都可以使用 OAuth 帮助 Android + Twitter 集成。

我已经在研究 http://github.com/brione/Brion-Learns-OAuth当我发布状态更新时出现下面列出的错误...

WARN/System.err(190): org.apache.http.client.HttpResponseException: Unauthorized
WARN/System.err(190): at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:71)
WARN/System.err(190): at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:59)
WARN/System.err(190): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:657)
WARN/System.err(190): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:627)
WARN/System.err(190): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:616)
WARN/System.err(190): at com.test.twitter.BLOA$PostTask.doInBackground(BLOA.java:343)
WARN/System.err(190): at com.test.twitter.BLOA$PostTask.doInBackground(BLOA.java:1)
WARN/System.err(190): at android.os.AsyncTask$2.call(AsyncTask.java:185)
WARN/System.err(190): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:256)
WARN/System.err(190): at java.util.concurrent.FutureTask.run(FutureTask.java:122)
WARN/System.err(190): at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:648)
WARN/System.err(190): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:673)
WARN/System.err(190): at java.lang.Thread.run(Thread.java:1060)

我成功通过 OAuth 身份验证并获取 user_secret 和 user_token 并存储在首选项中...

所以问题在于使用 OAuth header 的 http 发布...

我的 Http Post 方法如下:

private class PostTask extends AsyncTask<String, Void, JSONObject> {

ProgressDialog postDialog;

@Override
protected void onPreExecute() {
postDialog = ProgressDialog.show(BLOA.this,
getText(R.string.tweet_progress_title),
getText(R.string.tweet_progress_text), true, // indeterminate
// duration
false); // not cancel-able
}

@Override
protected JSONObject doInBackground(String... params) {

JSONObject jso = null;
try {
HttpPost post = new HttpPost(
"http://twitter.com/statuses/update.json");
LinkedList<BasicNameValuePair> out = new LinkedList<BasicNameValuePair>();
out.add(new BasicNameValuePair("status", params[0]));
post.setEntity(new UrlEncodedFormEntity(out, HTTP.UTF_8));
post.setParams(getParams());
// sign the request to authenticate
mConsumer.sign(post);
String response = mClient.execute(post,
new BasicResponseHandler());
jso = new JSONObject(response);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (OAuthMessageSignerException e) {
e.printStackTrace();
} catch (OAuthExpectationFailedException e) {
e.printStackTrace();
} catch (OAuthCommunicationException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
} finally {

}
return jso;
}

// This is in the UI thread, so we can mess with the UI
protected void onPostExecute(JSONObject jso) {
postDialog.dismiss();
if (jso != null) { // authorization succeeded, the json object
// contains the user information
mEditor.setText("");
mLast.setText(getCurrentTweet(jso));
} else {
mLast.setText(getText(R.string.tweet_error));
}
}
}

最佳答案

虽然你在onResume()中成功收到了user_secret和user_token,你确定你原来的对象还是一样的吗?我在我的 Android 应用程序中遇到了这个问题。我会创建对象,但是当 onResume() 被调用时,它是 Activity 的一个全新实例,因为它在浏览器启动时从内存中释放出来。因此,当我尝试设置返回的 secret / token 对时,它不起作用。这更有可能发生在内存有限的设备上。有些人选择在调用之间保留必要的信息,而另一些人决定不启动默认浏览器 Intent ,而是托管一个嵌入式 webview,这样他们的原始 signpost-oauth 对象就不会超出范围。

OAuth instance state in Android

不确定这是否是问题所在,但也许值得一看。

关于android - Twitter + OAuth 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3717740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com