首页 编程设计易安卓正文

E4A接口函数之取网页源码的java写法

云水 易安卓 2020-10-04 10:47:16 1615 0 E4A接口函数

确定需求&获取代码

我们要做的就是一个取网页源码的功能,需求确定无疑。接下来我们要去百度找java代码,百度搜一下就可以了,如图

image.png

我搜到的是这个:

import java.io.*;
import org.apache.http.*;
import org.apache.http.client.*;
import org.apache.http.client.methods.*;
import org.apache.http.impl.client.*;
import org.apache.http.util.*;
 
 
 
public class 取源码2{
public static String downLoad(String url,String codetype)
 {
String response = "";
//第一步:创建HttpClient对象
HttpClient httpClient = new DefaultHttpClient();
//第二步:创建代表请求的对象,参数是访问的服务器地址
HttpGet httpGet = new HttpGet(url);
//第三步:执行请求,获取服务器发还的相应对象
HttpResponse httpResponse = null;
try {
httpResponse = httpClient.execute(httpGet);
//第四步:检查相应的状态是否正常:检查状态码的值是200表示正常
if (httpResponse.getStatusLine().getStatusCode() == 200) {
//第五步:从相应对象当中取出数据,放到entity当中
HttpEntity entity = httpResponse.getEntity();
response = EntityUtils.toString(entity, codetype);//将entity当中的数据转换为字符串
} else {
response = "";
}
} catch (IOException e) {
e.printStackTrace();
response = "";
}finally {
httpClient.getConnectionManager().shutdown();
}
return response;
}
}

代码分析

虽然代码是捡来的,我们也要对它进行一个分析。如下代码:

import java.io.*;
import org.apache.http.*;
import org.apache.http.client.*;
import org.apache.http.client.methods.*;
import org.apache.http.impl.client.*;
import org.apache.http.util.*;
 
 
 
public class 取源码2{
public static String downLoad(String url,String codetype)
 {
String response = "";
//第一步:创建HttpClient对象
HttpClient httpClient = new DefaultHttpClient();
//第二步:创建代表请求的对象,参数是访问的服务器地址
HttpGet httpGet = new HttpGet(url);
//第三步:执行请求,获取服务器发还的相应对象
HttpResponse httpResponse = null;
try {
httpResponse = httpClient.execute(httpGet);
//第四步:检查相应的状态是否正常:检查状态码的值是200表示正常
if (httpResponse.getStatusLine().getStatusCode() == 200) {
//第五步:从相应对象当中取出数据,放到entity当中
HttpEntity entity = httpResponse.getEntity();
response = EntityUtils.toString(entity, codetype);//将entity当中的数据转换为字符串
} else {
response = "";
}
} catch (IOException e) {
e.printStackTrace();
response = "";
}finally {
httpClient.getConnectionManager().shutdown();
}
return response;
}
}
Java

可以看到代码头部写了很多import,这是干啥的?当然不是用来吃的,也不是用来玩的这个是包引用申明,就是你代码里面引用了什么包,就像E4A里面你用了类库一样。。。

我们学java干啥?不就是为了摆脱对类库的依赖么。。。是的,但是我告诉你,很遗憾,你仍然无法摆脱对“类库”的依靠,只不过现在变成了对jar包的依靠想要无拘无束,唯有努力学习

然后其他部分的代码就是一些调用这个所谓的jar包的。

代码本地模拟测试

接下来我们就把代码上到本地的java环境上测试一下看看能不能取出来,我们再次复制粘贴到eclipse里,如图:

image.png

为啥全是报错?

不急,你看!报错出现在import上,说明了什么?说明了我们的本地环境缺少这个jar包!用E4A的话说:“您的工程缺少XXX类库”,懂了吧?别慌,这个类库不要998也不要98,我们去捡一个:

先看看却啥吧,缺的是“org.apache.http.*”这个包,我们去捡一个来:

image.png

image.png

image.png

Binary:二进制      Source:资源

image.png

接着下载到本地,打开,解压到你的java工作夹(其实随便解压到哪里,但是记住不要删了就行)然后导入:

