===============原生http=====================
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private EditText et;
private String thtmlStr;
private TextView tv;
private ImageView imav;
protected final int REQUESTSUCCESS=0;//常量
protected final int REQUESTFAILure=1;
// 在主线程定义一个Handler,用来法消息和处理消息,Looper的作用是监听消息队列,去消息队列取消息;程序一启动就会创建一个主线程,同时就有了一个Looper循环
// @SuppressLint("HandlerLeak")
// private Handler handler = new Handler(){
// //实现handler的方法,这个方法在主线程执行
// public void handleMessage (Message msg){
//
// Log.e("main","main");
//if(msg.what==0) {
//// tv.setText((String) msg.obj);//只有主线程才能更新UI,网络请求必须在在子线程
// imav.setImageBitmap((Bitmap)msg.obj);
//}else if(msg.what==1){
// Toast.makeText(getApplicationContext(),"服务器正忙",Toast.LENGTH_LONG).show();
//}else{
// imav.setImageBitmap((Bitmap)msg.obj);
//}
//
// }
// };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button surebtn = (Button) findViewById(R.id.sureBtn);
surebtn.setOnClickListener(this);//按钮的点击事件
Log.e("s","11");
et = findViewById(R.id.urlText);
tv=findViewById(R.id.showtext);
imav=findViewById(R.id.look);
}
//网路请求要加权限
@Override
public void onClick(View view) {
Log.e("v","fff");
new Thread(new Runnable()
{
public void run () {
try {
//获取缓存的图片
String path = et.getText().toString().trim();
File file = new File(getCacheDir(), Base64.encodeToString(path.getBytes(),Base64.DEFAULT));
if (file.exists() && file.length() > 0) {
Log.e("f","使用缓存");
Bitmap cacheMap = BitmapFactory.decodeFile(file.getAbsolutePath());
// Message msg = Message.obtain();
// msg.obj = cacheMap;
// handler.sendMessage(msg);
} else {
HttpURLConnection conn = (HttpURLConnection) url.openConnection();//http连接
//post方式***********************
conn.setRequestMethod("POST");
conn.setReadTimeout(5000);
conn.setRequestProperty("ext/plain, text/html","application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length",path.length()+"");
conn.setDoOutput(true);//标记,允许输出
conn.getOutputStream().write(path.getBytes());//以流的形式吧数据写给服务器
//get方式****************************
URL url = new URL(path);//创建url
conn.setRequestMethod("GET");//必须大写,默认是GET
conn.setConnectTimeout(15000);//设置超时时间
int code = conn.getResponseCode();//获取状态码
if (code == 200) {//请求成功
InputStream in = conn.getInputStream();//获取服务器返回的数据。流的处理抽取成一个工具类Utils
// thtmlStr = StreamTools.reamStream(in);
// Message msg = new Message();
// msg.what=REQUESTSUCCESS;
// msg.obj = thtmlStr;
// Log.e("msg", (String) msg.obj);
// handler.sendMessage(msg);//发送消息,在主线程handler中接收
//****************缓存图片************
FileOutputStream fos = new FileOutputStream(file);
int len = -1;
byte[] buffer = new byte[1024];
while ((len = in.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
fos.close();
in.close();
//**************handler发消息更新UI**************************
// Message msg = Message.obtain();
// msg.what = REQUESTSUCCESS;
// Bitmap bm = BitmapFactory.decodeStream(in);//吧流转换成位图;,如果in没有关闭流使用这个方法
final Bitmap bm = BitmapFactory.decodeFile(file.getAbsolutePath());
// msg.obj = bm;
// handler.sendMessage(msg);
//***************runOnUiThread更新UI****************如果只是更新ui,则使用runOnUiThread,如果要携带数据,就用handler;
runOnUiThread(new Runnable() {
@Override
public void run() {
//不管在主线程还是子线程都会执行
imav.setImageBitmap(bm);
}
});
} else {
// Message msg = new Message();
// msg.what = REQUESTFAILure;
// handler.sendMessage(msg);//发送消息,在主线程handler中接收
}
}
} catch(MalformedURLException e){
e.printStackTrace();
} catch(IOException e){
e.printStackTrace();
}
}}) .start();
}
}
pu