質問編集履歴

4 ソースコード変更

kt3302y

kt3302y score 25

2016/01/14 12:24  投稿

Android アプリ 実行エラー
Android Studioを使用してチャットクライアントアプリを作成しています.
使用としてはサーバーのIPアドレスとポート番号を入力してConnectボタンをクリックするとサーバーに接続とチャット受信を行い,送信ボタンはテキストに入力されたメッセージをサーバーに送信する役割を担っています.
メッセージを送信できない問題が発生しました.
これは何が原因で起こっているものなのでしょうか
教えてください.
参考までにソースコードなども載せておきます.
```MainActivity.java
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity
       implements ChatConnectTask.ChatConnectTaskCallback,ChatSendTask.ChatSendTaskCallback{
   private ChatConnectTask connectTask;
   private ChatSendTask sendTask;
   private EditText inputIP;
   private EditText inputPort;
   private EditText inputMessage;
   private TextView viewChat;
   private Button buttonConnect;
   private Button buttonSend;
   private String param1;
   private int param2;
   private String param3;
   private View view;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
       setSupportActionBar(toolbar);
       inputIP = (EditText)findViewById(R.id.inputIP);
       inputPort = (EditText)findViewById(R.id.inputPort);
       inputMessage = (EditText)findViewById(R.id.inputMessage);
       buttonConnect = (Button)findViewById(R.id.buttonConnect);
       buttonSend = (Button)findViewById(R.id.buttonSend);
       viewChat = (TextView)findViewById(R.id.viewChat);
       FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
       fab.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View view) {
               Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                       .setAction("Action", null).show();
           }
       });
   }
   //connectボタンでソケット接続&メッセージ受信
   public void handleButtonConnectAction(View view){
       String param1 = inputIP.getText().toString();
       int param2 = Integer.parseInt(inputPort.getText().toString());
       Param param = new Param(param1,param2);
       connectTask = new ChatConnectTask(this);
       connectTask.execute(param);
   }
   //送信ボタンでメッセージを送信
   public void handleButtonSendAction(View view){
       param3 = inputMessage.getText().toString();
       Param param = new Param(param1,param2,param3);
       sendTask = new ChatSendTask(this);
       sendTask.execute(param);
   }
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
       // Inflate the menu; this adds items to the action bar if it is present.
       getMenuInflater().inflate(R.menu.menu_main, menu);
       return true;
   }
   @Override
   public boolean onOptionsItemSelected(MenuItem item) {
       // Handle action bar item clicks here. The action bar will
       // automatically handle clicks on the Home/Up button, so long
       // as you specify a parent activity in AndroidManifest.xml.
       int id = item.getItemId();
       //noinspection SimplifiableIfStatement
       if (id == R.id.action_settings) {
           return true;
       }
       return super.onOptionsItemSelected(item);
   }
   @Override
   public void onPreExecute() {
   }
   @Override
   public void onProgressUpdate(String... message) {
       viewChat.setText(message[0].toString());
   }
   @Override
   public void onPostExecute(String result) {
       Toast.makeText(this,result,Toast.LENGTH_LONG);
   }
}
```
```ChatConnectTask.java
import android.os.AsyncTask;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
/**
*/
public class ChatConnectTask extends AsyncTask<Param,String,String > {
   private ChatConnectTaskCallback mCallback;
   private Param param = new Param();
   public ChatConnectTask(ChatConnectTaskCallback callback){
       this.mCallback = callback;
   }
   @Override
   protected void onPreExecute(){
       if(mCallback != null)
           mCallback.onPreExecute();
   }
   protected String doInBackground(Param... param){
       String server = param[0].param1;
       // Server Portからポート番号を取得
       int port = param[0].param2;
       Socket socket = null;
       try {
           // ソケットを作成
           socket = new Socket();
           // 指定されたホスト名(IPアドレス)とポート番号でサーバに接続する
           socket.connect(new InetSocketAddress(server, port));
           while(socket != null) {
               // 接続されたソケットの入力ストリームを取得し,データ入力ストリームを連結
               InputStream is = socket.getInputStream();
               DataInputStream dis = new DataInputStream(is);
               // データの受信
               String receiveMessage = dis.readUTF();
               //受信したデータに改行をつけてメッセージを追加していく
               String showMessage = receiveMessage + "\r\n";
               // 受信したデータを表示
               publishProgress(showMessage);
           }
       } catch (Exception e) {
           e.printStackTrace();
       } finally {
           // ソケットをクローズする
           if (socket != null) {
               try {
                   socket.close();
               } catch (IOException e) {}
           }
       }
       return "チャットを終了します";
   }
   @Override
   protected void onProgressUpdate(String... message){
       if(mCallback != null)
           mCallback.onProgressUpdate(message);
   }
   @Override
   protected void onPostExecute(String result ){
       if(mCallback != null) {
           mCallback.onPostExecute(result);
       }
   }
   public interface ChatConnectTaskCallback{
       void onPreExecute();
       void onProgressUpdate(String... message);
       void onPostExecute(String result);
   }
}
```
```ChatSendTask.java
package jp.ac.id140441007_meijo_u.task81;  
 
 
import android.os.AsyncTask;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
/**
* Created by 大嗣 on 2016/01/07.
*/
public class ChatSendTask extends AsyncTask<Param,String,String > {
   private ChatSendTaskCallback mCallback;
   private Param param = new Param();
   public ChatSendTask(ChatSendTaskCallback callback){
       this.mCallback = callback;
   }
   @Override
   protected void onPreExecute(){
       if(mCallback != null)
           mCallback.onPreExecute();
   }
   protected String doInBackground(Param... param){
       String server = param[0].param1;
       // Server Portからポート番号を取得
       int port = param[0].param2;
       Socket socket = null;
       try {
           // ソケットを作成  
           socket = new Socket();  
           // 指定されたホスト名(IPアドレス)とポート番号でサーバに接続する
           socket.connect(new InetSocketAddress(server, port));
               // 接続されたソケットの入力ストリームを取得し,データ入力ストリームを連結
               OutputStream os = socket.getOutputStream();
               DataOutputStream dos = new DataOutputStream(os);
               // テキストフィールドの文字を取得
               String sendMessage = param[0].param3;
               // 取得したデータを送信
               dos.writeUTF(sendMessage);
       dos.fush();
// 接続されたソケットの入力ストリームを取得し,データ入力ストリームを連結
           OutputStream os = socket.getOutputStream();
           DataOutputStream dos = new DataOutputStream(os);
// テキストフィールドの文字を取得
           String sendMessage = param[0].param3;
           dos.write(sendMessage.getBytes());
           dos.flush();
       } catch (Exception e) {
           e.printStackTrace();
       } finally {
           // ソケットをクローズする
           if (socket != null) {
               try {
                   socket.close();
               } catch (IOException e) {}
           }
       }
       return "メッセージを送信しました";
   }
   @Override
   protected void onProgressUpdate(String... message){
       if(mCallback != null)
           mCallback.onProgressUpdate(message);
   }
   @Override
   protected void onPostExecute(String param){
   protected void onPostExecute(String result){
       if(mCallback != null) {
           mCallback.onPostExecute(param);
           mCallback.onPostExecute(result);
       }
   }
   public interface ChatSendTaskCallback{
       void onPreExecute();
       void onProgressUpdate(String... message);
       void onPostExecute(String param);
       void onPostExecute(String result);
   }
}
```
```
  • Java

    18429 questions

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

  • Android

    8264 questions

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

3 ソースコードの追加と変更

kt3302y

kt3302y score 25

2016/01/12 09:43  投稿

Android アプリ 実行エラー
Android Studioを使用してチャットクライアントアプリを作成しています.
使用としてはサーバーのIPアドレスとポート番号を入力してConnectボタンをクリックするとサーバーに接続とチャット受信を行い,送信ボタンはテキストに入力されたメッセージをサーバーに送信する役割を担っています.
メッセージを送信できない問題が発生しました.
これは何が原因で起こっているものなのでしょうか
教えてください.
参考までにソースコードなども載せておきます.
```MainActivity.java
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity
       implements ChatConnectTask.ChatConnectTaskCallback,ChatSendTask.ChatSendTaskCallback{
   private ChatConnectTask connectTask;
   private ChatSendTask sendTask;
   private EditText inputIP;
   private EditText inputPort;
   private EditText inputMessage;
   private TextView viewChat;
   private Button buttonConnect;
   private Button buttonSend;
   private String param1;
   private int param2;
   private String param3;
   private View view;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
       setSupportActionBar(toolbar);
       inputIP = (EditText)findViewById(R.id.inputIP);
       inputPort = (EditText)findViewById(R.id.inputPort);
       inputMessage = (EditText)findViewById(R.id.inputMessage);
       buttonConnect = (Button)findViewById(R.id.buttonConnect);
       buttonSend = (Button)findViewById(R.id.buttonSend);
       viewChat = (TextView)findViewById(R.id.viewChat);
       FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
       fab.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View view) {
               Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                       .setAction("Action", null).show();
           }
       });
   }
   //connectボタンでソケット接続&メッセージ受信
   protected void handleButtonConnectAction(View view){
   public void handleButtonConnectAction(View view){
       String param1 = inputIP.getText().toString();
       int param2 = Integer.parseInt(inputPort.getText().toString());
       Param param = new Param(param1,param2);
       connectTask = new ChatConnectTask(this);
       connectTask.execute(param);
   }
   //送信ボタンでメッセージを送信
   protected void handleButtonSendAction(View view){
   public void handleButtonSendAction(View view){
       param3 = inputMessage.getText().toString();
       Param param = new Param(param1,param2,param3);
       sendTask = new ChatSendTask(this);
       sendTask.execute(param);
   }
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
       // Inflate the menu; this adds items to the action bar if it is present.
       getMenuInflater().inflate(R.menu.menu_main, menu);
       return true;
   }
   @Override
   public boolean onOptionsItemSelected(MenuItem item) {
       // Handle action bar item clicks here. The action bar will
       // automatically handle clicks on the Home/Up button, so long
       // as you specify a parent activity in AndroidManifest.xml.
       int id = item.getItemId();
       //noinspection SimplifiableIfStatement
       if (id == R.id.action_settings) {
           return true;
       }
       return super.onOptionsItemSelected(item);
   }
   @Override
   public void onPreExecute() {
   }
   @Override
   public void onProgressUpdate(String... message) {
       viewChat.setText(message[0].toString());
   }
   @Override
   public void onPostExecute(String result) {
       Toast.makeText(this,result,Toast.LENGTH_LONG);
   }
}
```
```ChatConnectTask.java
import android.os.AsyncTask;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
/**
*/
public class ChatConnectTask extends AsyncTask<Param,String,String > {
   private ChatConnectTaskCallback mCallback;
   private Param param = new Param();
   public ChatConnectTask(ChatConnectTaskCallback callback){
       this.mCallback = callback;
   }
   @Override
   protected void onPreExecute(){
       if(mCallback != null)
           mCallback.onPreExecute();
   }
   protected String doInBackground(Param... param){
       String server = param[0].param1;
       // Server Portからポート番号を取得
       int port = param[0].param2;
       Socket socket = null;
       try {
           // ソケットを作成
           socket = new Socket();
           // 指定されたホスト名(IPアドレス)とポート番号でサーバに接続する
           socket.connect(new InetSocketAddress(server, port));
           while(socket != null) {
               // 接続されたソケットの入力ストリームを取得し,データ入力ストリームを連結
               InputStream is = socket.getInputStream();
               DataInputStream dis = new DataInputStream(is);
               // データの受信
               String receiveMessage = dis.readUTF();
               //受信したデータに改行をつけてメッセージを追加していく
               String showMessage = receiveMessage + "\r\n";
               // 受信したデータを表示
               publishProgress(showMessage);
           }
       } catch (Exception e) {
           e.printStackTrace();
       } finally {
           // ソケットをクローズする
           if (socket != null) {
               try {
                   socket.close();
               } catch (IOException e) {}
           }
       }
       return "チャットを終了します";
   }
   @Override
   protected void onProgressUpdate(String... message){
       if(mCallback != null)
           mCallback.onProgressUpdate(message);
   }
   @Override
   protected void onPostExecute(String result ){
       if(mCallback != null) {
           mCallback.onPostExecute(result);
       }
   }
   public interface ChatConnectTaskCallback{
       void onPreExecute();
       void onProgressUpdate(String... message);
       void onPostExecute(String result);
   }
}
```
```ChatSendTask.java
import android.os.AsyncTask;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
/**
* Created by 大嗣 on 2016/01/07.
*/
public class ChatSendTask extends AsyncTask<Param,String,String > {
   private ChatSendTaskCallback mCallback;
   private Param param = new Param();
   public ChatSendTask(ChatSendTaskCallback callback){
       this.mCallback = callback;
   }
   @Override
   protected void onPreExecute(){
       if(mCallback != null)
           mCallback.onPreExecute();
   }
   protected String doInBackground(Param... param){
       String server = param[0].param1;
       // Server Portからポート番号を取得
       int port = param[0].param2;
       Socket socket = null;
       try {
           // ソケットを作成
           socket = new Socket();
           // 指定されたホスト名(IPアドレス)とポート番号でサーバに接続する
           socket.connect(new InetSocketAddress(server, port));
               // 接続されたソケットの入力ストリームを取得し,データ入力ストリームを連結
               OutputStream os = socket.getOutputStream();
               DataOutputStream dos = new DataOutputStream(os);
               // テキストフィールドの文字を取得
               String sendMessage = param[0].param3;
               // 取得したデータを送信
               dos.writeUTF(sendMessage);
        dos.fush();  
       } catch (Exception e) {
           e.printStackTrace();
       } finally {
           // ソケットをクローズする
           if (socket != null) {
               try {
                   socket.close();
               } catch (IOException e) {}
           }
       }
       return "メッセージを送信しました";
   }
   @Override
   protected void onProgressUpdate(String... message){
       if(mCallback != null)
           mCallback.onProgressUpdate(message);
   }
   @Override
   protected void onPostExecute(String param){
       if(mCallback != null) {
           mCallback.onPostExecute(param);
       }
   }
   public interface ChatSendTaskCallback{
       void onPreExecute();
       void onProgressUpdate(String... message);
       void onPostExecute(String param);
   }
}
```
```
  • Java

    18429 questions

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

  • Android

    8264 questions

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

