質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

657閲覧

AndroidでTwitterAPIを使う方法

hama1185

総合スコア18

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2018/09/03 09:32

編集2018/09/03 09:42

前提・実現したいこと

https://techbooster.org/android/5669/#more-5669
のプログラムをkotlinで実装したい

発生している問題・エラーメッセージ

logcat上

09-03 18:02:06.440 2840-3321/? E/ActivityManager: Sending non-protected broadcast com.sonymobile.intent.action.POWER_BACK_OFF_FACTOR_CHANGED from system 3574:com.android.phone/1001 pkg com.android.phone java.lang.Throwable at com.android.server.am.ActivityManagerService.broadcastIntentLocked(ActivityManagerService.java:18557) at com.android.server.am.ActivityManagerService.broadcastIntent(ActivityManagerService.java:19125) at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:505) at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2915) at android.os.Binder.execTransact(Binder.java:565)

Run上

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.hamataku.dimensionprac, PID: 26919 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.hamataku.dimensionprac/com.example.hamataku.dimensionprac.MainActivity}: android.os.NetworkOnMainThreadException at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2955) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3030) at android.app.ActivityThread.-wrap11(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696) at android.os.Handler.dispatchMessage(Handler.java:105) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6938) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374) Caused by: android.os.NetworkOnMainThreadException at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1448) at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:102) at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:90) at java.net.InetAddress.getAllByName(InetAddress.java:787) at com.android.okhttp.Dns$1.lookup(Dns.java:39) at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:200) at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:148) at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:90) at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:190) at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:142) at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:104) at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:410) at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:343) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:489) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:131) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:262) at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:218) at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getOutputStream(Unknown Source:0) at twitter4j.HttpClientImpl.handleRequest(HttpClientImpl.java:143) at twitter4j.HttpClientBase.request(HttpClientBase.java:57) at twitter4j.HttpClientBase.post(HttpClientBase.java:86) at twitter4j.TwitterImpl.post(TwitterImpl.java:2120) at twitter4j.TwitterImpl.updateStatus(TwitterImpl.java:228) at com.example.hamataku.dimensionprac.MainActivity.onCreate(MainActivity.kt:34) at android.app.Activity.performCreate(Activity.java:7183) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2908)

該当のソースコード

MainActivity.kt

1open class MainActivity : AppCompatActivity() { 2//ここは書いてます 3 val tokenStr : String = "" 4 val tokenSecretStr : String = "" 5 val apiKey : String = "" 6 val secretKey : String = "" 7 override fun onCreate(savedInstanceState: Bundle?) { 8 super.onCreate(savedInstanceState) 9 setContentView(R.layout.activity_main) 10 //twitterオブジェクトの作成 11 var tw : Twitter = TwitterFactory().getInstance() 12 13 //AccessTokenオブジェクトの作成 14 var at = AccessToken(tokenStr, tokenSecretStr) 15 16 //Consumer keyとConsumer key seacretの設定 17 tw.setOAuthConsumer(apiKey, secretKey) 18 19 //AccessTokenオブジェクトを設定 20 tw.setOAuthAccessToken(at) 21 22 try { 23 tw.updateStatus("つぶやきたい文字列") 24 } catch (e : TwitterException) { 25 e.printStackTrace() 26 if(e.isCausedByNetworkIssue){ 27 Toast.makeText(this, "ネットーワークの問題です", Toast.LENGTH_LONG); 28 } 29 } 30 } 31}

Oauth.kt

1public class Oauth : MainActivity(){ 2 var req : RequestToken? = null 3 var oauth : OAuthAuthorization? = null 4 5 override fun onCreate(savedInstanceState: Bundle?) { 6 super.onCreate(savedInstanceState) 7 setContentView(R.layout.activity_main) 8 var button : Button = findViewById(R.id.button1) 9 10 val listener = View.OnClickListener { 11 v: View? -> 12 executeOauth() 13 } 14 button.setOnClickListener(listener) 15 } 16 17 private fun executeOauth(){ 18 19 var config : Configuration = ConfigurationContext.getInstance() 20 oauth = OAuthAuthorization(config) 21 oauth?.setOAuthConsumer(apiKey, secretKey) 22 try { 23 req = oauth?.getOAuthRequestToken("callback://CallBackActivity") 24 }catch (e : TwitterException) { 25 e.printStackTrace() 26 } 27 var uri : String? = req?.getAuthorizationURL() 28 startActivityForResult(Intent(Intent.ACTION_VIEW, Uri.parse(uri)), 0) 29 30 } 31}

CallBackActivity.kt

1override fun onCreate(savedInstanceState: Bundle?) { 2 super.onCreate(savedInstanceState) 3 setContentView(R.layout.callback) 4 5 var token : AccessToken? = null 6 7 //Twitterの認証画面から発行されるIntentからUriを取得 8 var uri : Uri = getIntent().getData() 9 10 if(uri != null && uri.toString().startsWith("callback://CallBackActivity")){ 11 //oauth_verifierを取得する 12 var verifier : String = uri.getQueryParameter("oauth_verifier") 13 try { 14 //AccessTokenオブジェクトを取得 15 var moauth : Oauth = Oauth() 16 token = moauth.oauth?.getOAuthAccessToken(moauth.req, verifier) 17 } catch (e : TwitterException) { 18 e.printStackTrace() 19 } 20 }else{} 21 22 var textView : TextView = findViewById(R.id.textView1) 23 var cs : CharSequence = "token:" + token?.getToken() + "\r\n" + "token secret:" + token?.getTokenSecret(); 24 textView.setText(cs); 25 }

補足情報(FW/ツールのバージョンなど)

Android8.0を使用
AndroidStudio3.14
libsにはtwitter4j-core-4.0.7.jarを使用しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

logcat上で発生しているエラーメッセージの意味はわかりませんが、
Run上のエラーメッセージでは
「android.os.NetworkOnMainThreadException」
と出力されており、これはそのままメインスレッド内でネットワーク通信をしようとするとエラーが投げられます。

「android 非同期処理」で検索をして、

kotlin

1tw.updateStatus("つぶやきたい文字列")

の処理を別スレッド上で行う必要があります。

投稿2018/09/03 10:03

Luecy2

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hama1185

2018/09/03 15:28

ありがとうございます!解決しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問