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

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

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

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Java

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

Android

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

Q&A

1回答

707閲覧

AsyncTask #onPostExecute(String result)のresultを呼び出し元のActivityへ返す

退会済みユーザー

退会済みユーザー

総合スコア0

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Java

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

Android

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

0グッド

0クリップ

投稿2018/10/27 10:56

Androidのアプリを作成しています。

AsyncTaskでサーバーサイドから取得したJSONを、呼び出し元のActivityへ渡したいです。

なので、onPostExecuteの引数を呼び出し元のActivityへ渡す方法を考えていますが
どうして良いか、よくわかりません。
onPostExecuteから、resultを呼び出し元ではないAcitivityへintentさせれば渡せるのですが
呼び出し元のActivityへresultを渡すことができません。

Java

1 2 3 4public class TestAsync extends AsyncTask<String,String,String> { 5 6 private Activity m_activity; 7 public String paramA; 8 public String paramB; 9 10 public TestAsync(Activity act){ 11 this.m_activity = act; 12 } 13 14 @Override 15 protected String doInBackground(String...parameter){ 16 paramA = parameter[0]; 17 paramB = parameter[1]; 18 19 String urls = "JSONを取得するURL"; 20 URL url = null; 21 HttpURLConnection connect = null; 22 OutputStream out = null; 23 StringBuilder response = new StringBuilder(); 24 25 26 try{ 27 28 url = new URL(urls); 29 connect = (HttpURLConnection)url.openConnection(); 30 connect.setRequestMethod("POST"); 31 connect.setRequestProperty("Content-Type","application/json"); 32 connect.setRequestProperty("Accept","application/json"); 33 connect.setDoOutput(true); 34 connect.setDoInput(true); 35 connect.connect(); 36 37 38 JSONObject jsonOjt = new JSONObject(); 39 try{ 40 json.put("paramA",paramA); 41 json.put("paramB",paramB); 42 43 }catch (JSONException e){ 44 e.printStackTrace(); 45 } 46 47 48 OutputStreamWriter writer = new OutputStreamWriter(connect.getOutputStream()); 49 writer.write(json.toString()); 50 writer.flush(); 51 writer.close(); 52 53 InputStream inpStr = connect.getInputStream(); 54 String encoding = connect.getContentEncoding(); 55 if(encoding == null){ 56 encoding ="UTF-8"; 57 } 58 InputStreamReader inReader = new InputStreamReader(inpStr,encoding); 59 BufferedReader bufre = new BufferedReader(inReader); 60 String line = null; 61 while((line = bufre.readLine()) != null){ 62 response.append(line); 63 } 64 bufre.close(); 65 inReader.close(); 66 inpStr.close(); 67 68 }catch (IOException e){ 69 e.printStackTrace(); 70 } 71 72 return response.toString(); 73 } 74 75 @Override 76 protected void onPostExecute(String result) { 77 78 //resultを呼び出し元のActivityへ渡したい。 79 } 80 81 82} 83

調べても、なかなか見つけられずにいます。
どのようにしたら良いでしょうか。。。

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

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

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

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

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

guest

回答1

0

AsyncTaskでサーバーサイドから取得したJSONを、呼び出し元のActivityへ渡したい

結局いつ取得が終了したのかが分かればいいのだと思いますので
WeakReferenceを使ってGCでのお掃除を待つという手もありますが
カスタムリスナーを設定すれば良いのではないかと思います

testTask = new TestTask(); // Listenerを設定 testTask.setListener(createListener()); testTask.execute(0); ... private TestTask.Listener createListener() { return new TestTask.Listener() { @Override public void onSuccess(int count) { textView.setText(String.valueOf(count)); } }; } ... @Override protected void onPostExecute(Integer result) { if (listener != null) { listener.onSuccess(result); } } void setListener(Listener listener) { this.listener = listener; } interface Listener { void onSuccess(int count); }

非同期処理 AsyncTaskの使い方

投稿2018/10/28 02:58

aja

総合スコア3733

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問