android篇-如何做一个简单的安卓源码查看器

1,网页源码查看器:

Httpurlconnection:用于发送或接收数据

Mainactivity篇:

import java.io.InputStream;

import java.net.HttpURLConnection;

import java.net.MalformedURLException;

import java.net.URL;

import android.os.Bundle;

import android.os.Handler;

import android.os.Looper;

import android.os.Message;

import android.app.Activity;

import android.view.Menu;

import android.view.View;

import android.widget.EditText;

import android.widget.TextView;

import android.widget.Toast;

public class MainActivity extends Activity {

protected  final int REQUESTSUCESS = 0;  //ctrl + shift + X  Y

protected  final int REQUESTNOTFOUND = 1;

protected  final int REQUESTEXCEPTION = 2;

private EditText et_path;

private TextView tv_reuslt;

//在主线程中定义一个handler

private Handler handler = new Handler(){

//这个方法是在主线程里面执行的

public void handleMessage(android.os.Message msg) {

//所以就可以在主线程里面更新ui了

//[1]区分一下发送的是哪条消息

switch (msg.what) {

case REQUESTSUCESS:   //代表请求成功

String content =  (String) msg.obj;

tv_reuslt.setText(content);

break;

case REQUESTNOTFOUND:   //代表请求成功

Toast.makeText(getApplicationContext(), "请求资源不存在", 0).show();

break;

case REQUESTEXCEPTION:   //代表请求成功

Toast.makeText(getApplicationContext(), "服务器忙 请稍后....", 1).show();

break;

default:

break;

}

};

};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

// [1]找到我们关心的控件

et_path = (EditText) findViewById(R.id.et_path);

tv_reuslt = (TextView) findViewById(R.id.tv_result);

//[1.1]打印当前线程的名字

System.out.println("当前线程名字:"+Thread.currentThread().getName());

}

//[2]点击按钮进行查看 指定路径的源码

public void click(View v) {

//[2.0]创建一个子线程

new Thread(){public void run() {

try {

//[2.1]获取源码路径

String path = et_path.getText().toString().trim();

//[2.2]创建URL 对象指定我们要访问的 网址(路径)

URL url = new URL(path);

//[2.3]拿到httpurlconnection对象  用于发送或者接收数据

HttpURLConnection  conn = (HttpURLConnection) url.openConnection();

//[2.4]设置发送get请求

conn.setRequestMethod("GET");//get要求大写  默认就是get请求

//[2.5]设置请求超时时间

conn.setConnectTimeout(5000);

//[2.6]获取服务器返回的状态码

int code = conn.getResponseCode();

//[2.7]如果code == 200 说明请求成功

if (code == 200) {

//[2.8]获取服务器返回的数据   是以流的形式返回的  由于把流转换成字符串是一个非常常见的操作  所以我抽出一个工具类(utils)

InputStream in = conn.getInputStream();

//[2.9]使用我们定义的工具类 把in转换成String

String content = StreamTools.readStream(in);

//2.9.0 创建message对象

Message msg = new Message();

msg.what = REQUESTSUCESS;

msg.obj = content;

//2.9.1 拿着我们创建的handler(助手) 告诉系统 说我要更新ui

handler.sendMessage(msg);  //发了一条消息  消息(msg)里把数据放到了msg里 handleMessage方法就会执行

//[2.9.1]把流里面的数据展示到textview 上  这句话就属于更新ui的逻辑

// tv_reuslt.setText(content);

}else{

//请求资源不存在  Toast是一个view 也不能在在线程更新ui

Message msg = new Message();

msg.what = REQUESTNOTFOUND;//代表哪条消息

handler.sendMessage(msg);

}

} catch (Exception e) {

e.printStackTrace();

Message msg = new Message();

msg.what = REQUESTEXCEPTION;//代表哪条消息

handler.sendMessage(msg);  //发送消息

}

};}.start();

}

}

//StreamTools与mainactivity放同一个包里

import java.io.ByteArrayOutputStream;

import java.io.InputStream;

public class StreamTools {

//把一个inputStream 转换成一个String

public static String readStream(InputStream in) throws Exception{

//定义一个内存输出流

ByteArrayOutputStream baos = new ByteArrayOutputStream();

int len = -1;

byte[] buffer = new byte[1024]; //1kb

while((len=in.read(buffer))!=-1){

baos.write(buffer, 0, len);

}

in.close();

String content = new String(baos.toByteArray());

return content;

}

}

