私はAndroidとJavaプログラミングにかなり慣れていないので、あなたの助けが必要です. 自分の PC (Windows 7) に Android クライアントとサーバーを作成したいと考えています。私のサーバーが間違いなくプログラムされているかどうかをパテ(クライアントを模倣するプログラム(プログラミングミスなし^^))で確認しました。これにより、サーバーが正しくプログラムされていることがわかりました。
ここで、うまく機能しているサーバーを確認できます。
public class MyServer {
public static void main (String[] args) throws IOException {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(4449);
System.out.println("Listening on port: 4449");
} catch (IOException e){
System.err.println("Could not listen on port 4449.");
System.exit(1);
}
Socket clientSocket = null;
try {
clientSocket = serverSocket.accept();
System.out.println("Got connection.");
} catch (IOException e) {
System.err.println("Accept failed: 4449.");
System.exit(1);
}
BufferedReader in = null;
PrintWriter out = null;
try {
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
out = new PrintWriter(clientSocket.getOutputStream(), true);
} catch (IOException e) {
System.err.println("Read failed");
e.printStackTrace();
}
try {
System.out.println("message: " + in.readLine());
out.println("hab was bekommen!");
} catch (IOException e) {
System.err.println("Can't get a message from Client.");
e.printStackTrace();
}
}
}
このサーバー用の Android クライアントも作成しようとしましたが、管理できませんでした。
ここに私のメインアクティビティがあります:
public class AndroidClient extends Activity {
EditText textOut;
TextView textIn;
TextView problems;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_android_client);
textOut = (EditText)findViewById(R.id.textout);
Button buttonSend = (Button)findViewById(R.id.send);
textIn = (TextView)findViewById(R.id.textin);
problems = (TextView)findViewById(R.id.problems);
buttonSend.setOnClickListener(buttonSendOnClickListener);
}
Button.OnClickListener buttonSendOnClickListener
= new Button.OnClickListener() {
@Override
public void onClick(View arg0) {
//TODO Auto-generated method stub
Socket client = null;
BufferedReader in = null;
PrintWriter out = null;
try {
client = new Socket("192.168.2.107", 4449);
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
out = new PrintWriter(client.getOutputStream(), true);
} catch (UnknownHostException e) {
problems.setText("Unknown host: 192.168.2.107");
} catch (IOException e) {
// System.out.println("No Input/Output.");
problems.setText("No Input/Output.");
}
try {
out.println("Hallo.");
textIn.setText(in.readLine());
} catch (IOException e) {
problems.setText("Can't send/ get message.");
}
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_android_client, menu);
return true;
}
}
ここまでは順調ですね。Androidスマートフォンでアプリを起動すると、アプリは問題なく起動します。次に、EditText フィールド 'textOut' に何かを入力し、'Send' ボタンにプッシュします。その後、画面が真っ暗になり、アプリが閉じます。また、AndroidManifest.xml にアクセス許可を貼り付けて、インターネットに入り、Wifi にアクセスできるようにしました。
私はこの問題に2日間取り組んでいて、まだ解決策を見つけていないので、誰かが私を助けてくれることを願っています. 私は主にこの面 (http://android-er.blogspot.de/2011/01/simple-communication-using.html) ともちろん他の面を使用しましたが、そこでほとんどの情報を入手しました。さらに、私のソースコードには間違いが見られません。
よろしくお願いいたします。
ルーカス5060
編集:ここに私のLogCatがあります:
12-28 20:21:55.929: I/dalvikvm(698): threadid=3: シグナル 3 に反応する 12-28 20:21:56.039: I/dalvikvm(698): スタック トレースを '/data/anr/ traces.txt' 12-28 20:21:56.259: I/dalvikvm(698): threadid=3: シグナル 3 に反応する 12-28 20:21:56.299: I/dalvikvm(698): スタック トレースを '/ data/anr/traces.txt' 12-28 20:21:56.741: D/gralloc_goldfish(698): GPU エミュレーションなしのエミュレーターが検出されました。12-28 20:21:56.771: I/dalvikvm(698): threadid=3: シグナル 3 に反応する 12-28 20:21:56.789: I/dalvikvm(698): スタック トレースを '/data/anr/ traces.txt' 12-28 20:23:58.430: D/AndroidRuntime(698): VM をシャットダウンしています 12-28 20:23:58.430: W/dalvikvm(698): threadid=1: キャッチされない例外で終了するスレッド (グループ=0x409c01f8) 12-28 20:23:58.470: E/AndroidRuntime(698): 致命的な例外: メイン 12-28 20:23:58.470: E/AndroidRuntime(698): android.os. E/AndroidRuntime(698): java.lang.reflect.Method.invokeNative(Native Method) 12-28 20:23:58.470: E/AndroidRuntime(698): java.lang.reflect.Method.invoke(Method. java:511) 12-28 20:23:58.470: E/AndroidRuntime(698): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 12-28 20:23:58.470: E/AndroidRuntime(698): com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 12-28 20:23:58.470: E/AndroidRuntime(698): dalvik.system.NativeStart.main で(ネイティブ メソッド) 12-28 20:23:59.070: I/dalvikvm(698): threadid=3: シグナル 3 に反応する 12-28 20:23:59.100: I/dalvikvm(698): スタック トレースを '/ data/anr/traces.txt' 12-28 20:24:02.420: I/Process(698): シグナルを送信しています。PID: 698 SIG: 9 java.lang.reflect.Method.invoke(Method.java:511) 12-28 20:23:58.470: E/AndroidRuntime(698): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit. java:784) 12-28 20:23:58.470: E/AndroidRuntime(698): com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 12-28 20:23:58.470: E/ AndroidRuntime(698): dalvik.system.NativeStart.main(Native Method) 12-28 20:23:59.070: I/dalvikvm(698): threadid=3: シグナル 3 12-28 20:23:59.100 に反応: I/dalvikvm(698): スタック トレースを '/data/anr/traces.txt' 12-28 20:24:02.420 に書き込みました: I/Process(698): シグナルを送信しています。PID: 698 SIG: 9 java.lang.reflect.Method.invoke(Method.java:511) 12-28 20:23:58.470: E/AndroidRuntime(698): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit. java:784) 12-28 20:23:58.470: E/AndroidRuntime(698): com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 12-28 20:23:58.470: E/ AndroidRuntime(698): dalvik.system.NativeStart.main(Native Method) 12-28 20:23:59.070: I/dalvikvm(698): threadid=3: シグナル 3 12-28 20:23:59.100 に反応: I/dalvikvm(698): スタック トレースを '/data/anr/traces.txt' 12-28 20:24:02.420 に書き込みました: I/Process(698): シグナルを送信しています。PID: 698 SIG: 9 ZygoteInit.main(ZygoteInit.java:551) 12-28 20:23:58.470: E/AndroidRuntime(698): dalvik.system.NativeStart.main(ネイティブ メソッド) 12-28 20:23:59.070: I/dalvikvm (698): threadid=3: シグナル 3 に反応しています 12-28 20:23:59.100: I/dalvikvm(698): スタック トレースを '/data/anr/traces.txt' に書き込みました 12-28 20:24:02.420 : I/Process(698): シグナルを送信しています。PID: 698 SIG: 9 ZygoteInit.main(ZygoteInit.java:551) 12-28 20:23:58.470: E/AndroidRuntime(698): dalvik.system.NativeStart.main(ネイティブ メソッド) 12-28 20:23:59.070: I/dalvikvm (698): threadid=3: シグナル 3 に反応しています 12-28 20:23:59.100: I/dalvikvm(698): スタック トレースを '/data/anr/traces.txt' に書き込みました 12-28 20:24:02.420 : I/Process(698): シグナルを送信しています。PID: 698 SIG: 9