Android Studio ——Android中初始的网络请求

使用HttpURLConnection从网络获取数据

  • 从网络获取数据的过程为:HttpURLConnection与网络建立连接->InputStream获取输入流(二进制)->InputStreamReader加工包装注入BufferedReader数据”蓄水池“->从蓄水池读取String字符串->StringBulider将字符串拼接->字符串输出到客户端
  • 网络请求需要权限,因此需要在Manifest里面添加这行语句<user-permission android:name="android.permission.INTTERNET"/>
  • 可以建立一个Package来放置这个网络请求的方法,然后再创建一个类将其命名为NetUtil
public class NetUtil{
	
	public static String doGet(){ 
		BufferedReader reader = null;
		String bookHSONString = null;
		try{
			//1.HttpURLConnection建立连接
			HttpURLConnection httpURLConnection = null;
			String url="https://www.baidu.com";
			URL requestUrl = new URL(url);
			httpURLConnection = (HttpURLConnection)requestUrl.openconnection();//打开连接
			httpURLConnection.setRequestMethod("GET");//两种方法GET/POST
			httpURLConnection.setConnectionTimeout(5000);//设置超时连接时间
			httpURLConnection.connect();
			
			//2.InputStream获取二进制流
			InputStream inputstream = httpURLConnection.getInputStream();
			
			//3.InputStreamReader将二进制流进行包装成BufferedReader
			reader = new BufferedReader(new InputStreamReader(inputStream));
		
			//4.从BufferedReader中读取String字符串,用StringBulider接收
			StringBulider bulider = new StringBulider();
			String line;
			while((line=reader.readLine())!=null){
				bulider.append(line);
				bulider.append("\n");
				}
			
			if(bulider.length()==0)
			{
				return null;
			}
			
			//5.StringBulider将字符串进行拼接
			bookJSONString = bulider.toString();
			
			}catch(MalformedURLException e){
			e.printStackTrace();
			}
		return bookJSONString;
		}
}

MainActivity.java程序将上一篇文章所写的假装从网络上获取字符串,改为真正从网络上获取字符串

public class MainActivity extends AppCompatActivity{
	private TextView tvContent;
	
	//此处写一个handler程序
	private Handler mHandler = new Handler(Looper.myLooper()){
		@Override
		public void handleMessage(@NonNull Message msg){
		super.handlerMessage(msg);

		if(msg.what==0){
			String strData = (String)msg.obj;
			tvContent.setText(strData);
			Toast.makeText(MainActivity.this,"主线程收到网络消息了!",Toast.LENGTH_SHORT).show();
			}
		}
	};
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tvContent = findViewById(R.id.tv_content);
    }
    
    public void start(View view){
    	//做一个耗时任务
    	new Thread(new Runnable(){
    		@Override
    		public void run(){
    			String stringFormNet = getStringFormNet();
    			
    			//使用handler来发送消息
				Message message = new Message();
				message.what = 0;//用于区分是谁发的消息
    			message.obj = stringFormNet;
    			mHandler.sendMessage(meaasge);
    			
    			}
    		}).start();
    		Toast.makeText(MainActivity.this,"开启子线程请求网络!",Toast.LENGTH_SHORT).show();
    		}
    		
    private String getStringFormNet(){
		//从网络上获取字符串
		return NetUtil.doGet();
	}
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值