URLConnection的post请求网络数据和AsyncTask异步线程

来源:互联网 发布:数据漫游是什么意思 编辑:程序博客网 时间:2024/06/05 00:33

一、ManiActivity

package com.example.urlconnection1;import com.example.thread.MyAsyncTask;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.widget.ListView;/** * 用URLConnection的post请求网络数据 * */public class MainActivity extends Activity {//定义成员变量private ListView lv;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);                //找对象        lv=(ListView) super.findViewById(R.id.lv);                MyAsyncTask at=new MyAsyncTask(MainActivity.this,lv);//创传值        at.execute("http://japi.juhe.cn/book/recommend.from");//开启线程,给doInBackground()方法传值    }    @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;    }    }


二、异步线程

package com.example.thread;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.io.PrintWriter;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import android.content.Context;import android.os.AsyncTask;import android.util.Log;import android.widget.ArrayAdapter;import android.widget.ListView;import com.example.model.One;import com.google.gson.Gson;//创建一个类,继承AsyncTask,异步线程public class MyAsyncTask extends AsyncTask<String, String, One>{//定义成员变量private Context context;private ListView lv;public MyAsyncTask(Context context, ListView lv) {super();this.context = context;this.lv = lv;}@Overrideprotected One doInBackground(String... params) {try {URL url=new URL(params[0]);//获取传来的URLHttpURLConnection conn=(HttpURLConnection) url.openConnection();//获取HttpURLConnection对象conn.setRequestMethod("POST");//设置发送请求的方法是postconn.setDoOutput(true);//设置允许输出(post时必须设置,get是不用设置)conn.setConnectTimeout(5000);//设置连接超时的时间限制conn.setReadTimeout(5000);//设置读取时间限制conn.setRequestProperty("Charset", "UTF-8");//设置文字字符集conn.setRequestProperty("Connection", "Keep-Alive");//设置维持长连接OutputStream os=conn.getOutputStream();//获取URLConnetction对应的输出流,用于向URLConnetction发送请求参数PrintWriter pw=new PrintWriter(os);//创建文本输出流pw.print("key=188945f8e9072f0b5300f5573bac1aca&cat=1&ranks=1");//发送请求的参数pw.flush();pw.close();if(conn.getResponseCode()==200)//对响应码进行判断,是否连接成功{InputStream is=conn.getInputStream();//获取URLConnetction对应的输出流,用于获取URLConnection响应的内容byte[] bt=new byte[1024];StringBuffer sb=new StringBuffer();int readLine=0;while(-1 != (readLine=is.read(bt))){sb.append(new String(bt, 0, readLine)); ////先把字节转换成字符,再拼接成字符串     参数:1.byte数组 2.开始转换字节的下标 3.字节数组的长度 }Gson g=new Gson();One one=g.fromJson(sb.toString(), One.class);//解析JSON数据Log.e("TAG", "解析的数据是:"+one.toString()+one.result.data.toString());return one;}else{throw new RuntimeException("请求url失败");}} catch (MalformedURLException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}//在这个方法共改变界面@Overrideprotected void onPostExecute(One result) {super.onPostExecute(result);ArrayAdapter adapter=new ArrayAdapter(context, android.R.layout.simple_list_item_1, result.result.data);lv.setAdapter(adapter);}@Overrideprotected void onPreExecute() {// TODO Auto-generated method stubsuper.onPreExecute();}@Overrideprotected void onProgressUpdate(String... values) {// TODO Auto-generated method stubsuper.onProgressUpdate(values);}}



0 0
原创粉丝点击