Android应用无法发布到网址

时间:2014-09-29 02:44:10

标签: android

我正在为一个学校项目开发一个相对简单的登录应用程序。我在将我的应用程序连接到本地或其他任何URL时遇到问题。我已经添加了对android清单文件进行互联网访问的权限。

<uses-permission android:name="android.permission.INTERNET" />

以下代码位于我的主要活动中:

public class MainActivity extends Activity {
    private EditText  username=null;
    private EditText  password=null;
    private Button login;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        username = (EditText)findViewById(R.id.ucidText);
        password = (EditText)findViewById(R.id.passText);
        login = (Button)findViewById(R.id.button1);


//URL CAN BE ANYTHING, WOULD NORMALLY BE 192.168.1.102
        if(isConnectedToServer("<-URL to page on locally hosted server->",10)){
            Toast.makeText(getApplicationContext(), "Connected", Toast.LENGTH_SHORT).show();
        }
        else{
            Toast.makeText(getApplicationContext(), "Connection failed", Toast.LENGTH_SHORT).show();
        }
    }


//Function to determine if connection exists
    public boolean isConnectedToServer(String url, int timeout) {
        try{
            URL myUrl = new URL(url);    //<--------- I believe the issue has to do with this line. 
            URLConnection connection = myUrl.openConnection();
            connection.setConnectTimeout(timeout);
            connection.connect();
            return true;
        } catch (Exception e) {         
            return false;
        }
    }   
}

这是我整个项目的精简版。除连接外,一切都会检出。我正在手机上直接运行SDK(Moto X)。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

你应该在&#34; url&#34;中使用一些协议。字符串。

例如,您可以使用

 "http://serverIP" 

其中serverIP为192.168.1.102,端口默认为80。

我们无法使用&#34; 192.168.1.102&#34;作为URL,因为URL类不能忽略该协议。

答案 1 :(得分:2)

你得到了android.os.NetworkOnMainThreadException,因为你在主线程上执行网络请求。你不应该这样做,因为你会阻止主线程。相反,您可以启动一个新线程来执行您的网络请求,如下所示:

final Handler handler = new Handler();
new Thread(){
     public void run(){
       // check network connection here.
       handler.post(/* do the toast work in a Runnable as the parameter here*/);
    }
}.start();