【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_height="wrap_content" android:layout_weight="1" android:text="加载二" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="文本一" android:textColor="#E7473E"/> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="文本二" android:textColor="#4DB849"/> </LinearLayout> <ProgressBar android:id="@+id/progressBar1" style="?android:attr/progressBarStyleLarge" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:visibility="gone"/> </LinearLayout>
效果图
加载一
加载二