activity_main篇:

<LinearLayout 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:orientation="vertical"

tools:context=".MainActivity" >

<EditText

android:id="@+id/et_path"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:hint="请输入查看网址" />

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="click"

android:text="查看" />

<ScrollView

android:layout_width="match_parent"

android:layout_height="wrap_content" >

<TextView

android:id="@+id/tv_result"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:text="hagha" />

</ScrollView>

</LinearLayout>

最后最重要的是勿忘配置许可证

时间: 2024-11-09 13:27:28

android篇-如何做一个简单的安卓源码查看器的相关文章

安卓http源码查看器详解

1.效果图如下,输入网址就可以看到该网址的源码 2.项目工程文件如右图所示: 3.首先,布局文件如下,我采用的是线性布局 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent"

黎活明8天快速掌握android视频教程--24_网络通信之网页源码查看器

1 该项目的主要功能就是从将后台的html网页在Android的界面上显示出来 后台就是建立一个java web工程在工程尚建立一个html或者jsp文件就可以了,这里主要看Android客户端的程序 xml文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" andr

Android(java)学习笔记203:网页源码查看器

1.项目框架图: 2.首先是布局文件activity_main.xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="m

使用Multiplayer Networking做一个简单的多人游戏例子-2/3(Unity3D开发之二十六)

猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/51007512 使用Multiplayer Networking做一个简单的多人游戏例子-1/3 使用Multiplayer Networking做一个简单的多人游戏例子-2/3 使用Multiplayer Networking做一个简单的多人游戏例子-3/3 7. 在网络中控制Player移动 上一篇中,玩家操

我的Android进阶之旅------&amp;gt;Android关于Log的一个简单封装

android.util.Log类,能够方便地用于在编码调试过程中打印日志. 可是在公布后的产品中,假设有太多的日志打印.则会严重地影响性能. 对android.util.Log类做一个简单的封装.当产品要公布的话,将Debug设为false. 代码例如以下. public class LogUtil { /**正式上线時候设为false*/ private final static boolean debug = true; private final static String TAG =

使用React并做一个简单的to-do-list

1. 前言 说到React,我从一年之前就开始试着了解并且看了相关的入门教程,而且还买过一本<React:引领未来的用户界面开发框架 >拜读.React的轻量组件化的思想及其visual-dom的这种技术创新,也算是早就有了初步了解.一来没有学的太深入,二来后来在工作中和业余项目中都没有用到,因此慢慢的就更加生疏了. 近期,因为我想把自己的开源项目wangEditor能放在React.angular和vuejs中使用.先从react开始,顺手自己也重试一下React的基础知识,顺便再做一个小d

【Bugly干货分享】一起用 HTML5 Canvas 做一个简单又骚气的粒子引擎

Bugly 技术干货系列内容主要涉及移动开发方向,是由Bugly邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处. 前言 好吧,说是“粒子引擎”还是大言不惭而标题党了,离真正的粒子引擎还有点远.废话少说,先看[demo],扫描后点击屏幕有惊喜哦… 本文将教会你做一个简单的canvas粒子制造器(下称引擎). 世界观 这个简单的引擎里需要有三种元素:世界(World).发射器(Launcher).粒子(Grain).总得来说就是:发射器存在于世界之中,

我的Android进阶之旅------&gt;Android关于Log的一个简单封装

android.util.Log类,可以方便地用于在编码调试过程中打印日志.但是在发布后的产品中,如果有太多的日志打印,则会严重地影响性能.对android.util.Log类做一个简单的封装,当产品要发布的话,将Debug设为false. 代码如下. public class LogUtils{ /**正式上线時候设为false*/ private static final boolean Debug = true; private static final String TAG = "oyp

(Android+IOS)正在做一个新闻App,做的差不多了,听听大家的建议 (图)

(Android+IOS)正在做一个新闻App,做的差不多了,听听大家的建议! 新闻采集器做好了,前端展示APP界面感觉还不是很好,还需要改进改进,希望发布(Android和IOS版本)前听听大家的建议! 新闻采集器做好了,前端展示APP界面感觉还不是很好,还需要改进改进,希望发布前听听大家的建议!