0

そのため、Androidでは、ネットワーク操作をメインスレッドで実行することはできません。このコードを別のスレッドで実行するのに問題があります。私のコードを見て、これが機能するかどうか/正しいかどうかを確認してください。助けてくれてありがとう。

public class StartActivity extends Activity implements Runnable {
    public static final int timeout = 3000;
    private boolean boolConStatus = false;

    public static final String TAG = "StartActivity";
    public static final String url = "serverIP";

    @Override
    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        Log.d(TAG, "onCreated with Bundle: " + bundle);
        setContentView(R.layout.activity_start);
    }

    public void run() {
        boolean boolConStatus; 
        boolConStatus = this.isConnected();
        toaster();
    }

    public boolean getConStatus() {
        return boolConStatus;
    }


    public void toaster() {
                boolConStatus = this.isConnected();
                if (boolConStatus == true) {
                    Toast.makeText(getApplicationContext(),
                            "Connected to Server", Toast.LENGTH_LONG);
                } else {
                    Toast.makeText(getApplicationContext(),
                            "All has failed", Toast.LENGTH_LONG);
                }
}
        public boolean isConnected() {
            try {
                ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo ni = cm.getActiveNetworkInfo();

                if (ni != null && ni.isConnected()) {
                    URL server = new URL(url);
                    HttpURLConnection huc = (HttpURLConnection) server.openConnection();
                    huc.setRequestProperty("Connection", "close");
                    huc.setConnectTimeout(timeout);
                    huc.connect();

                    if (huc.getResponseCode() == 200) {
                        return true;
                    } else {
                        Log.d("NOT CONNECTED TO SERVER", "NOT CONNECTED TO SERVER");
                        return false;
                    }
                } else {
                    Log.d("NO INTERNET CONNECTION", "NO INTERNET CONNECTION");
                    return false;
                }
                } catch (Exception e) {
                    Log.d(TAG, e.getLocalizedMessage(), e);
                e.printStackTrace();
            }
            return false;
        }
    }
4

1 に答える 1

1

Runnable自体はスレッドなしでは何もありません。これをonCreate()またはonResume()に追加してみてください。

 new Thread(this).start();

そして、おそらくこのhttps://developer.android.com/reference/java/lang/Thread.htmlを読んで、どのように行うべきかを理解する必要があります...あなたの場合、AsyncTaskの使用が適切である可能性があります。 。しかし、最初にスレッドがどのように機能するかを理解する必要があります。

于 2013-01-05T18:43:44.120 に答える