确定需求&获取代码
我们要做的就是一个取网页源码的功能,需求确定无疑。接下来我们要去百度找java代码,百度搜一下就可以了,如图
我搜到的是这个:
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里,如图:
为啥全是报错?
不急,你看!报错出现在import上,说明了什么?说明了我们的本地环境缺少这个jar包!用E4A的话说:“您的工程缺少XXX类库”,懂了吧?别慌,这个类库不要998也不要98,我们去捡一个:
先看看却啥吧,缺的是“org.apache.http.*”这个包,我们去捡一个来:
Binary:二进制 Source:资源
接着下载到本地,打开,解压到你的java工作夹(其实随便解压到哪里,但是记住不要删了就行)然后导入:
全部选中,然后导入:
然后返回来看一下:
代码全部正常,running!
在E4A里写入接口函数
OK,先随便创建一个工程,然后创建一个接口函数,如图:
好吧,慢慢分析,咱也不能太急了。
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代码&测试
原文地址:https://blog.ray-o.cn/?page_id=985
版权声明
1.本站大部分下载资源收集于网络,不保证其完整性以及安全性,请下载后自行测试。
2.本站资源仅供学习和交流使用,版权归资源原作者所有,请在下载后24小时之内自觉删除。
3.若作商业用途,请购买正版,由于未及时购买和付费发生的侵权行为,与本站无关。
4.若内容涉及侵权或违法信息,请联系本站管理员进行下架处理,邮箱ganice520@163.com(本站不支持其他投诉反馈渠道,谢谢合作)
发表评论