这是我的连接代码
HTTP
。
URL url = new URL("http://www.google.com");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setDoOutput(true);
String responseMsg = con.getResponseMessage();
int response = con.getResponseCode();
这是投掷
android.os.NetworkOnMainThreadException
请帮忙。
android.os.NetworkOnMainThreadException 发生是因为您正在主 UI 线程上进行网络调用。而是使用异步任务。
asynctask 的文档。http://developer.android.com/reference/android/os/AsyncTask.html。
在 UI 线程中调用 AsyncTask。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new MyDownloadTask().execute();
}
class MyDownloadTask extends AsyncTask<Void,Void,Void>
{
protected void onPreExecute() {
//display progress dialog.
}
protected Long doInBackground(Void... params) {
URL url = new URL("http://www.google.com");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setDoOutput(true);
String responseMsg = con.getResponseMessage();
int response = con.getResponseCode();
return null;
}
protected void onPostExecute(VOid result) {
// dismiss progress dialog and update ui
}
}
注意:AsyncTask 被设计为围绕 Thread 和 Handler 的辅助类,并不构成通用的线程框架。 AsyncTasks 理想情况下应该用于短操作(最多几秒钟)。如果您需要保持线程长时间运行,强烈建议您使用 java.util.concurrent pacakge 提供的各种 API,例如Executor、ThreadPoolExecutor 和 FutureTask。
2024 年 3 月 5 日更新:AsyncTask 已弃用 https://developer.android.com/reference/android/os/AsyncTask
使用协程代替上面的。上述建议已经过时了https://developer.android.com/kotlin/coroutines。 使用上下文切换和适当的调度程序。
也切换到使用 Okhttp3 和改造 https://square.github.io/okhttp/