您的位置:首页 > 其它

使用URLConnection 来get和post数据获取返回的数据

2014-01-10 21:31 399 查看
一定要加上对Sd卡读写文件的权限声明,以及访问网络的权限

   <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>


get /post 工具

package com.act262.whpj.utils;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.Date;

import android.os.Environment;
import android.util.PrintStreamPrinter;

/**
* 用于get或者post数据
*/
public class GetPostUtil {
public static final String TAG = "GetPostUtil Debug";

/**
* @param url
*            传入的url,包括了查询参数
* @return 返回get后的数据
*/
public static String sendGet(String url) {
String result = "";
// String
URL realURL = null;
URLConnection conn = null;
BufferedReader bufReader = null;
String line = "";
try {
realURL = new URL(url);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("url 格式错误");
}

try {
conn = realURL.openConnection();
// 设置连接参数...conn.setRequestProperty("xx", "xx");

conn.setConnectTimeout(10000); // 10s timeout
// conn.setRequestProperty("accept", "*/*");
// conn.setRequestProperty("", "");

conn.connect(); // 连接就把参数送出去了 get方法

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("连接错误");
}

try {
bufReader = new BufferedReader(new InputStreamReader(
conn.getInputStream(), "gb2312"));

while ((line = bufReader.readLine()) != null) {
result += line + "\n";
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("读取数据错误");
} finally {
// 释放资源
if (bufReader != null) {
try {
bufReader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

return result;
}

/**
* @param url
* @param param
*            查询参数 ,形式如 name=xx&age=xx&sex=xx
* @return
*/
public static String sendGet(String url, String param) {
return sendGet(url + "?" + param);
}

/**
* @param url
*            指定的url,不包括查询参数
* @param param
*            查询参数 形式如 name=xx&age=xx&sex=xx
* @return 返回post后的数据
*/
public static String sendPost(String url, String param) {
String result = "";
URL realURL = null;
BufferedReader bufReader = null;
// PrintWriter printWriter = null;
PrintStreamPrinter out = null;
URLConnection connection = null;
String line = "";
try {
realURL = new URL(url);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
connection = realURL.openConnection();
// 设置为可输入输出 post的模式,而且在输出之前不能获取输入的数据,否则报错
connection.setDoOutput(true);
connection.setDoOutput(true);

// 已经连接了,所以不能再用connect(),否则报错的

out = new PrintStreamPrinter(new PrintStream(
connection.getOutputStream()));
out.println(param);
//
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

try {
bufReader = new BufferedReader(new InputStreamReader(
connection.getInputStream(), "gb2312"));
while ((line = bufReader.readLine()) != null) {
result += line + "\n";
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
// 释放资源
try {
if (bufReader != null) {
bufReader.close();
}
if (out != null) {
//
}
} catch (IOException e2) {
// TODO: handle exception
}

}
return result;
}

public static void saveFile(String content) {

File file = new File(Environment.getExternalStorageDirectory()
.getAbsolutePath(), "file.html");
if (!file.exists()) {
try {
boolean status = file.createNewFile();

System.out.println("is create new file :" + status);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
PrintWriter pw = null;
try {
FileWriter fw = new FileWriter(file);
// pw = new PrintWriter(new Date() + ".html");
// pw.println(content);

fw.write(content);
fw.flush();

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
if (pw != null) {
pw.close();
}
}
}

}


测试类

package com.act262.whpj.ui;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

import com.act262.whpj.R;
import com.act262.whpj.utils.GetPostUtil;

public class StartActivity extends Activity {

Button get, post;
TextView showTextView;
Handler handler;
String result = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start);
get = (Button) findViewById(R.id.get);
post = (Button) findViewById(R.id.post);
showTextView = (TextView) findViewById(R.id.show);
handler = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == 0x123) {
showTextView.setText(result);
}
}
};
post.setOnClickListener(new ButtonListener());
get.setOnClickListener(new ButtonListener());
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.start, menu);
return true;
}

class ButtonListener implements OnClickListener {

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.get:

new Thread() {

public void run() {
result = GetPostUtil
.sendGet("http://www.baidu.com");
handler.sendEmptyMessage(0x123);// 通知UI线程更新界面
// Log.d(GetPostUtil.TAG, result);
System.out.println(result);
GetPostUtil.saveFile(result);
}
}.start();
showTextView.setText(result);
break;
case R.id.post:
new Thread() {
public void run() {
result = GetPostUtil
.sendPost(
"http://www.baidu.com",
"null");
handler.sendEmptyMessage(0x123);// 通知UI线程更新界面
Log.d(GetPostUtil.TAG, result);
}
}.start();
showTextView.setText(result);
break;
default:
break;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: