Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mastodonアカウントを含む設定バックアップをインポートするとクラッシュ #185

Closed
shibafu528 opened this issue Oct 25, 2018 · 1 comment
Labels
🙅 blocker bug Something isn't working regression
Milestone

Comments

@shibafu528
Copy link
Owner

shibafu528 commented Oct 25, 2018

概要

Mastodonアカウントを含むaccounts.jsonをインポートするとクラッシュする。

再現手順

  1. Mastodonアカウントを含む認証情報をエクスポート
  2. 認証情報をインポート
  3. 💥

原因

認証情報のインポート後にアカウントの情報を最新化するための取得処理を実行しているが、そこで全てTwitterとみなして実行してるせい。
2.1対応の漏れと言えるが、実は古いaccounts.jsonでなければ、ここで取得している情報はすぐには必要ないので実行しなくていい。
(2.0以下のy4aでエクスポートしたaccounts.jsonの場合、NameやScreenNameがないのでここで取得が必要)

Twitterアカウント、かつNameやScreenNameが欠けている場合のみの実行で良いと思われる。

val records = ConfigFileUtility.importFromJson(AuthUserRecord::class.java, readFile("accounts.json"))
database.importRecordMaps(AuthUserRecord::class.java, records)
val twitter = twitterService.getTwitterOrThrow(null)
records.forEach {
twitter.oAuthAccessToken = AccessToken(
it[CentralDatabase.COL_ACCOUNTS_ACCESS_TOKEN].toString(),
it[CentralDatabase.COL_ACCOUNTS_ACCESS_TOKEN_SECRET].toString()
)
val user = twitter.showUser(twitter.oAuthAccessToken.userId)
database.updateRecord(DBUser(user))
}

環境

Yukari 2.1.0.1685-dev (linkage 181025 8981201)
OS Android 8.0.0
Device Sony SO-02J

Logcat

java.lang.RuntimeException: An error occurred while executing doInBackground()
	at android.os.AsyncTask$3.done(AsyncTask.java:353)
	at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
	at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
	at java.util.concurrent.FutureTask.run(FutureTask.java:271)
	at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
	at java.lang.Thread.run(Thread.java:764)
Caused by: 400:The request was invalid. An accompanying error message will explain why. This is the status code will be returned during version 1.0 rate limiting(https://dev.twitter.com/pages/rate-limiting). In API v1.1, a request without authentication is considered invalid and you will get this response.
message - Bad Authentication data.
code - 215

Relevant discussions can be found on the Internet at:
	http://www.google.co.jp/search?q=c4de75bb or
	http://www.google.co.jp/search?q=4071a3ef
TwitterException{exceptionCode=[c4de75bb-4071a3ef], statusCode=400, message=Bad Authentication data., code=215, retryAfter=-1, rateLimitStatus=null, version=4.0.7-SNAPSHOT}
	at twitter4j.AlternativeHttpClientImpl.handleRequest(AlternativeHttpClientImpl.java:127)
	at twitter4j.HttpClientBase.request(HttpClientBase.java:57)
	at twitter4j.HttpClientBase.get(HttpClientBase.java:75)
	at twitter4j.TwitterImpl.get(TwitterImpl.java:2066)
	at twitter4j.TwitterImpl.showUser(TwitterImpl.java:1104)
	at shibafu.yukari.activity.BackupActivity$onClickExecute$1$doInBackground$3.invoke(BackupActivity.kt:155)
	at shibafu.yukari.activity.BackupActivity$onClickExecute$1$doInBackground$3.invoke(BackupActivity.kt:105)
	at shibafu.yukari.util.AndroidExtenderKt.forEach(AndroidExtender.kt:107)
	at shibafu.yukari.activity.BackupActivity$onClickExecute$1.doInBackground(BackupActivity.kt:141)
	at shibafu.yukari.activity.BackupActivity$onClickExecute$1.doInBackground(BackupActivity.kt:105)
	at android.os.AsyncTask$2.call(AsyncTask.java:333)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	... 4 more
@shibafu528
Copy link
Owner Author

久々に操作してみたら、今度はProvider情報がエクスポートされていなくてクラッシュしてしまった。accounts.jsonに含めたほうが管理しやすいかな?

Logcat

2019-06-24 00:22:48.509 23209-23209/shibafu.yukari.alpha E/AndroidRuntime: FATAL EXCEPTION: main
    Process: shibafu.yukari.alpha, PID: 23209
    java.lang.RuntimeException: Unable to create service shibafu.yukari.service.TwitterService: java.lang.IllegalStateException: cursor.getString(cursor.…base.COL_PROVIDERS_HOST)) must not be null
        at android.app.ActivityThread.handleCreateService(ActivityThread.java:3950)
        at android.app.ActivityThread.access$1500(ActivityThread.java:220)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1868)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7319)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:934)
     Caused by: java.lang.IllegalStateException: cursor.getString(cursor.…base.COL_PROVIDERS_HOST)) must not be null
        at shibafu.yukari.database.Provider.<init>(Provider.kt:34)
        at shibafu.yukari.twitter.AuthUserRecord.<init>(AuthUserRecord.java:77)
        at shibafu.yukari.twitter.AuthUserRecord.getAccountsList(AuthUserRecord.java:149)
        at shibafu.yukari.service.TwitterService.reloadUsers(TwitterService.java:418)
        at shibafu.yukari.service.TwitterService.onCreate(TwitterService.java:222)
        at android.app.ActivityThread.handleCreateService(ActivityThread.java:3938)
        at android.app.ActivityThread.access$1500(ActivityThread.java:220) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1868) 
        at android.os.Handler.dispatchMessage(Handler.java:107) 
        at android.os.Looper.loop(Looper.java:214) 
        at android.app.ActivityThread.main(ActivityThread.java:7319) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:934) 

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🙅 blocker bug Something isn't working regression
Projects
None yet
Development

No branches or pull requests

1 participant