android studio实现http完整例子
时间: 2023-07-17 18:54:04 浏览: 47
好的,下面给出一个使用 HttpURLConnection 实现 HTTP 请求的完整例子。
1. 在 AndroidManifest.xml 文件中添加网络权限:
```
<uses-permission android:name="android.permission.INTERNET" />
```
2. 在 MainActivity.java 文件中编写网络请求代码:
```
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class MainActivity extends AppCompatActivity {
private TextView mTextView;
private static final String API_URL = "https://jsonplaceholder.typicode.com/todos/1";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = findViewById(R.id.text_view);
new HttpGetRequest().execute(API_URL);
}
private class HttpGetRequest extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
String urlString = params[0]; // 获取请求 URL
try {
URL url = new URL(urlString);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setConnectTimeout(5000); // 设置连接超时时间
urlConnection.setReadTimeout(5000); // 设置读取超时时间
urlConnection.connect();
int responseCode = urlConnection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
InputStream inputStream = urlConnection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
reader.close();
return response.toString();
} else {
return "Error: " + responseCode;
}
} catch (IOException e) {
e.printStackTrace();
return "Error: " + e.getMessage();
}
}
@Override
protected void onPostExecute(String result) {
mTextView.setText(result);
}
}
}
```
3. 在 activity_main.xml 文件中添加一个 TextView 控件:
```
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:textSize="20sp" />
</RelativeLayout>
```
4. 运行应用,可以看到 TextView 控件中显示了从 API 获取到的数据。
注意:上面的例子中,使用了 AsyncTask 来在子线程中执行 HTTP 请求。但是,AsyncTask 有一些局限性,例如不能取消已经执行的任务,同时也不方便在多个 Activity 或 Fragment 中复用。因此,建议使用第三方网络库如 OkHttp 或 Retrofit。这些库已经封装了网络请求,使用起来更加方便,同时也具有更好的性能和可扩展性。