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

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

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

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

Android

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

Android Studio

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

Q&A

解決済

1回答

1073閲覧

Macからandroidへデータ通信

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

Android

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

Android Studio

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

0グッド

0クリップ

投稿2017/12/09 05:10

編集2017/12/09 06:18

私はandroidstudioでアプリ開発をしています。

ソケット通信をつかってmacからandroidに文字列を送信しようとしています。

#Mac側のコード

java

1import java.io.*; 2import java.net.*; 3import java.awt.*; 4import javax.swing.*; 5 6public class send { 7 8 9 10 public static void main(String[] args) { 11 try { 12 13 ServerSocket server = new ServerSocket(); 14 server.bind(new InetSocketAddress(4000)); 15 Socket socket = server.accept(); 16 OutputStream os = socket.getOutputStream(); 17 18 BufferedWriter bufwriter 19 = new BufferedWriter(new OutputStreamWriter( os ) ); 20 bufwriter.write("こんにちは"); 21 //bufwriter.newLine(); 22 bufwriter.close(); 23 socket.close(); 24 25 } catch (IOException e) { 26 e.printStackTrace(); 27 } 28 } 29}

#android側のコード

はじめにAndroidManifestの方に
<uses-permission android:name="android.permission.INTERNET"></uses-permission>を追加しました。

java

1import android.os.AsyncTask; 2import android.support.v7.app.AppCompatActivity; 3import android.os.Bundle; 4import android.view.View; 5import android.widget.*; 6import java.io.*; 7import java.net.*; 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 Button button = findViewById(R.id.button); 16 17 button.setOnClickListener(new View.OnClickListener() { 18 @Override 19 public void onClick(View view) { 20 21 connect(); 22 23 } 24 }); 25 } 26 27 28 public void connect() { 29 new AsyncTask<Void, Void, String>() { 30 31 32 @Override 33 protected String doInBackground(Void... voids) { 34 35 try { 36 Socket socket = new Socket("macのアドレス",4000); 37 38 BufferedReader reader = new BufferedReader( 39 new InputStreamReader(socket.getInputStream())); 40 41 String line; 42 line = reader.readLine(); 43 44 TextView textView = findViewById(R.id.text_view); 45 46 47 textView.setText(line); 48 49 50 51 52 }catch (IOException e) { 53 e.printStackTrace(); 54 } 55 56 return null; 57 } 58 }.execute(); 59 } 60} 61

AsyncTaskを使わないと強制終了してしまうので書き加えて実行しました。

androidでアプリを起動してボタンを押した後、mac側でjava sendをすると何もおきませんがもう一度ボタンを押すと「こんにちは」と表示されたと同時にアプリが終了してしまいます。

どこが間違っているのかわかる方がいましたらご教授ください

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

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

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

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

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

guest

回答1

0

ベストアンサー

doInBackgroundの中でUIを操作することはできません。AsyncTaskでは、doInBackgroundの戻り値がonPostExecuteに渡ります。onPostExecuteではUIを操作できますので、ここでその値を受け取って表示すればいいでしょう。

Java

1 new AsyncTask<Void, Void, String>() { 2 3 @Override 4 protected String doInBackground(Void... voids) { 5 6 // 中略 7 8 return line; 9 } 10 11 12 @Override 13 protected void onPostExecute(String result) { 14 TextView textView = findViewById(R.id.text_view); 15 textView.setText(result); 16 } 17 }

なお、doInBackgroundが繰り返し継続される処理で、その途中経過を画面表示したい場合、onProgressUpdateというメソッドを利用することになります。それも調べておくといいと思います。

ASYNCTASKを使って非同期処理を行う

投稿2017/12/09 08:04

編集2017/12/09 08:11
keicha_hrs

総合スコア6768

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

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

退会済みユーザー

退会済みユーザー

2017/12/09 17:37

次に連続表示をしようとしていたので助かりました!ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問