Android四大组件之Service(续2)
1.HttpRequest
package com.joyfulmath.android4example.http; import java.io.BufferedReader;
import java.io.InputStreamReader; import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient; import com.joyfulmath.android4example.R; import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView; public class HttpDemoActivity extends Activity implements IResult { protected static final String TAG = "httpdemo.HttpDemoActivity";
public Handler mMainHandler;
public static final String RequestUrl = "http://www.baidu.com";
Button mBtnRequest;
TextView mResponseView;
Button mbtn_json;
/*
* (non-Javadoc)
*
* @see android.app.Activity#onCreate(android.os.Bundle)
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_httpdemo_main);
mBtnRequest = (Button) this.findViewById(R.id.btn_request);
mResponseView = (TextView) this.findViewById(R.id.httpdemo_text);
mbtn_json = (Button) this.findViewById(R.id.btn_json);
mBtnRequest.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
WorkThread work = new WorkThread(HttpDemoActivity.this,
RequestUrl);
work.start();
}
}); mbtn_json.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) { JSonParser parser = new JSonParser();
parser.parser();
}
}); mMainHandler = new Handler() { /*
* (non-Javadoc)
*
* @see android.os.Handler#handleMessage(android.os.Message)
*/
@Override
public void handleMessage(Message msg) {
String str = (String) msg.obj;
Log.i(TAG, "get " + str);
mResponseView.setText(str);
} };
} /*
* (non-Javadoc)
*
* @see android.app.Activity#onStart()
*/
@Override
protected void onStart() {
super.onStart();
} /*
* (non-Javadoc)
*
* @see android.app.Activity#onStop()
*/
@Override
protected void onStop() {
super.onStop();
} /*
* (non-Javadoc)
*
* @see android.app.Activity#onDestroy()
*/
@Override
protected void onDestroy() {
super.onDestroy();
} private class WorkThread extends Thread { IResult mListener;
String address;
String message = "";
public WorkThread(IResult result, String address) {
mListener = result;
this.address = address;
} /*
* (non-Javadoc)
*
* @see java.lang.Thread#run()
*/
@Override
public void run() {
Log.i(TAG, "WorkThread start");
try {
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(address);
HttpResponse response = client.execute(request);
InputStreamReader inreader = new InputStreamReader(response
.getEntity().getContent());
BufferedReader reader = new BufferedReader(inreader);
String str = reader.readLine();
Log.i(TAG, "WorkThread start str:"+str);
while(str!=null)
{
message+= str;
str = reader.readLine();
} if(mListener!=null)
{
mListener.onResult(message);
} } catch (Exception ex) {
Log.i(TAG, "WorkThread ex:"+ex.getMessage());
}
} } @Override
public void onResult(String msg) {
Message message = new Message();
message.what = 1;
message.obj = msg;
mMainHandler.sendMessage(message);
}
}
package com.joyfulmath.android4example.http;
public interface IResult {
void onResult(String msg);
}
json格式解析:
package com.joyfulmath.android4example.http; import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONTokener; import android.util.Log; public class JSonParser {
private static final String JSON =
"{" +
" \"phone\" : [\"12345678\", \"87654321\"]," +
" \"name\" : \"yuanzhifei89\"," +
" \"age\" : 100," +
" \"address\" : { \"country\" : \"china\", \"province\" : \"jiangsu\" }," +
" \"married\" : false" +
"}";
private static final String TAG = "httpdemo.JSonParser"; public void parser()
{
Log.i(TAG, "[parser]");
try{
JSONTokener jsonparser = new JSONTokener(JSON);
JSONObject person = (JSONObject) jsonparser.nextValue();
JSONArray pbones = person.getJSONArray("phone");
Log.i(TAG, "[parser]pbones:"+pbones.getString(0)+" "+pbones.getString(1)); String name = person.getString("name");
Log.i(TAG, "[parser]name:"+name); }catch(Exception ex)
{
Log.i(TAG, "[parser]ex:"+ex.getMessage());
} }
}
xml解析:
三种:DOM,SAX,PULL
android 常用的xmlpullreader:
package com.joyfulmath.android4example.http; import java.io.IOException; import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException; import com.joyfulmath.android4example.R; import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.util.Log; public class XmlParser { private static final String TAG = "httpdemo.XmlParser"; // pull
/*xmlpullparser 不关心xml的结构属性,它就是开始,结束,属性,value。
*
* */
public void pullXml(Resources res) {
Log.i(TAG, "[pullXml]");
XmlResourceParser parser = res.getXml(R.layout.layout_httpdemo_main);// xmlpullparser
int eventType;
try {
eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_DOCUMENT) {
Log.i(TAG, "[pullXml] START_DOCUMENT");
} else if (eventType == XmlPullParser.START_TAG) {
Log.i(TAG, "[pullXml] START_TAG:" + parser.getName());
int count = parser.getAttributeCount();
Log.i(TAG, "[pullXml] \t count" + count );
for (int i = 0; i < count; i++) {
String noteName = parser.getAttributeName(i);
Log.i(TAG, "[pullXml] \t noteName:" + noteName + " at " + i);
if(noteName.equals("id")||noteName.equals("text"))
{
String value = parser.getAttributeValue(i);
Log.i(TAG, "[pullXml]\t noteValue:" + value + " at " + i);
}
}
} else if (eventType == XmlPullParser.END_TAG) {
Log.i(TAG, "[pullXml] END_TAG:" + parser.getName());
} else if (eventType == XmlPullParser.TEXT) {
Log.i(TAG, "[pullXml] TEXT:" + parser.getText());
} eventType = parser.next();
} Log.i(TAG, "[pullXml] END_DOCUMENT");
} catch (XmlPullParserException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}
Android四大组件之Service(续2)的更多相关文章
- Android四大组件之Service(续)
本地服务启动和通过广播的方式回调是非常简单的. 下面介绍远程服务和通过远程回调的方式通知activity的方式. 1.service定义: package com.joyfulmath.globals ...
- Android四大组件之Service
Android四大组件之Service Android支持服务的概念,服务是在后台运行的组件,没有用户界面,Android服务可用有与活动独立的生命周期.Android支持两种类型的服务: 本地服务: ...
- 【Android开发日记】之入门篇(五)——Android四大组件之Service
这几天忙着驾校考试,连电脑都碰不到了,今天总算告一段落了~~Service作为Android的服务组件,默默地在后台为整个程序服务,辅助应用与系统中的其他组件或系统服务进行沟通.它跟Activity的 ...
- Android成长日记-Android四大组件之Service组件的学习
1.什么是Service? Service是Android四大组件中与Activity最相似的组件,它们都代表可执行的程序,Service与Activity的区别在于:Service一直在后台运行,它 ...
- Android 四大组件之service与Broadcast
Android 四大组件之一:service: Service有五个生命周期:onCreat,onStartCommand, onBind,onUnbind, onDestroy 主要有绑定和非绑定两 ...
- Android四大组件之一Service介绍-android学习之旅(十二)
基本概念: service是android四大组件之一,运行在后台执行耗时操作,并不提供用户界面.其他组件如acticity可以通过startService启动该组件,也可以通过bindService ...
- Android四大组件之一 -- Service详解
相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的Android程序员如果连Service都没听说过的话,那确实也太逊了.Service作为Android四大组件之一,在每一个应用程序 ...
- Android四大组件:Service
前言 Service作为Android四大组件之一,应用非常广泛 本文将介绍对Service进行全面介绍(基础认识.生命周期.使用和应用场景) 目录 目录 1. 基础知识 定义:服务,属于Androi ...
- Android四大组件之Service浅见
Service 是Android四大组件之一,可以在不显示界面的情况下在后台运行.还有一个作用是通过AIDL来实现进程间通信. Service的启动方式 Service的启动方式有两种,startSe ...
随机推荐
- 20155336 2016-2017-2《JAVA程序设计》第一周学习总结
# 20155336 2016-2017-2<JAVA程序设计>第1周学习总结 ## 教材学习内容总结 开学的第一周,带着些许的欣喜和好奇,听完了老师的第一堂课.说心里话学习JAVA仿佛 ...
- css首行缩进2个字符
css设置: p{ text-indent:2em; }
- CF 987 D. Fair
D. Fair http://codeforces.com/contest/987/problem/D 题意: n个城镇m条道路,(保证没有重边,两个城镇间可以到达),每个城镇拥有的特产ai(可能多个 ...
- git clone的时候报error: RPC failed; result=18错误
因业务需求,需要把内网gitlab仓库的地址对外网访问,在gitlab前端配置了一个nginx代理服务器,来实现需求,可以在git clone的时候报error: RPC failed错误 [root ...
- 变态的iis10
IIS10发布网站不能使用.NET4.0需要重新注册在之前版本的系统中使用如下命令可以直接重新注册: 但是windowsServer2016(iis 10) 使用该命令 提示 版本不支持 C:\WIN ...
- bzoj1011 遥远的行星
bzoj1011 遥远的行星 原题链接 题解 一道真正的玄学题.... 其实这题根本没法做 首先暴力这么跑:\[ans(s)=\sum_{i=1}^{\lfloor As\rfloor}\frac{M ...
- 学习HTML 第三节.接近正题:HTML样式-CSS级联样式表
CSS (Cascading Style Sheets)级联样式表 内联样式 内联样式- 在HTML元素中使用"style" 属性 使用内联样式的方法是在相关的标签中使用样式属性. ...
- redis 批量删除操作
redis 批量删除操作 需要在redis里面清空一批数据,redis没有支持通配符删除, 只有del key1 key2 ... 但是可以通配符获取 KEYS PATTERN 然后利用linux管道 ...
- [python] Queue.Queue vs. collections.deque
https://stackoverflow.com/questions/717148/queue-queue-vs-collections-deque/717199#717199 Queue,Queu ...
- gevent协程、select IO多路复用、socketserver模块 改造多用户FTP程序例子
原多线程版FTP程序:http://www.cnblogs.com/linzetong/p/8290378.html 只需要在原来的代码基础上稍作修改: 一.gevent协程版本 1. 导入geven ...