请教一个android ,handle的问题,下面的代码运行有问题package com.neusoft.xmlresource;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;import android.app.Activity;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.widget.ImageView;public class MainActivity extends Activity { ImageView mImageView = null;
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet();
InputStream in = null;
FileOutputStream out = null;
try {
request.setURI(new URI("http://192.168.1.180/images/1.png"));
HttpResponse response = client.execute(request);
out = new FileOutputStream("/mnt/sdcard/1.png");
in = response.getEntity().getContent();
byte[] buffer=new byte[1024];
for(int len=0;(len=in.read(buffer))!=-1;){
out.write(buffer,0,len);
}
} catch (URISyntaxException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
out.flush();
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mImageView = (ImageView)findViewById(R.id.imageView);
handler.sendEmptyMessage(1);
/*
new Thread(new Runnable(){
@Override
public void run(){
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet();
InputStream in = null;
FileOutputStream out = null;
try {
request.setURI(new URI("http://192.168.1.180/images/1.png"));
HttpResponse response = client.execute(request);
out = new FileOutputStream("/mnt/sdcard/1.png");
in = response.getEntity().getContent();
byte[] buffer=new byte[1024];
for(int len=0;(len=in.read(buffer))!=-1;){
out.write(buffer,0,len);
}
} catch (URISyntaxException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
out.flush();
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}).start();*/
mImageView.setImageURI(Uri.fromFile(new File("/mnt/sdcard/1.png")));
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
什么原因呢?
如果不用handler,改用下面的执行,则没有问题。 new Thread(new Runnable(){
@Override
public void run(){
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet();
InputStream in = null;
FileOutputStream out = null;
try {
request.setURI(new URI("http://192.168.1.180/images/1.png"));
HttpResponse response = client.execute(request);
out = new FileOutputStream("/mnt/sdcard/1.png");
in = response.getEntity().getContent();
byte[] buffer=new byte[1024];
for(int len=0;(len=in.read(buffer))!=-1;){
out.write(buffer,0,len);
}
} catch (URISyntaxException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
out.flush();
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}).start();
这是什么原因,诸位老师给分析一下。android 多线程
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;import android.app.Activity;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.widget.ImageView;public class MainActivity extends Activity { ImageView mImageView = null;
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet();
InputStream in = null;
FileOutputStream out = null;
try {
request.setURI(new URI("http://192.168.1.180/images/1.png"));
HttpResponse response = client.execute(request);
out = new FileOutputStream("/mnt/sdcard/1.png");
in = response.getEntity().getContent();
byte[] buffer=new byte[1024];
for(int len=0;(len=in.read(buffer))!=-1;){
out.write(buffer,0,len);
}
} catch (URISyntaxException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
out.flush();
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mImageView = (ImageView)findViewById(R.id.imageView);
handler.sendEmptyMessage(1);
/*
new Thread(new Runnable(){
@Override
public void run(){
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet();
InputStream in = null;
FileOutputStream out = null;
try {
request.setURI(new URI("http://192.168.1.180/images/1.png"));
HttpResponse response = client.execute(request);
out = new FileOutputStream("/mnt/sdcard/1.png");
in = response.getEntity().getContent();
byte[] buffer=new byte[1024];
for(int len=0;(len=in.read(buffer))!=-1;){
out.write(buffer,0,len);
}
} catch (URISyntaxException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
out.flush();
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}).start();*/
mImageView.setImageURI(Uri.fromFile(new File("/mnt/sdcard/1.png")));
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
什么原因呢?
如果不用handler,改用下面的执行,则没有问题。 new Thread(new Runnable(){
@Override
public void run(){
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet();
InputStream in = null;
FileOutputStream out = null;
try {
request.setURI(new URI("http://192.168.1.180/images/1.png"));
HttpResponse response = client.execute(request);
out = new FileOutputStream("/mnt/sdcard/1.png");
in = response.getEntity().getContent();
byte[] buffer=new byte[1024];
for(int len=0;(len=in.read(buffer))!=-1;){
out.write(buffer,0,len);
}
} catch (URISyntaxException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
out.flush();
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}).start();
这是什么原因,诸位老师给分析一下。android 多线程
解决方案 »
- android短信会话显示问题
- 前提是ListView的数据比较多:用CheckBox来标记ListView的item,怎么控制CheckBox的显示和隐藏呢?
- android 同时把彩信和短信一起显示在列表里 就和系统自带的短信列表一样
- 求教:架设repo+git本地服务器管理android代码
- 用simplecursorAdapter实现播放列表当前正在播放
- android 游戏开发中surfaceview画的图片是怎么释放的?在什么时候释放?
- 请问,这哥们在这个 Android 视频中是用什么画图的?
- 在EditText的监听事件中,before,after,on这三个有什么区别?
- html5怎么开发android啊,用什么工具
- 在华为手机上获取通讯录联系人为什么会出现要GLOBAL_SEARCH权限?
- 这个问题,搞定的了吗?
- 现在哪个2d游戏框架/引擎好用?
其中又带有网络连接这种耗时操作正确的做法就是在oncreate中启动线程去获取图片,成功后发送message,在handler中给imageview设置图片