image.png

image.png

全部选中,然后导入:

image.png

然后返回来看一下:

image.png

代码全部正常,running!

image.png

在E4A里写入接口函数

OK,先随便创建一个工程,然后创建一个接口函数,如图:

image.png

image.png

好吧,慢慢分析,咱也不能太急了。


package com.e4a.runtime.api;//包名必须固定为这个,不能自己修改
 
import com.e4a.runtime.annotations.SimpleFunction;
import com.e4a.runtime.annotations.SimpleObject;
import com.e4a.runtime.annotations.UsesPermissions;
 
import com.e4a.runtime.应用操作;//可以引用E4A支持库中已经存在的类
import com.e4a.runtime.android.mainActivity;//mainActivity是E4A唯一的Activity,所有的窗口和组件都依附于此,调用方法:mainActivity.getContext()
 
import android.widget.Toast;
 
@UsesPermissions(permissionNames = "android.permission.INTERNET")//安卓权限标记,如果接口函数中需要额外的安卓权限,可在此填写,多个权限可以用逗号隔开
@SimpleObject
public final class 接口函数1{
 
    @SimpleFunction//导出函数标记
    public static void 测试函数(String 参数){ 
        应用操作.弹出提示(参数); 
    }
 
    @SimpleFunction//导出函数标记
    public static void 测试函数2(String 参数){ 
        Toast.makeText(mainActivity.getContext(), 参数, 0).show();
    }
 
}

看这里,它给出的例子就有两个函数,删掉一个留一个,当然它提供的函数并非主方法,这个很好理解,所以我们的代码也以普通的公开方法的形式写上去,但是要注意的是我们的方法名里面就得写一个返回值的类型,然后在后面的括号里留下两个作为参数的变量一样的东西,后面的url和端口类型我们要用到。所以,重新构造一个类,是这样的:


public static String 获取源码(String url,String codetype) {
 
}

解释一下这两个参数:

url:网页地址。     codetype:编码类型。

好了,接下来我们把代码里面真正拿来干活的代码块复制过来,是这样的:


String response = "";
//第一步:创建HttpClient对象
HttpClient httpClient = new DefaultHttpClient();
//第二步:创建代表请求的对象,参数是访问的服务器地址
HttpGet httpGet = new HttpGet(url);
//第三步:执行请求,获取服务器发还的相应对象
HttpResponse httpResponse = null;
try {
httpResponse = httpClient.execute(httpGet);
//第四步:检查相应的状态是否正常:检查状态码的值是200表示正常
if (httpResponse.getStatusLine().getStatusCode() == 200) {
//第五步:从相应对象当中取出数据,放到entity当中
HttpEntity entity = httpResponse.getEntity();
response = EntityUtils.toString(entity, codetype);//将entity当中的数据转换为字符串
} else {
response = "";
}
} catch (IOException e) {
e.printStackTrace();
response = "";
}finally {
httpClient.getConnectionManager().shutdown();
}
return response;

这里return response;语句是返回一个值,这个就是有返回参数的一个方法,注意这个语句只能写在最末尾,而且在方法头部里面没有写返回类型void的情况下,这条语句不可缺少。

然后我们把它整个放到接口函数里面,覆盖已有的作为例子的那一条函数,删除作为例子的另一条函数,是这样的:


package com.e4a.runtime.api;//包名必须固定为这个,不能自己修改
 
import com.e4a.runtime.annotations.SimpleFunction;
import com.e4a.runtime.annotations.SimpleObject;
import com.e4a.runtime.annotations.UsesPermissions;
 
import com.e4a.runtime.应用操作;//可以引用E4A支持库中已经存在的类
import com.e4a.runtime.android.mainActivity;//mainActivity是E4A唯一的Activity,所有的窗口和组件都依附于此,调用方法:mainActivity.getContext()
 
import android.widget.Toast;
 
@UsesPermissions(permissionNames = "android.permission.INTERNET")//安卓权限标记,如果接口函数中需要额外的安卓权限,可在此填写,多个权限可以用逗号隔开
@SimpleObject
public final class 接口函数1{
 
