我正在为一个学校项目开发一个相对简单的登录应用程序。我在将我的应用程序连接到本地或其他任何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)。有什么建议吗?
答案 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();