2 内容変更

kt3302y

kt3302y score 25

2016/01/12 09:34  投稿

Android アプリ 実行エラー
Android Studioを使用してチャットクライアントアプリを作成しています.
使用としてはサーバーのIPアドレスとポート番号を入力してConnectボタンをクリックするとサーバーに接続とチャット受信を行い,送信ボタンはテキストに入力されたメッセージをサーバーに送信する役割を担っています.
メッセージを送信できない問題が発生しました.
送信ボタンをクリックするとgetSlotFromBufferLocked: unknown bufferこのエラーが発生します.
これは何が原因で起こっているものなのでしょうか
教えてください.
参考までにソースコードなども載せておきます.
```MainActivity.java
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity
       implements ChatConnectTask.ChatConnectTaskCallback,ChatSendTask.ChatSendTaskCallback{
   private ChatConnectTask connectTask;
   private ChatSendTask sendTask;
   private EditText inputIP;
   private EditText inputPort;
   private EditText inputMessage;
   private TextView viewChat;
   private Button buttonConnect;
   private Button buttonSend;
   private String param1;
   private int param2;
   private String param3;
   private View view;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
       setSupportActionBar(toolbar);
       inputIP = (EditText)findViewById(R.id.inputIP);
       inputPort = (EditText)findViewById(R.id.inputPort);
       inputMessage = (EditText)findViewById(R.id.inputMessage);
       buttonConnect = (Button)findViewById(R.id.buttonConnect);
       buttonSend = (Button)findViewById(R.id.buttonSend);
       viewChat = (TextView)findViewById(R.id.viewChat);
       FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
       fab.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View view) {
               Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                       .setAction("Action", null).show();
           }
       });
   }
   //connectボタンでソケット接続&メッセージ受信
   protected void handleButtonConnectAction(View view){
       String param1 = inputIP.getText().toString();
       int param2 = Integer.parseInt(inputPort.getText().toString());
       Param param = new Param(param1,param2);
       connectTask = new ChatConnectTask(this);
       connectTask.execute(param);
   }
   //送信ボタンでメッセージを送信
   protected void handleButtonSendAction(View view){
       param3 = inputMessage.getText().toString();
       Param param = new Param(param1,param2,param3);
       sendTask = new ChatSendTask(this);
       sendTask.execute(param);
   }
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
       // Inflate the menu; this adds items to the action bar if it is present.
       getMenuInflater().inflate(R.menu.menu_main, menu);
       return true;
   }
   @Override
   public boolean onOptionsItemSelected(MenuItem item) {
       // Handle action bar item clicks here. The action bar will
       // automatically handle clicks on the Home/Up button, so long
       // as you specify a parent activity in AndroidManifest.xml.
       int id = item.getItemId();
       //noinspection SimplifiableIfStatement
       if (id == R.id.action_settings) {
           return true;
       }
       return super.onOptionsItemSelected(item);
   }
   @Override
   public void onPreExecute() {
   }
   @Override
   public void onProgressUpdate(String... message) {
       viewChat.setText(message[0].toString());
   }
   @Override
   public void onPostExecute(String result) {
       Toast.makeText(this,result,Toast.LENGTH_LONG);
   }
}
```
```ChatConnectTask.java
import android.os.AsyncTask;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
/**
*/
public class ChatConnectTask extends AsyncTask<Param,String,String > {
   private ChatConnectTaskCallback mCallback;
   private Param param = new Param();
   public ChatConnectTask(ChatConnectTaskCallback callback){
       this.mCallback = callback;
   }
   @Override
   protected void onPreExecute(){
       if(mCallback != null)
           mCallback.onPreExecute();
   }
   protected String doInBackground(Param... param){
       String server = param[0].param1;
       // Server Portからポート番号を取得
       int port = param[0].param2;
       Socket socket = null;
       try {
           // ソケットを作成
           socket = new Socket();
           // 指定されたホスト名(IPアドレス)とポート番号でサーバに接続する
           socket.connect(new InetSocketAddress(server, port));
           while(socket != null) {
               // 接続されたソケットの入力ストリームを取得し,データ入力ストリームを連結
               InputStream is = socket.getInputStream();
               DataInputStream dis = new DataInputStream(is);
               // データの受信
               String receiveMessage = dis.readUTF();
               //受信したデータに改行をつけてメッセージを追加していく
               String showMessage = receiveMessage + "\r\n";
               // 受信したデータを表示
               publishProgress(showMessage);
           }
       } catch (Exception e) {
           e.printStackTrace();
       } finally {
           // ソケットをクローズする
           if (socket != null) {
               try {
                   socket.close();
               } catch (IOException e) {}
           }
       }
       return "チャットを終了します";
   }
   @Override
   protected void onProgressUpdate(String... message){
       if(mCallback != null)
           mCallback.onProgressUpdate(message);
   }
   @Override
   protected void onPostExecute(String result ){
       if(mCallback != null) {
           mCallback.onPostExecute(result);
       }
   }
   public interface ChatConnectTaskCallback{
       void onPreExecute();
       void onProgressUpdate(String... message);
       void onPostExecute(String result);
   }
}
```
```ChatSendTask.java
import android.os.AsyncTask;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
/**
* Created by 大嗣 on 2016/01/07.
*/
public class ChatSendTask extends AsyncTask<Param,String,String > {
   private ChatSendTaskCallback mCallback;
   private Param param = new Param();
   public ChatSendTask(ChatSendTaskCallback callback){
       this.mCallback = callback;
   }
   @Override
   protected void onPreExecute(){
       if(mCallback != null)
           mCallback.onPreExecute();
   }
   protected String doInBackground(Param... param){
       String server = param[0].param1;
       // Server Portからポート番号を取得
       int port = param[0].param2;
       Socket socket = null;
       try {
           // ソケットを作成
           socket = new Socket();
           // 指定されたホスト名(IPアドレス)とポート番号でサーバに接続する
           socket.connect(new InetSocketAddress(server, port));
               // 接続されたソケットの入力ストリームを取得し,データ入力ストリームを連結
               OutputStream os = socket.getOutputStream();
               DataOutputStream dos = new DataOutputStream(os);
               // テキストフィールドの文字を取得
               String sendMessage = param[0].param3;
               // 取得したデータを送信
               dos.writeUTF(sendMessage);
       } catch (Exception e) {
           e.printStackTrace();
       } finally {
           // ソケットをクローズする
           if (socket != null) {
               try {
                   socket.close();
               } catch (IOException e) {}
           }
       }
       return "メッセージを送信しました";
   }
   @Override
   protected void onProgressUpdate(String... message){
       if(mCallback != null)
           mCallback.onProgressUpdate(message);
   }
   @Override
   protected void onPostExecute(String param){
       if(mCallback != null) {
           mCallback.onPostExecute(param);
       }
   }
   public interface ChatSendTaskCallback{
       void onPreExecute();
       void onProgressUpdate(String... message);
       void onPostExecute(String param);
   }
}
```
```
  • Java

    18429 questions

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

  • Android

    8264 questions

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

1 質問内容変更

kt3302y

kt3302y score 25

2016/01/12 09:14  投稿

Android アプリ 実行エラー
Android Studioを使用してチャットクライアントアプリを作成しています.
使用としてはサーバーのIPアドレスとポート番号を入力してConnectボタンをクリックするとサーバーに接続とチャット受信を行い,送信ボタンはテキストに入力されたメッセージをサーバーに送信する役割を担っています.
このコードを実行するとUnfortunately,(app)has a stopped.と表示されます.
メッセージを送信できない問題が発生しました.
送信ボタンをクリックするとgetSlotFromBufferLocked: unknown bufferこのエラーが発生します.
これは何が原因で起こっているものなのでしょうか
教えてください.
参考までにソースコードなども載せておきます.
```MainActivity.java
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity
       implements ChatConnectTask.ChatConnectTaskCallback,ChatSendTask.ChatSendTaskCallback{
   private ChatConnectTask connectTask;
   private ChatSendTask sendTask;
   private EditText inputIP;
   private EditText inputPort;
   private EditText inputMessage;
   private TextView viewChat;
   private Button buttonConnect;
   private Button buttonSend;
   private String param1;
   private int param2;
   private String param3;
   private View view;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
       setSupportActionBar(toolbar);
       inputIP = (EditText)findViewById(R.id.inputIP);
       inputPort = (EditText)findViewById(R.id.inputPort);
       inputMessage = (EditText)findViewById(R.id.inputMessage);
       buttonConnect = (Button)findViewById(R.id.buttonConnect);
       buttonSend = (Button)findViewById(R.id.buttonSend);
       viewChat = (TextView)findViewById(R.id.viewChat);
       FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
       fab.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View view) {
               Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                       .setAction("Action", null).show();
           }
       });
   }
   //connectボタンでソケット接続&メッセージ受信
   protected void handleButtonConnectAction(View view){
       String param1 = inputIP.getText().toString();
       int param2 = Integer.parseInt(inputPort.getText().toString());
       Param param = new Param(param1,param2);
       connectTask = new ChatConnectTask(this);
       connectTask.execute(param);
   }
   //送信ボタンでメッセージを送信
   protected void handleButtonSendAction(View view){
       param3 = inputMessage.getText().toString();
       Param param = new Param(param1,param2,param3);
       sendTask = new ChatSendTask(this);
       sendTask.execute(param);
   }
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
       // Inflate the menu; this adds items to the action bar if it is present.
       getMenuInflater().inflate(R.menu.menu_main, menu);
       return true;
   }
   @Override
   public boolean onOptionsItemSelected(MenuItem item) {
       // Handle action bar item clicks here. The action bar will
       // automatically handle clicks on the Home/Up button, so long
       // as you specify a parent activity in AndroidManifest.xml.
       int id = item.getItemId();
       //noinspection SimplifiableIfStatement
       if (id == R.id.action_settings) {
           return true;
       }
       return super.onOptionsItemSelected(item);
   }
   @Override
   public void onPreExecute() {
   }
   @Override
   public void onProgressUpdate(String... message) {
       viewChat.setText(message[0].toString());
   }
   @Override
   public void onPostExecute(String result) {
       Toast.makeText(this,result,Toast.LENGTH_LONG);
   }
}
```
```ChatConnectTask.java
import android.os.AsyncTask;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
/**
*/
public class ChatConnectTask extends AsyncTask<Param,String,String > {
   private ChatConnectTaskCallback mCallback;
   private Param param = new Param();
   public ChatConnectTask(ChatConnectTaskCallback callback){
       this.mCallback = callback;
   }
   @Override
   protected void onPreExecute(){
       if(mCallback != null)
           mCallback.onPreExecute();
   }
   protected String doInBackground(Param... param){
       String server = param[0].param1;
       // Server Portからポート番号を取得
       int port = param[0].param2;
       Socket socket = null;
       try {
           // ソケットを作成
           socket = new Socket();
           // 指定されたホスト名(IPアドレス)とポート番号でサーバに接続する
           socket.connect(new InetSocketAddress(server, port));
           while(socket != null) {
               // 接続されたソケットの入力ストリームを取得し,データ入力ストリームを連結
               InputStream is = socket.getInputStream();
               DataInputStream dis = new DataInputStream(is);
               // データの受信
               String receiveMessage = dis.readUTF();
               //受信したデータに改行をつけてメッセージを追加していく
               String showMessage = receiveMessage + "\r\n";
               // 受信したデータを表示
               publishProgress(showMessage);
           }
       } catch (Exception e) {
           e.printStackTrace();
       } finally {
           // ソケットをクローズする
           if (socket != null) {
               try {
                   socket.close();
               } catch (IOException e) {}
           }
       }
       return "チャットを終了します";
   }
   @Override
   protected void onProgressUpdate(String... message){
       if(mCallback != null)
           mCallback.onProgressUpdate(message);
   }
   @Override
   protected void onPostExecute(String result ){
       if(mCallback != null) {
           mCallback.onPostExecute(result);
       }
   }
   public interface ChatConnectTaskCallback{
       void onPreExecute();
       void onProgressUpdate(String... message);
       void onPostExecute(String result);
   }
}
```
```ChatSendTask.java
import android.os.AsyncTask;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
/**
* Created by 大嗣 on 2016/01/07.
*/
public class ChatSendTask extends AsyncTask<Param,String,String > {
   private ChatSendTaskCallback mCallback;
   private Param param = new Param();
   public ChatSendTask(ChatSendTaskCallback callback){
       this.mCallback = callback;
   }
   @Override
   protected void onPreExecute(){
       if(mCallback != null)
           mCallback.onPreExecute();
   }
   protected String doInBackground(Param... param){
       String server = param[0].param1;
       // Server Portからポート番号を取得
       int port = param[0].param2;
       Socket socket = null;
       try {
           // ソケットを作成
           socket = new Socket();
           // 指定されたホスト名(IPアドレス)とポート番号でサーバに接続する
           socket.connect(new InetSocketAddress(server, port));
               // 接続されたソケットの入力ストリームを取得し,データ入力ストリームを連結
               OutputStream os = socket.getOutputStream();
               DataOutputStream dos = new DataOutputStream(os);
               // テキストフィールドの文字を取得
               String sendMessage = param[0].param3;
               // 取得したデータを送信
               dos.writeUTF(sendMessage);
       } catch (Exception e) {
           e.printStackTrace();
       } finally {
           // ソケットをクローズする
           if (socket != null) {
               try {
                   socket.close();
               } catch (IOException e) {}
           }
       }
       return "メッセージを送信しました";
   }
   @Override
   protected void onProgressUpdate(String... message){
       if(mCallback != null)
           mCallback.onProgressUpdate(message);
   }
   @Override
   protected void onPostExecute(String param){
       if(mCallback != null) {
           mCallback.onPostExecute(param);
       }
   }
   public interface ChatSendTaskCallback{
       void onPreExecute();
       void onProgressUpdate(String... message);
       void onPostExecute(String param);
   }
}
```
```
  • Java

    18429 questions

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

  • Android

    8264 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る