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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

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

Q&A

解決済

1回答

3220閲覧

アンドロイドスタジオでエラー

sala

総合スコア17

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

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

0グッド

0クリップ

投稿2020/09/02 02:56

AndroidもJavaも全くの素人です。
質問の仕方が間違っていたら申し訳ありません。

AndroidアプリでWebAPIから取得したデータを表示するサンプルプログラムを作成しています。
ネットで調べてサンプルを作成して、エミュレータで起動しました。
ボタンをクリックすると、アプリが消えます。
□ボタンを押すと画面があるので、落ちたわけではなさそうです。

ログを見ると、以下のログが出ています。

2020-09-02 11:46:23.126 14867-14910/com.example.myapplication E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
Process: com.example.myapplication, PID: 14867
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$4.done(AsyncTask.java:415)
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:305)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:923)
Caused by: java.lang.ExceptionInInitializerError
at okhttp3.internal.platform.Platform.get(Platform.java:85)
at okhttp3.OkHttpClient.newSslSocketFactory(OkHttpClient.java:263)
at okhttp3.OkHttpClient.<init>(OkHttpClient.java:229)
at okhttp3.OkHttpClient.<init>(OkHttpClient.java:202)
at com.example.myapplication.OkHttpGet.doInBackground(OkHttpGet.java:22)
at com.example.myapplication.OkHttpGet.doInBackground(OkHttpGet.java:12)
at android.os.AsyncTask$3.call(AsyncTask.java:394)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
at java.lang.Thread.run(Thread.java:923) 
Caused by: java.lang.IllegalStateException: Expected Android API level 21+ but was 30
at okhttp3.internal.platform.AndroidPlatform.buildIfSupported(AndroidPlatform.java:238)
at okhttp3.internal.platform.Platform.findPlatform(Platform.java:202)
at okhttp3.internal.platform.Platform.<clinit>(Platform.java:79)
at okhttp3.internal.platform.Platform.get(Platform.java:85) 
at okhttp3.OkHttpClient.newSslSocketFactory(OkHttpClient.java:263) 
at okhttp3.OkHttpClient.<init>(OkHttpClient.java:229) 
at okhttp3.OkHttpClient.<init>(OkHttpClient.java:202) 
at com.example.myapplication.OkHttpGet.doInBackground(OkHttpGet.java:22) 
at com.example.myapplication.OkHttpGet.doInBackground(OkHttpGet.java:12) 
at android.os.AsyncTask$3.call(AsyncTask.java:394) 
at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
at java.lang.Thread.run(Thread.java:923) 

この記事を参考にしました。
https://qiita.com/spring_i/items/7fe37907237a80ceab57

実装はこんな感じです。

MainActivity

