【问题标题】:Why isn't android connecting to my web server为什么android无法连接到我的网络服务器
【发布时间】:2016-03-07 14:32:52
【问题描述】:
   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。我什至尝试将 url 更改为 http://mohdgadi.netai.net/Register 但这似乎不起作用,可能是因为结果总是显示为假

【问题讨论】:

    标签: android http url


    【解决方案1】:

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

    你可以看一个例子here

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

       @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");
    
    
        }
    

    【讨论】:

    • 好的,所以我对我的代码进行了更改,正如你所说,查看我编辑的代码,但它仍然给我错误
    • 这是因为您在设置标志之前访问该值。我已经编辑了我的答案,请看。
    • 仍然是假的为什么我无法连接:(
    • 您是否在清单文件中包含了INTERNET 权限?
    • 是的,我已经包括在内,我需要一个帮助,你能写一个简单的代码来连接到 google.com 上面在 asynctask 中给出的方法
    猜你喜欢
    • 2021-01-14
    • 2015-10-29
    • 2022-01-19
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 2019-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多