2017-05-02 15 views
-3

私はいくつかのアンドロイドの開発を学ぼうとしていました。私が作ったアプリをウェブベースにするために、何らかのネットワーキングに取り掛かっています。とにかく、私は、電話機やラップトップをクライアントとして使用し、ラップトップでサーバーを実行するチャットプログラムを作ろうと試みました。私の問題は、私がサーバーにメッセージを送信しようとするたびに、私のアプリは単に閉じます。私は可能性を考えているが、実際に何が起こっているのか分からない。とにかくここチャットプログラムが自動的に閉じます

は、Androidのコードです:

package com.example.android.chatprogram; 

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.widget.TextView; 

import java.io.BufferedReader; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.Socket; 


public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    public void sendMessage() 
    { 
     try { 

      TextView inp = (TextView) findViewById(R.id.msg_box); 
      TextView receive = (TextView) findViewById(R.id.chat_window); 
      Socket clientSocket = new Socket("localhost", 9002); //99.228.211.122 
      DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); 
      BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 

      String msg = inp.getText().toString(); 
      outToServer.writeBytes(msg + '\n'); 
      receive.append(inFromServer.readLine()); 
      clientSocket.close(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 


} 

ここに(私のラップトップ上で動作する)サーバーのコードは次のとおりです。

import java.io.*; 
import java.net.*; 

public class server { 
    public static void main(String args[]) throws Exception { 
     String clientSentence; 
     String capitalizedSentence; 
     ServerSocket welcomeSocket = new ServerSocket(9001); 

     while(true) { 
      Socket connectionSocket = welcomeSocket.accept(); 
      BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); 
      DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); 
      clientSentence = inFromClient.readLine(); 
      System.out.println(clientSentence); 
      capitalizedSentence = clientSentence.toUpperCase() + '\n'; 
      outToClient.writeBytes(capitalizedSentence); 
     } 
    } 

は、事前にありがとうございます!

EDIT:私は最後にスタックトレースを見つけました!

05-0121:48:04.74828076-28076/com.example.android.chatprogramE/AndroidRuntime: 
FATALEXCEPTION:main 
Process:com.example.android.chatprogram,PID:28076 
java.lang.IllegalStateException:Couldnotexecutemethodforandroid:onClick 
atandroid.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) 
atandroid.view.View.performClick(View.java:5623) 
atandroid.view.View$PerformClick.run(View.java:22433) 
atandroid.os.Handler.handleCallback(Handler.java:751) 
atandroid.os.Handler.dispatchMessage(Handler.java:95) 
atandroid.os.Looper.loop(Looper.java:154) 
atandroid.app.ActivityThread.main(ActivityThread.java:6247) 
atjava.lang.reflect.Method.invoke(NativeMethod) 
atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872) 
atcom.android.internal.os.ZygoteInit.main(ZygoteInit.java:762) 
Causedby:java.lang.reflect.InvocationTargetException 
atjava.lang.reflect.Method.invoke(NativeMethod) 
atandroid.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
atandroid.view.View.performClick(View.java:5623)  
atandroid.view.View$PerformClick.run(View.java:22433)  
atandroid.os.Handler.handleCallback(Handler.java:751)  
atandroid.os.Handler.dispatchMessage(Handler.java:95)  
atandroid.os.Looper.loop(Looper.java:154)  
atandroid.app.ActivityThread.main(ActivityThread.java:6247)  
atjava.lang.reflect.Method.invoke(NativeMethod)  
atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)  
atcom.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)  
Causedby:android.os.NetworkOnMainThreadException 
atandroid.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1303) 
atjava.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:333) 
atjava.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:196) 
atjava.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:178) 
atjava.net.SocksSocketImpl.connect(SocksSocketImpl.java:356) 
atjava.net.Socket.connect(Socket.java:586) 
atjava.net.Socket.connect(Socket.java:535) 
atjava.net.Socket.<init>(Socket.java:427) 
atjava.net.Socket.<init>(Socket.java:210) 
atcom.example.android.chatprogram.MainActivity.sendMessage(MainActivity.java:29) 
atjava.lang.reflect.Method.invoke(NativeMethod)  
atandroid.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)  
atandroid.view.View.performClick(View.java:5623)  
atandroid.view.View$PerformClick.run(View.java:22433)  
atandroid.os.Handler.handleCallback(Handler.java:751)  
atandroid.os.Handler.dispatchMessage(Handler.java:95)  
atandroid.os.Looper.loop(Looper.java:154)  
atandroid.app.ActivityThread.main(ActivityThread.java:6247)  
atjava.lang.reflect.Method.invoke(NativeMethod)  
atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)  
atcom.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)  
+1

「私のアプリはただ閉じます」あなたはどういう意味ですか?クラッシュした場合は、エラーログを追加してください! –

+0

私は実際にエラーログを取得する方法を理解しようとしています。 LogCatのようなアプリケーションを使用するたびに、私は決して終わりのないテキストの巨大な壁を得るだけです。 @AtefHares – Cameron

+0

これはあまりにもここで説明するには、私は恐れている(と私はそれがあなたのために良いと思う)あなたはlogcatを扱う方法についてGoogleを検索する必要があります。私は、あなたがそれについてたくさんのチュートリアルとビデオを見つけることをほとんど確信しています。 –

答えて

0

最初にクラッシュしたときは、常にスタックトレースを送信してください。それは、何が失敗しているのか、なぜ、どこで、どこにいるのかを伝えます。

この場合、NetworkOnMainThreadExceptionになります。すべてのネットワークコールは、別のスレッドで実行する必要があります。

関連する問題