1package com.example.myapplication; 2 3import androidx.appcompat.app.AppCompatActivity; 4import android.os.Bundle; 5import android.util.Log; 6import android.view.View; 7import android.widget.Button; 8 9public class MainActivity extends AppCompatActivity { 10 11 @Override 12 protected void onCreate(Bundle savedInstanceState) { 13 super.onCreate(savedInstanceState); 14 setContentView(R.layout.activity_main); 15 16 // GETボタンとPOSTボタン取得 17 Button getButton = findViewById(R.id.getButton); 18 19 // GETボタンがタップされた時 20 getButton.setOnClickListener(new View.OnClickListener() { 21 @Override 22 public void onClick(View v) { 23 OkHttpGet getTask = new OkHttpGet(); 24 getTask.execute(); 25 } 26 }); 27 } 28}

OkHttpGet

1package com.example.myapplication; 2 3import android.os.AsyncTask; 4import android.util.Log; 5 6import java.io.IOException; 7 8import okhttp3.OkHttpClient; 9import okhttp3.Request; 10import okhttp3.Response; 11 12public class OkHttpGet extends AsyncTask<String,String,String> { 13 @Override 14 protected String doInBackground(String... strings) { 15 16 // url 17 String url = "http://xxx.jp/"; 18 // レスポンスデータ 19 String strData = ""; 20 21 // OkHttpのインスタンス生成 22 OkHttpClient client = new OkHttpClient(); 23 24 // urlを含めてリクエストをビルド 25 Request request = new Request.Builder() 26 .url(url) 27 .get() 28 .build(); 29 30 try { 31 // リクエスト実行 32 Response response = client.newCall(request).execute(); 33 // レスポンスのbodyからデータ取得 34 strData = response.body().string(); 35 } catch (IOException e) { 36 e.printStackTrace(); 37 } 38 return strData; 39 } 40 41 @Override 42 protected void onPostExecute(String str) { 43 Log.d("Debug",str); 44 } 45}

Module:

1apply plugin: 'com.android.application' 2 3android { 4 compileSdkVersion 30 5 buildToolsVersion "30.0.2" 6 7 defaultConfig { 8 applicationId "com.example.myapplication" 9 minSdkVersion 26 10 targetSdkVersion 30 11 versionCode 1 12 versionName "1.0" 13 14 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 15 } 16 17 buildTypes { 18 release { 19 minifyEnabled false 20 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 21 } 22 } 23 24 compileOptions { 25 targetCompatibility = "8" 26 sourceCompatibility = "8" 27 } 28} 29 30dependencies { 31 implementation fileTree(dir: "libs", include: ["*.jar"]) 32 implementation 'androidx.appcompat:appcompat:1.2.0' 33 implementation 'androidx.constraintlayout:constraintlayout:2.0.1' 34 testImplementation 'junit:junit:4.12' 35 androidTestImplementation 'androidx.test.ext:junit:1.1.2' 36 androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' 37 implementation 'com.squareup.okhttp3:okhttp:3.14.1' 38}

activity_main.xml

1<?xml version="1.0" encoding="utf-8"?> 2<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:tools="http://schemas.android.com/tools" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent" 7 tools:context=".MainActivity"> 8 9 <TextView 10 android:id="@+id/textView3" 11 android:layout_width="wrap_content" 12 android:layout_height="wrap_content" 13 android:text="Hello World!" 14 app:layout_constraintBottom_toBottomOf="parent" 15 app:layout_constraintLeft_toLeftOf="parent" 16 app:layout_constraintRight_toRightOf="parent" 17 app:layout_constraintTop_toTopOf="parent" /> 18 19 <Button 20 android:id="@+id/getButton" 21 android:layout_width="wrap_content" 22 android:layout_height="wrap_content" 23 android:layout_marginStart="32dp" 24 android:layout_marginTop="32dp" 25 android:text="GET" 26 app:layout_constraintStart_toStartOf="parent" 27 app:layout_constraintTop_toTopOf="parent" /> 28 29 <TextView 30 android:id="@+id/textView" 31 android:layout_width="362dp" 32 android:layout_height="583dp" 33 android:layout_marginStart="32dp" 34 android:layout_marginTop="32dp" 35 app:layout_constraintStart_toStartOf="parent" 36 app:layout_constraintTop_toBottomOf="@+id/getButton" /> 37 38</androidx.constraintlayout.widget.ConstraintLayout>

素人なので、まずはJava入門からすべきなのでしょうが、時間が許さない事情があります。
解決のヒントでも頂けたら幸いです。
よろしくお願いいたします。

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

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

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

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

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

m.ts10806

2020/09/02 03:13

>まずはJava入門からすべきなのでしょうが、時間が許さない事情があります。 急がばまわれ。 ここで応急処置を学んだところで根本的な理解が出来てない状態では「他者に質問丸投げて回答がつくのを待つ」という、時間がかかるやり方を続けることになるだけです。
sala

2020/09/02 03:47

おっしゃる通りです。
guest

回答1

0

ベストアンサー

https://github.com/square/okhttp/issues/5816

多分これにあたっているので、okHttpのバージョンをあげてみてください。

https://search.maven.org/artifact/com.squareup.okhttp3/okhttp

ここによると、3.x系統の最新版は 3.14.9 です。

build.gradle

1 implementation 'com.squareup.okhttp3:okhttp:3.14.1' 23 implementation 'com.squareup.okhttp3:okhttp:3.14.9'

それでもダメなら最新の 4.8.1 を試すと良いでしょう。メジャーバージョンが変わっているので
多少使い方が変わっているかもしれません。

投稿2020/09/02 05:44

YakumoSaki

総合スコア2027

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

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

sala

2020/09/02 06:15

バージョンの問題でした。 okhttpのバージョンではなく、エミュレータのAndroidOSのバージョンを過去のものにしたら普通に起動しました。 きっとokhttpのバージョンを上げても対処可能であったろうと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問