在子线程中操作Ui的几种小方法
2016-11-18 20:30
232 查看
在MainActivity中的子线程不能操作UI 所以我总结几种比较简单实用的方法来实现在子线程中对Ui进行修改的方法方法:1.handler的使用2.imgeView.post()或者textView.post()方法3.MainActivity.this.runOnUiThread()方法废话不多说,看代码:package demo.liuchen.com.okhttp;import android.graphics.BitmapFactory;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.ImageView;import android.widget.TextView;import org.w3c.dom.Text;import java.io.IOException;import okhttp3.Call;import okhttp3.Callback;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;public class MainActivity extends AppCompatActivity {private TextView text;private ImageView image;private String url = "http://bz.budejie.com/?typeid=2&ver=3.4.3&no_cry=1&client=android&c=search&a=hot&location=1";private String imgurl = "http://t2.27270.com/uploads/tu/201606/32/k5xnewfzvz0.jpg";private Handler handler = new Handler(){@Overridepublic void handleMessage(Message msg) {String Ibody = (String) msg.obj;text.setText(Ibody);}};private Handler handler1 = new Handler(){@Overridepublic void handleMessage(Message msg) {byte [] data = (byte[]) msg.obj;image.setImageBitmap(BitmapFactory.decodeByteArray(data,0,data.length));}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);text = (TextView) findViewById(R.id.tv);image = (ImageView) findViewById(R.id.imageview);}public void downLoadText(View view) {OkHttpClient okHttpClient = new OkHttpClient();Request request = new Request.Builder().url(url).build();Call call = okHttpClient.newCall(request);call.enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {Log.e("TAG","onFailure"+e.getMessage().toString());}4000@Overridepublic void onResponse(Call call, Response response) throws IOException {//注意 此处response只能获取一次,第二次获取会为nullfinal String body = response.body().string();//在子线程操作UI两种都可以//handler也可以// text.post(new Runnable() {// @Override// public void run() {// text.setText(body);// }// });// MainActivity.this.runOnUiThread(new Runnable() {// @Override// public void run() {// text.setText(body);// }// });Message msg = new Message();msg.obj= body;handler.sendMessage(msg);}});}public void downLoadImage(View view) {OkHttpClient okHttpClient = new OkHttpClient();Request request = new Request.Builder().url(imgurl).build();Call call = okHttpClient.newCall(request);call.enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {Log.e("TAG","onFailure"+e.getMessage().toString());}@Overridepublic void onResponse(Call call, Response response) throws IOException {// byte[] data= new byte[1024];// data = response.body().bytes();final byte[] data = response.body().bytes();// image.post(new Runnable() {// @Override// public void run() {// image.setImageBitmap(BitmapFactory.decodeByteArray(data,0,data.length));// }// });// MainActivity.this.runOnUiThread(new Runnable() {// @Override// public void run() {// image.setImageBitmap(BitmapFactory.decodeByteArray(data,0,data.length));// }// });Message msg1 = new Message();msg1.obj = data;handler1.sendMessage(msg1);}});}}
相关文章推荐
- Android开发之子线程操作UI的几种方法
- 4种在线程中操作UI的方法
- wpf调用外部线程操作ui方法
- 子线程更新UI的几种方法
- 浅谈Android中使用异步线程更新UI视图的几种方法
- Silverlight中 非UI线程更新UI 的几种方法
- !!c# 委托与多线程 -- 相比background来说,本方法针对当需要通过异步代理发起UI操作,而后线程中进行sleep操作的时使用
- android中在子线程中更新UI的几种方法
- 关于子线程里不能更新UI操作的解决方法
- winform线程间操作UI的五种方法
- Android中使用异步线程更新UI视图的几种方法
- android 访问网络不能在主线程中进行以及在线程中操作UI的解决方法
- Android几种在其他线程中更新UI的方法
- Android非UI线程更新UI的几种方法
- 308_子线程操作UI方法
- android中子线程更新UI的几种方法
- android4.0以上访问网络不能在主线程中进行以及在线程中操作UI的解决方法
- Android非UI线程更新UI的几种方法
- Silverlight端费时操作不阻塞UI线程处理方法
- 子线程更新UI的几种方法