最终目的

以JSON的形式,将数据存入服务器端。 在Android中,以Handler加载显示大批量文字。 在此以加载金庸小说《天龙八部(新修版)》为例(2580480 字节)。
以tomcat为服务器,在jsp中以I/O读取本机上的txt文件,写入JSON数据。
在加载过程中,以进度条的形式提示用户需要等待。 加载完成后,进度条消失,并显示加载内容。

Activity文件

package com.app.test02;import java.util.Map;import com.app.util.MyApplication;import android.app.Activity;import android.opengl.Visibility;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.widget.Button;import android.widget.ProgressBar;import android.widget.TextView;public class HanderTest_Text extends Activity {private Button button;private TextView textView;private Handler handler;private ProgressBar progressBar;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_hander_text);button = (Button) findViewById(R.id.button1);textView = (TextView) findViewById(R.id.textView1);progressBar = (ProgressBar) findViewById(R.id.progressBar1);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubprogressBar.setVisibility(View.VISIBLE);button.setText("加载中...");new MyThread().start();}});handler = new Handler(){@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubsuper.handleMessage(msg);textView.setText(msg.obj.toString());progressBar.setVisibility(View.GONE);button.setText("加载完成");button.setEnabled(false);}};}class MyThread extends Thread{@Overridepublic void run() {// TODO Auto-generated method stubString result = ApplicationDemo.handleGet("http://10.0.2.2:8888/android/");Map map = ApplicationDemo.getMap(result);Message message = handler.obtainMessage();message.obj = map.get("book");try {sleep(30000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}handler.sendMessage(message);}}}

XML布局文件

activity_hander_text.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    android:background="#fff" >    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="vertical"         android:gravity="center">        <Button            android:id="@+id/button1"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="加载文本" />    </LinearLayout>    <ScrollView        android:id="@+id/scrollView1"        android:layout_width="match_parent"        android:layout_height="wrap_content" >        <LinearLayout            android:layout_width="match_parent"            android:layout_height="match_parent"            android:orientation="vertical" >                <TextView        android:id="@+id/textView1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text=""         android:textColor="#000"/>                    </LinearLayout>    </ScrollView>    <ProgressBar        android:id="@+id/progressBar1"        style="?android:attr/progressBarStyleLarge"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:visibility="gone" /></LinearLayout>

ApplicationDemo

package com.app.util;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.util.EntityUtils;import org.json.JSONException;import org.json.JSONObject;import android.app.Application;public class ApplicationDemo extends Application {/** 发送GET请求并获取服务器端返回值 */public static String handleGet(String strUrl) {String result = null;HttpGet request = new HttpGet(strUrl);//实例化get请求DefaultHttpClient client = new DefaultHttpClient();//实例化客户端try {HttpResponse response = client.execute(request);//执行该请求,得到服务器端的响应内容if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {result = EntityUtils.toString(response.getEntity());//把响应结果转成String} else {result = response.getStatusLine().toString();}} catch (Exception e) {return e.getMessage();}return result;}/** 将JSON字符串转换为Map */public static Map<String, Object> getMap(String jsonString) {JSONObject jsonObject;try {jsonObject = new JSONObject(jsonString);@SuppressWarnings("unchecked")Iterator<String> keyIter = jsonObject.keys();String key;Object value;Map<String, Object> valueMap = new HashMap<String, Object>();while (keyIter.hasNext()) {key = keyIter.next();value = jsonObject.get(key);valueMap.put(key, value);}return valueMap;} catch (JSONException e) {e.printStackTrace();}return null;}}

服务器端

在tomcat的\webapps文件夹下新建android文件夹,在其中新建一个index.jsp,用来存放服务器端的JSON数据。

index.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"      pageEncoding="UTF-8" import="java.util.*" import="java.io.*"%>  <%response.setContentType("text/html;charset=utf-8");%><%BufferedReader bReader = null;  String line = null;  StringBuffer buffer = new StringBuffer();  try {  //bReader =new BufferedReader(new FileReader(new File("D:\\Program File\\apache-tomcat-7.0.20\\webapps\\android\\index.jsp")));  bReader =new BufferedReader(new FileReader(new File("E:\\文字\\金庸\\TXT\\新修版\\天龙八部(新修版).txt")));while ((line = bReader.readLine())!=null) {  buffer.append(line).append("\n");  }  } catch (Exception e) {  // TODO: handle exception  e.printStackTrace();  } out.print("{\"book\":\"" + buffer.toString() + "\"}");%>

完成后,打开tomcat服务器,在浏览器中输入路径,尝试访问该JSP文件。

如能访问则说明服务器端没问题。

加入权限

由于要访问服务器网络,所以,必须在AndroidManifest.xml中加入网络访问权限:
<uses-permission android:name="android.permission.INTERNET"/>

最终效果

加载前



加载过程中



加载完成后


更多相关文章

  1. android TextView 加载html 显示图片并且添加img标签点击事件工
  2. android开发-NDK-JNI入门教程
  3. android webview加载不出ajax的问题
  4. Android.bp正确姿势添加宏控制编译指南
  5. Android(安卓)项目组件化之创建module,生成aar,引入aar
  6. Android(安卓)Webview组件使用总结
  7. Android之预览PDF文件
  8. Android(安卓)studio如何指定使用自己生成的keystore调试
  9. unity导出到android日志

随机推荐

  1. 0628前端作业
  2. 今日套餐使用
  3. table表格的运用
  4. mysql优化器追踪示例
  5. 表单和CSS选择器的案例
  6. 伪类选择器+盒模型+icon的使用方法+百分
  7. 简单的3行3列布局和固定定位
  8. 7/30号作业
  9. 在线QQ客服的固定定位以及三行三列的定位
  10. 字体图标的使用和盒模型的理解与box-sizi