ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Android网络实例:HTTP之利用HttpURLConnection访问百度、获取网络图片

2020-06-26 23:03:18  阅读:261  来源: 互联网

标签:HTTP Auto 网络 catch new Android null TODO conn


MianActivity.java

public class MainActivity extends AppCompatActivity {
Button visitWebBtn = null;
Button downImgBtn = null;
TextView showTextView = null;
ImageView showImageView = null;
String resultStr = “”;
ProgressBar progressBar = null;
ViewGroup viewGroup = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initUI();
visitWebBtn.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            showImageView.setVisibility(View.GONE);
            showTextView.setVisibility(View.VISIBLE);
            Thread visitBaiduThread = new Thread(new VisitWebRunnable());
            visitBaiduThread.start();
            try {
                visitBaiduThread.join();
                if(!resultStr.equals("")){
                    showTextView.setText(resultStr);
                }
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    });
    downImgBtn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            showImageView.setVisibility(View.VISIBLE);
            showTextView.setVisibility(View.GONE);
            String imgUrl = "https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=112912491,3646496790&fm=26&gp=0.jpg";
            new DownImgAsyncTask().execute(imgUrl);
        }
    });
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
   // getMenuInflater().inflate(R.menu.main, menu);
    return true;
}
public void initUI(){
    showTextView = (TextView)findViewById(R.id.textview_show);
    showImageView = (ImageView)findViewById(R.id.imagview_show);
    downImgBtn = (Button)findViewById(R.id.btn_download_img);
    visitWebBtn = (Button)findViewById(R.id.btn_visit_web);
}
/**
 * 获取指定URL的响应字符串
 * @param urlString
 * @return
 */
private String getURLResponse(String urlString){
    HttpURLConnection conn = null; //连接对象
    InputStream is = null;
    String resultData = "";
    try {
        URL url = new URL(urlString); //URL对象
        conn = (HttpURLConnection)url.openConnection(); //使用URL打开一个链接
        conn.setDoInput(true); //允许输入流,即允许下载
        conn.setDoOutput(true); //允许输出流,即允许上传
        conn.setUseCaches(false); //不使用缓冲
        conn.setRequestMethod("GET"); //使用get请求
        is = conn.getInputStream();   //获取输入流,此时才真正建立链接
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader bufferReader = new BufferedReader(isr);
        String inputLine  = "";
        while((inputLine = bufferReader.readLine()) != null){
            resultData += inputLine + "\n";
        }

    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }finally{
        if(is != null){
            try {
                is.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if(conn != null){
            conn.disconnect();
        }
    }

    return resultData;
}

/**
 * 从指定URL获取图片
 * @param url
 * @return
 */
private Bitmap getImageBitmap(String url){
    URL imgUrl = null;
    Bitmap bitmap = null;
    try {
        imgUrl = new URL(url);
        HttpURLConnection conn = (HttpURLConnection)imgUrl.openConnection();
        conn.setDoInput(true);
        conn.connect();
        InputStream is = conn.getInputStream();
        bitmap = BitmapFactory.decodeStream(is);
        is.close();
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }catch(IOException e){
        e.printStackTrace();
    }
    return bitmap;
}
class VisitWebRunnable implements Runnable{

    @Override
    public void run() {
        // TODO Auto-generated method stub
        String data = getURLResponse("http://www.baidu.com/");
        resultStr = data;
    }

}
class DownImgAsyncTask extends AsyncTask<String, Void, Bitmap> {


    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();
        showImageView.setImageBitmap(null);
        showProgressBar();//显示进度条提示框

    }

    @Override
    protected Bitmap doInBackground(String... params) {
        // TODO Auto-generated method stub
        Bitmap b = getImageBitmap(params[0]);
        return b;
    }

    @Override
    protected void onPostExecute(Bitmap result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
        if(result!=null){
            dismissProgressBar();
            showImageView.setImageBitmap(result);
        }
    }



}
/**
 * 在母布局中间显示进度条
 */
private void showProgressBar(){
    progressBar = new ProgressBar(this, null, android.R.attr.progressBarStyleLarge);
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT);
    params.addRule(RelativeLayout.CENTER_IN_PARENT,  RelativeLayout.TRUE);
    progressBar.setVisibility(View.VISIBLE);
    Context context = getApplicationContext();
    viewGroup = (ViewGroup)findViewById(R.id.parent_view);
    //		MainActivity.this.addContentView(progressBar, params);
    viewGroup.addView(progressBar, params);
}
/**
 * 隐藏进度条
 */
private void dismissProgressBar(){
    if(progressBar != null){
        progressBar.setVisibility(View.GONE);
        viewGroup.removeView(progressBar);
        progressBar = null;
    }
}

}

activity_main.xml

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <TextView
            android:id="@+id/textview_show"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="hello_world" />

        <ImageView
            android:id="@+id/imagview_show"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center" />
    </FrameLayout>

    <Button
        android:id="@+id/btn_visit_web"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:text="访问百度" />
    <Button
        android:id="@+id/btn_download_img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_toRightOf="@id/btn_visit_web"
        android:text="下载图片"/>

</RelativeLayout>

标签:HTTP,Auto,网络,catch,new,Android,null,TODO,conn
来源: https://blog.csdn.net/sfz1234567890/article/details/106959114

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有