日期:2014-05-16  浏览次数:20429 次

【Android】Handler的应用(二):从服务器端加载JSON数据的优化

在上一篇博客http://blog.csdn.net/jueblog/article/details/12530751中,我们了解了Handler从服务器中加载JSON数据的过程。

为了实现代码的复用和进一步理解Handler的相关知识,我们对代码进行如下优化。

Activity文件

HanderTest_Text_New.java
package com.app.myhandler;

import android.app.Activity;
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;

import com.app.util.MyThread;

public class HanderTest_Text_New extends Activity {
	private Button button1, button2;
	private TextView textView1, textView2;
	private Handler handler;
	private ProgressBar progressBar;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_hander_text_new);

		button1 = (Button) findViewById(R.id.button1);
		button2 = (Button) findViewById(R.id.button2);
		textView1 = (TextView) findViewById(R.id.textView1);
		textView2 = (TextView) findViewById(R.id.textView2);
		progressBar = (ProgressBar) findViewById(R.id.progressBar1);

		button1.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				progressBar.setVisibility(View.VISIBLE);
				new MyThread(handler,"http://10.0.2.2:8888/android/1.jsp",1).start();
			}
		});
		button2.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				progressBar.setVisibility(View.VISIBLE);
				new MyThread(handler,"http://10.0.2.2:8888/android/2.jsp",2).start();
			}
		});
		handler = new Handler(){
			@Override
			public void handleMessage(Message msg) {
				// TODO Auto-generated method stub
				super.handleMessage(msg);
				switch (msg.what) {
				case 1:
					textView1.setText(msg.obj.toString());
					textView2.setText("文本二");
					progressBar.setVisibility(View.GONE);
					break;
				case 2:
					textView1.setText("文本一");
					textView2.setText(msg.obj.toString());
					progressBar.setVisibility(View.GONE);
					break;
				default:
					break;
				}
			}
		};
	}

}

MyThread文件

package com.app.util;

import java.util.Map;

import android.os.Handler;
import android.os.Message;


public class MyThread extends Thread{
	private Handler handler;
	private String url;
	private int what;
	
	public MyThread(Handler handler, String url, int what) {
		this.handler = handler;
		this.url = url;
		this.what = what;
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
		String result = ApplicationDemo.handleGet(url);
		Message message = handler.obtainMessage();
		message.what = what;
		message.obj = result;
		//向handler发送消息
		handler.sendMessage(message);
	}
}

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" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
	        
	    <Button
	        android:id="@+id/button1"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:layout_weight="1"
	        android:text="加载一" />
	
	    <Button
	        android:id="@+id/button2"
	        android:layout_width="wrap_content"
	        android:layout_h