为什么android没有连接到我的Web服务器

时间:2015-12-03 04:57:56

标签: android http url

   package com.mohd.tryapp;

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.widget.TextView;

import java.net.URL;
import java.net.URLConnection;


public class MainActivity extends ActionBarActivity {

    public static int flag;
    TextView view;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout);
        view=(TextView)findViewById(R.id.textvi);
        getFlag var=new getFlag();
        var.execute();
        if(flag==1)
            view.setText("true");
        else
            view.setText("false");


    }
    class getFlag extends AsyncTask<Void, Void, Void> {

        private Exception exception;


        @Override
        protected Void doInBackground(Void... params) {
            try{
                String url="http://mohdgadi.netai.net/Register.php";
                int timeout=15*1000;
                URL myUrl = new URL(url);
                URLConnection connection = myUrl.openConnection();
                connection.setConnectTimeout(timeout);
                connection.connect();
                flag=1;
            } catch (Exception e) {
                e.printStackTrace();
                flag=0;
            }

            return null;

        }

    }
}

所以这是我想要连接到我的000webhost网站的主要活动的代码,但连接始终显示为false。我甚至尝试将网址更改为http://mohdgadi.netai.net/Register,但这似乎不起作用可能是什么问题因为结果总是显示错误

1 个答案:

答案 0 :(得分:2)

这是因为,如果您看到日志,您会注意到您的代码将抛出NetworkOnMainThreadException。这意味着Android不允许您在主线程上进行网络调用。因此,请将代码移到AsyncTask

您可以看到示例here

您应该使用get()等待结果填充,尽管您最好在onPostExecute返回后使用doInBackground执行代码。

   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout);
        view=(TextView)findViewById(R.id.textvi);
        getFlag var=new getFlag();
        var.execute();
        var.get();
        if(flag==1)
            view.setText("true");
        else
            view.setText("false");


    }