阅读背景:

android之网络请求框架、原生http请求

来源:互联网 

===============原生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



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: