本网站(662p.com)打包出售,且带程序代码数据,662p.com域名,程序内核采用TP框架开发,需要联系扣扣:2360248666 /wx:lianweikj
精品域名一口价出售:1y1m.com(350元) ,6b7b.com(400元) , 5k5j.com(380元) , yayj.com(1800元), jiongzhun.com(1000元) , niuzen.com(2800元) , zennei.com(5000元)
需要联系扣扣:2360248666 /wx:lianweikj
Android里的网络以及XML,JSON文件的解析
manongba · 731浏览 · 发布于2019-08-14 +关注

涉及到Android里的网络编程都需要添加权限

<uses-permission android:name="android.permission.INTERNET" />


一、WebView:是应用程序打开web网页的UI控件


        前台:

<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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.webtest.WebViewActivity" >
 
    <WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
 
</RelativeLayout>

      

后端: 

public class WebViewActivity extends Activity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.webview);
webView=(WebView)findViewById(R.id.webView);
//getSettings():设置浏览器一些属性
//setJavaScriptEnabled():设置WebView支持javascript脚本
webView.getSettings().setJavaScriptEnabled(true);
//setWebViewClient(new WebViewClient()):让从一个网页跳转到另一个网页时仍在当前WebView显示
webView.setWebViewClient(new WebViewClient());
//loadUrl(String):设置打开的网址
webView.loadUrl("http://www.baidu.com");
}
 
}


二、Http协议:客户端提交数据给服务端和从服务端获得数据,像WebView也是向百度的服务端发出一条Http请求,服务端返回HTML页面,客户端(浏览器)解析后展示出页面。


 提交数据和获得数据的方式有很多,这里介绍一种,使用HttpURLConnection来向服务器提交数据或者获得数据。


获得数据:

//传入网址,获得请求网页数据(XML文件数据或JSON文件数据)
public static String sendHttpRequest(String address) {
HttpURLConnection connection=null;
try {
URL url=new URL(address);
connection=(HttpURLConnection)url.openConnection();
//设置请求方式:GET为从服务器获得数据,POST为提交数据
connection.setRequestMethod("GET");
//设置连接最长超时时间(单位毫秒)
connection.setConnectTimeout(8000);
//设置读取最长超时时间(单位毫秒)
connection.setReadTimeout(8000);
connection.setDoInput(true);
connection.setDoOutput(true);
//获取到的数据输入流(InputStream为抽象类)
InputStream in=connection.getInputStream();
//对输入流进行读取
BufferedReader reader=new BufferedReader(new InputStreamReader(in));
StringBuffer response = new StringBuffer();
String line;
while((line=reader.readLine()) != null) {
response.append(line);
}
return response.toString();
} catch (Exception e) {
e.printStackTrace();
return e.getMessage();
}finally {
if(connection!=null) {
connection.disconnect();
}
}
}


提交数据: 

public static void submit(String address) {
HttpURLConnection connection=null;
try {
//设置为提交模式
connection.setRequestMethod("POST");
DataOutputStream out=new DataOutputStream(connection.getOutputStream());
out.writeBytes("username=admin&password=123456");//数据与数据之间用&分割
}catch (Exception e) {
e.printStackTrace();
}finally {
if(connection!=null) {
connection.disconnect();
}
}
}


三、解析获得的网页数据(XML文件或JSON文件)


1、解析XML:使用Pull方式。

需要导入jar包:xmlpull-xpp3-1.1.4c.jar


//Pull解析XML文件
private void parseXMLWithPull(String xml_data) {
        try {
            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            XmlPullParser xmlPullParser = factory.newPullParser();
            xmlPullParser.setInput(new StringReader(xml_data));
            int eventType=xmlPullParser.getEventType();
            String id = "";
            String name = "";
            String version = "";
            while (XmlPullParser.END_DOCUMENT != eventType) {
                String nodeName = xmlPullParser.getName();
                switch (eventType) {
                //解析时的判断逻辑
                    case XmlPullParser.START_TAG:
                        if ("id".equals(nodeName)) {
                            id = xmlPullParser.nextText();
                        } else if ("name".equals(nodeName)) {
                            name = xmlPullParser.nextText();
                        } else if ("version".equals(nodeName)) {
                            version = xmlPullParser.nextText();
                        }
                        break;
                    //完成解析某个结点
                    case XmlPullParser.END_TAG:
                        if ("app".equals(nodeName)) {
                            Log.d("id is ",id);
                            Log.d(" name is ",name);
                            Log.d(" version is ",version);
                        }
                        break;
                    default:
                        break;
                }
                eventType = xmlPullParser.next();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
}


2、解析JSON有俩种方式:JSONObject和GSON 


      JSONObject:

//JSONObject解析JSON文件
private void parseJSONWithJSONObject(String json_data) {
try {
JSONArray jsonArray=new JSONArray(json_data);
for(int i=0;i<jsonArray.length();i++) {
JSONObject jsonObject=jsonArray.getJSONObject(i);
String id=jsonObject.getString("id");
String name=jsonObject.getString("name");
String version=jsonObject.getString("version");
Log.d("MainActivity", "id is"+id);
Log.d("MainActivity", "name is"+name);
Log.d("MainActivity", "version is"+version);
}
}catch(Exception e) {
e.printStackTrace();
}
}

       

 GSON :

需要导入jar包:gson-2.0.jar,log4j-1.2.17.jar,slf4j-api-1.7.10.jar,slf4j-log4j12-1.7.10.jar

      

还需要自定义与JSON文件相对应的对象 

class App{
private String id;
private String name;
private String version;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
}

        

最后对传入JSON数据(String形式)进行解析

//GSON解析JSON文件方法
private void parseJSONWithGSON(String json_data) {
Gson gson=new Gson();
List<App> appList=gson.fromJson(json_data, new TypeToken<List<App>>() {}.getType());
for(App app:appList) {
Log.d("MainActivity", "id is"+app.getId());
Log.d("MainActivity", "name is"+app.getName());
Log.d("MainActivity", "version is"+app.getVersion());
}
}


相关推荐

android下vulkan与opengles纹理互通

talkchan · 1158浏览 · 2020-11-23 10:37:39
Android 使用RecyclerView实现轮播图

奔跑的男人 · 2166浏览 · 2019-05-09 17:11:13
微软发布新命令行工具 Windows Terminal

吴振华 · 860浏览 · 2019-05-09 17:15:04
Facebook 停止屏蔽部分区块链广告

· 746浏览 · 2019-05-09 17:20:08
加载中

0评论

评论
分类专栏
小鸟云服务器
扫码进入手机网页