1

これは単純なクライアントサーバーAndroidアプリケーションです。サーバーはローカルPCで実行されている単純なJavaサーバーであり、クライアントはエミュレーターで実行されています。クライアントのコードは次のとおりです。

package com.example.streamer;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.net.Socket;

 class Connecting implements Runnable
{
    private Socket sock;

    private BufferedReader r;

    private BufferedWriter out;
    public Connecting ()
    {
        Thread th = new Thread(this);
        th.start();

    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        try
        {
            System.out.println("************************ trying to initiated *****************");
        sock = new Socket("10.0.2.2",12344);

        System.out.println("************************ socket initiated *****************");

        r = new BufferedReader(new InputStreamReader(sock.getInputStream()));

        System.out.println("************************ buffer reader initiated *****************");

        out = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream()));

        System.out.println("************************ buffer writer initiated *****************");

        }

        catch (IOException ioe) { }


    }

}

public class MainActivity extends Activity {

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

    @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_main, menu);
        return true;
    }





    @Override

    public void onResume() {

        super.onResume();

        System.out.println("************************ on resume *****************");
        Connecting c = new Connecting();

    }



}

命令が実行されない理由を誰かが知ってsock = new Socket("10.0.2.2", 12344);いますか?

4

3 に答える 3

1

そのコマンドは、ソケットを外部ホストに接続しようとします。時間がかかる場合があります。Androidの多くのバージョンでは、メインスレッドでネットワーク呼び出しを行う必要がないため、クラッシュすることさえあります。それをAsyncTaskまたはスレッドに移動します。

于 2013-02-24T08:46:06.690 に答える
1

この問題は、アプリケーションの権限を正しく設定していないことに関連している可能性があります。

特に、アプリケーションが要求する権限を含むAndroidManifest.xmlファイルを編集する必要があります。

次のようにファイルを編集します。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.android.app.myapp" >
    <uses-permission android:name="android.permission.INTERNET" />
    ...
</manifest>

この回線<uses-permission android:name="android.permission.INTERNET" />は、アプリケーションにインターネットへの接続許可を要求させます。

于 2013-02-24T09:45:03.103 に答える