    @SimpleFunction//导出函数标记
   public static String 获取源码(String url,String codetype)
 {
String response = "";
//第一步:创建HttpClient对象
HttpClient httpClient = new DefaultHttpClient();
//第二步:创建代表请求的对象,参数是访问的服务器地址
HttpGet httpGet = new HttpGet(url);
//第三步:执行请求,获取服务器发还的相应对象
HttpResponse httpResponse = null;
try {
httpResponse = httpClient.execute(httpGet);
//第四步:检查相应的状态是否正常:检查状态码的值是200表示正常
if (httpResponse.getStatusLine().getStatusCode() == 200) {
//第五步:从相应对象当中取出数据,放到entity当中
HttpEntity entity = httpResponse.getEntity();
response = EntityUtils.toString(entity, codetype);//将entity当中的数据转换为字符串
} else {
response = "";
}
} catch (IOException e) {
e.printStackTrace();
response = "";
}finally {
httpClient.getConnectionManager().shutdown();
}
return response;
}
 
}

诶,这时候注意不要忘了导包,写一下引用,就是那一堆的import,然后导包就免了,Android是自带这个包的,如下:


package com.e4a.runtime.api;//包名必须固定为这个,不能自己修改
 
import com.e4a.runtime.annotations.SimpleFunction;
import com.e4a.runtime.annotations.SimpleObject;
import com.e4a.runtime.annotations.UsesPermissions;
 
import com.e4a.runtime.应用操作;//可以引用E4A支持库中已经存在的类
import com.e4a.runtime.android.mainActivity;//mainActivity是E4A唯一的Activity,所有的窗口和组件都依附于此,调用方法:mainActivity.getContext()
 
import android.widget.Toast;
 
import java.io.*;
import org.apache.http.*;
import org.apache.http.client.*;
import org.apache.http.client.methods.*;
import org.apache.http.impl.client.*;
import org.apache.http.util.*;
 
@UsesPermissions(permissionNames = "android.permission.INTERNET")//安卓权限标记,如果接口函数中需要额外的安卓权限,可在此填写,多个权限可以用逗号隔开
@SimpleObject
public final class 接口函数1{
 
    @SimpleFunction//导出函数标记
   public static String 获取源码(String url,String codetype)
 {
String response = "";
//第一步:创建HttpClient对象
HttpClient httpClient = new DefaultHttpClient();
//第二步:创建代表请求的对象,参数是访问的服务器地址
HttpGet httpGet = new HttpGet(url);
//第三步:执行请求,获取服务器发还的相应对象
HttpResponse httpResponse = null;
try {
httpResponse = httpClient.execute(httpGet);
//第四步:检查相应的状态是否正常:检查状态码的值是200表示正常
if (httpResponse.getStatusLine().getStatusCode() == 200) {
//第五步:从相应对象当中取出数据,放到entity当中
HttpEntity entity = httpResponse.getEntity();
response = EntityUtils.toString(entity, codetype);//将entity当中的数据转换为字符串
} else {
response = "";
}
} catch (IOException e) {
e.printStackTrace();
response = "";
}finally {
httpClient.getConnectionManager().shutdown();
}
return response;
}
 
}

完善java代码&测试

image.png

image.png

原文地址:https://blog.ray-o.cn/?page_id=985

版权声明

1.本站大部分下载资源收集于网络,不保证其完整性以及安全性,请下载后自行测试。
2.本站资源仅供学习和交流使用,版权归资源原作者所有,请在下载后24小时之内自觉删除。
3.若作商业用途,请购买正版,由于未及时购买和付费发生的侵权行为,与本站无关。
4.若内容涉及侵权或违法信息,请联系本站管理员进行下架处理,邮箱ganice520@163.com(本站不支持其他投诉反馈渠道,谢谢合作)

本文链接:http://apod.cc/index.php/post/484.html

发表评论

评论列表(0人评论 , 1615人围观)
☹还没有评论,来说两句吧...