版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cqupt2011214692/article/details/51172539
一、网络数据的获取
1、权限获取
<uses-permission android:name="android.permission.INTERNET"/>
2、数据处理
public void onClick(View v) {
switch(v.getId()){
case R.id.button_submit:
String url = getEditTextUrl();
//请求网络数据
//1.申请网络权限
// String data = requestData(url);
new RequestNetworkDataTask().execute(url);
break;
}
}
private String requestData(String urlString) {
try {
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(5000);
connection.setRequestMethod("GET");
connection.connect();
int responseCode = connection.getResponseCode();
String responseMessage = connection.getResponseMessage();
InputStream inputStream = connection.getInputStream();
Reader reader = new InputStreamReader(inputStream,"utf-8");
char[] buffer = new char[1024];
reader.read(buffer);
String result = new String(buffer);
return result;
} catch (MalformedURLException e) {
e.printStackTrace();
Toast.makeText(NetWorkActivity.this,"非法的url",Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(NetWorkActivity.this,"读写异常",Toast.LENGTH_SHORT).show();
}
return null;
}
3、异步处理
//异步任务处理
class RequestNetworkDataTask extends AsyncTask<String,Integer,String>{
//在后台work之前
@Override
protected void onPreExecute() {
super.onPreExecute();
//主线程
//UI loading
}
@Override
protected String doInBackground(String[] params) {
//
String result = requestData(params[0]);
return result;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
//执行完了之后在主线程中
mTextview.setText(result);
}
@Override
protected void onCancelled() {
super.onCancelled();
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
}
}
4、总结
要执行网络操作,必须获取网络权限;在获取之后就可以通过HttpUrlConnection类获取网络的数据,最后需要在线程中对数据进行异步处理,不要在主线程中处理,这样会导致程序崩溃。
二、Xml文件的解析
1.SAX的解析方式
private void testSAXParse(){
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
try {
SAXParser saxParser = saxParserFactory.newSAXParser();//解析器
XMLReader xmlReader = saxParser.getXMLReader();//XML读取器
SAXParseHandler saxParseHandler = new SAXParseHandler();
xmlReader.setContentHandler(saxParseHandler);
InputStream inputStream = getResources().openRawResource(R.raw.test);
InputSource inputSource = new InputSource(inputStream);
xmlReader.parse(inputSource);
saxParseHandler.getXMLList();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
2.pull的解析方式,以城市数据进行解析
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mButton = (Button) findViewById(R.id.create);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//获取src文件下的资源文件
InputStream is = getClassLoader().getResourceAsStream("weatherInfo.xml");
//拿到pull解析器
XmlPullParser xp = Xml.newPullParser();
//初始化
try {
xp.setInput(is,"gbk");
//获取当前节点的事件类型,通过事件类型的判断,我们可以知道当前节点是什么节点,从而确定我们应该做什么操作
int type = xp.getEventType();
City city = null;
while(type != XmlPullParser.END_DOCUMENT){
//根据节点的类型,要做不同的操作
switch (type){
case XmlPullParser.START_TAG:
//获取当前节点的名字
if("weather".equals(xp.getName())){
//创建City集合对象 ,用于存放city的javabean
mCityList = new ArrayList<City>();
}
else if("city".equals(xp.getName())) {
//创建城市的javabean对象
city = new City();
}
else if("name".equals(xp.getName())){
//获取当前节点的下一个节点文本
String name = xp.nextText();
city.setName(name);
}
else if("temp".equals(xp.getName())){
//获取当前节点的下一个节点文本
String temp = xp.nextText();
city.setTemp(temp);
}
else if("pm".equals(xp.getName())){
//获取当前节点的下一个节点文本
String pm = xp.nextText();
city.setPm(pm);
}
break;
case XmlPullParser.END_TAG:
if("city".equals(xp.getName())){
mCityList.add(city);
}
break;
}
//把指针移动到下一个节点,并返回该节点的事件类型
type = xp.next();
}
for (City c:mCityList
) {
System.out.println(c.toString());
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
三、json数据的解析
1、类型
- JSONObject
- JSONArray
- JSONException
- JSONStringer
- JSONTokener
2、标识
- { }表示一个对象
- [ ]表示一个数据
3、基本操作
//JSON
InputStream is = getResources().openRawResource(R.raw.json);
String jsonString = getStringByInputStream(is);
JSONObject jsonObject = new JSONObject(jsonString);
jsonObject.get("title");
jsonObject.getJSONArray("images");
4、利用Gson库解析
(1)导入库
app—>Dependencies—->+—–>Libray dependency—–>搜索gson
(2)创建GSON对象
//GSON
Gson gson = new Gson();
四、基本的网络操作
不多说,直接上代码:
public class NetWorkUtil {
public void testNetWork(Context context){
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
boolean isWifiConnection = networkInfo.isConnected();
networkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
boolean isMobileConnection = networkInfo.isConnected();
}
public boolean isOnline(Context context){
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
return (networkInfo != null && networkInfo.isConnected());
}
}