1,访问http协议网络
在Android中,使用HttpURLConnection访问网络的完整参考代码如下:
首先,创建一个名为HttpUtils的工具类,用于封装HTTP请求的方法。
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 HttpUtils {public static String sendHttpGetRequest(String url) throws IOException {URL obj = new URL(url);HttpURLConnection con = (HttpURLConnection) obj.openConnection();// 设置请求方法为GETcon.setRequestMethod("GET");// 添加请求头con.setRequestProperty("User-Agent", "Mozilla/5.0");int responseCode = con.getResponseCode();System.out.println("Response Code: " + responseCode);InputStream inputStream = null;BufferedReader reader = null;StringBuilder result = new StringBuilder();try {inputStream = con.getInputStream();reader = new BufferedReader(new InputStreamReader(inputStream));String line;while ((line = reader.readLine()) != null) {result.append(line);}} finally {if (reader != null) {reader.close();}if (inputStream != null) {inputStream.close();}con.disconnect();}return result.toString();}
}
在需要发送HTTP请求的地方,调用HttpUtils类中的sendHttpGetRequest方法。
import android.os.AsyncTask;
import android.util.Log;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;public class MainActivity extends AppCompatActivity {private TextView textView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView = findViewById(R.id.textView);new HttpRequestTask().execute("https://api.example.com/data");}private class HttpRequestTask extends AsyncTask<String, Void, String> {@Overrideprotected String doInBackground(String... params) {String result = "";try {result = HttpUtils.sendHttpGetRequest(params[0]);} catch (IOException e) {e.printStackTrace();}return result;}@Overrideprotected void onPostExecute(String result) {super.onPostExecute(result);textView.setText(result);}}
}
在这个示例中,我们创建了一个名为HttpUtils的工具类,其中包含一个名为sendHttpGetRequest的方法,用于发送HTTP GET请求。然后,在MainActivity中,我们创建了一个名为HttpRequestTask的内部类,继承自AsyncTask,并在doInBackground方法中调用HttpUtils.sendHttpGetRequest方法。最后,在onPostExecute方法中,我们将获取到的数据显示在TextView中。
在Android中,访问网络需要声明权限。首先需要在AndroidManifest.xml文件中添加以下权限:
<uses-permission android:name="android.permission.INTERNET" />
2,使用Pull方式解析XML格式数据
在Android中,使用Pull方式解析HTTP URLConnection返回的XML格式数据的代码示例如下:
首先,创建一个名为HttpUtils的工具类,用于处理HTTP请求和响应:
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;public class HttpUtils {public static String getResponse(String requestUrl) throws Exception {URL url = new URL(requestUrl);HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("GET");connection.setConnectTimeout(5000);connection.setReadTimeout(5000);int responseCode = connection.getResponseCode();if (responseCode == HttpURLConnection.HTTP_OK) {InputStream inputStream = connection.getInputStream();BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));StringBuilder stringBuilder = new StringBuilder();String line;while ((line = bufferedReader.readLine()) != null) {stringBuilder.append(line);}bufferedReader.close();return stringBuilder.toString();} else {throw new Exception("请求失败,响应码:" + responseCode);}}
}
然后,在需要解析XML数据的地方,调用HttpUtils.getResponse()方法获取XML字符串,并使用Android内置的XmlPullParser进行解析:
import android.util.Xml;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;import java.io.IOException;
import java.io.StringReader;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);try {String xmlString = HttpUtils.getResponse("http://example.com/data.xml");XmlPullParserFactory factory = XmlPullParserFactory.newInstance();factory.setNamespaceAware(true);XmlPullParser xpp = factory.newPullParser();xpp.setInput(new StringReader(xmlString));int eventType = xpp.getEventType();while (eventType != XmlPullParser.END_DOCUMENT) {if (eventType == XmlPullParser.START_TAG) {String tagName = xpp.getName();switch (tagName) {case "item":// 处理item标签的数据break;case "name":// 处理name标签的数据break;case "value":// 处理value标签的数据break;}}eventType = xpp.next();}} catch (IOException | XmlPullParserException e) {e.printStackTrace();}}
}
注意:请将http://example.com/data.xml替换为实际的XML数据地址。
3,使用OKHttp访问网络
在Android中,使用OkHttp访问网络的完整参考代码例子如下:
首先,在项目的build.gradle文件中添加OkHttp依赖:
dependencies {implementation 'com.squareup.okhttp3:okhttp:4.9.0'
}
然后,创建一个名为OkHttpUtil的工具类,用于封装OkHttp相关的操作:
import okhttp3.*;import java.io.IOException;public class OkHttpUtil {private static final OkHttpClient client = new OkHttpClient();public static String get(String url) throws IOException {Request request = new Request.Builder().url(url).build();try (Response response = client.newCall(request).execute()) {return response.body().string();}}
}
最后,在需要使用OkHttp的地方调用OkHttpUtil工具类的方法:
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;import java.io.IOException;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView textView = findViewById(R.id.textView);try {String result = OkHttpUtil.get("https://api.github.com/users/octocat");textView.setText(result);} catch (IOException e) {e.printStackTrace();}}
}
这个例子展示了如何使用OkHttp库发送GET请求并获取响应。你可以根据需要修改OkHttpUtil类中的方法和参数来实现其他HTTP方法(如POST、PUT、DELETE等)。
4,使用SAX方式解析xml格式数据
在Android中使用SAX解析XML格式数据,首先需要创建一个继承自DefaultHandler的类,然后重写其中的方法来处理XML元素和属性。接下来,使用SAXParserFactory创建一个SAXParser对象,并调用其parse`方法来解析XML数据。
以下是一个简单的示例:
创建一个继承自DefaultHandler的类,例如MyHandler:
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;public class MyHandler extends DefaultHandler {@Overridepublic void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {// 在这里处理XML元素的开始标签System.out.println("开始标签:" + qName);}@Overridepublic void endElement(String uri, String localName, String qName) throws SAXException {// 在这里处理XML元素的结束标签System.out.println("结束标签:" + qName);}@Overridepublic void characters(char[] ch, int start, int length) throws SAXException {// 在这里处理XML元素的文本内容System.out.println("文本内容:" + new String(ch, start, length));}
}
使用SAXParserFactory和SAXParser解析XML数据:
import android.os.AsyncTask;
import android.util.Log;import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;public class MainActivity extends AppCompatActivity {private static final String TAG = "MainActivity";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);new FetchXmlTask().execute("https://api.github.com/users/octocat");}private class FetchXmlTask extends AsyncTask<String, Void, String> {@Overrideprotected String doInBackground(String... urls) {try {URL url = new URL(urls[0]);HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("GET");connection.connect();if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {InputStream inputStream = connection.getInputStream();SAXParserFactory factory = SAXParserFactory.newInstance();SAXParser saxParser = factory.newSAXParser();MyHandler handler = new MyHandler();saxParser.parse(inputStream, handler);return null;} else {return null;}} catch (IOException | ParserConfigurationException | SAXException e) {e.printStackTrace();return null;}}}
}
这个示例中,我们创建了一个名为MyHandler的类来处理XML元素和属性,然后在MainActivity中使用FetchXmlTask异步任务来获取OKHttp返回的XML数据,并使用SAX解析器解析这些数据。
5,发送数据给网络服务器
在Android中,可以使用HttpURLConnection或者第三方库如OkHttp来发送数据给网络服务器。这里给出一个使用HttpURLConnection的简单示例:
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);new Thread(new Runnable() {@Overridepublic void run() {try {String url = "https://api.example.com/data";URL obj = new URL(url);HttpURLConnection con = (HttpURLConnection) obj.openConnection();// 设置请求方法为POSTcon.setRequestMethod("POST");// 添加请求头con.setRequestProperty("User-Agent", "Mozilla/5.0");con.setRequestProperty("Content-Type", "application/json");// 发送POST请求必须设置如下两行con.setDoOutput(true);con.setDoInput(true);// 获取连接对象对应的输出流DataOutputStream wr = new DataOutputStream(con.getOutputStream());wr.writeBytes("{\"key\":\"value\"}");wr.flush();wr.close();int responseCode = con.getResponseCode();System.out.println("Response Code: " + responseCode);BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));String inputLine;StringBuffer response = new StringBuffer();while ((inputLine = in.readLine()) != null) {response.append(inputLine);}in.close();// 输出结果System.out.println(response.toString());} catch (Exception e) {e.printStackTrace();}}}).start();}
}
这个示例中,我们创建了一个新的线程来执行网络请求,以避免阻塞主线程。我们使用HttpURLConnection发起一个POST请求,并添加了一个请求头。然后,我们将要发送的数据写入输出流,并获取服务器的响应。最后,我们将响应内容输出到控制台。
注意:提交的数据都要以键值对的形式存在,数据与数据间用&符合隔开。比如wr.writeBytes(“username=admin&password=123456”);
5,使用Gson方式解析json格式的数据
在Android中使用Gson库解析OKHttp网络返回的数据,首先需要添加Gson库的依赖。在项目的build.gradle文件中添加以下依赖:
dependencies {implementation 'com.google.code.gson:gson:2.8.9'
}
然后,创建一个Java类来表示网络返回的数据结构。例如,假设网络返回的数据是一个包含用户信息的JSON对象:
{"name": "张三","age": 30
}
可以创建一个名为User的Java类:
public class User {private String name;private int age;// getter和setter方法
}
接下来,使用Gson库将网络返回的JSON字符串解析为User对象:
import com.google.gson.Gson;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 假设这是从OKHttp网络请求中获取到的JSON字符串String json = "{\"name\":\"张三\",\"age\":30}";// 创建Gson对象Gson gson = new Gson();// 使用Gson对象将JSON字符串解析为User对象User user = gson.fromJson(json, User.class);// 输出解析后的用户信息System.out.println("姓名:" + user.getName() + ",年龄:" + user.getAge());}
}
这样,就可以使用Gson库将OKHttp网络返回的数据解析为Java对象了。