public static String getXMLString(String url) {
HttpClient hc = new DefaultHttpClient();
HttpConnectionParams.setConnectionTimeout(hc.getParams(), 4000);
// HttpConnectionParams.setSoTimeout(hc.getParams(), 4000);
HttpGet request = new HttpGet(url);
HttpResponse response;
try {
response = hc.execute(request);
HttpEntity entity = response.getEntity();
if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
return EntityUtils.toString(entity,HTTP.UTF_8);
} else {
return null;
}
} catch (ClientProtocolException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
public JSONObject RequestUrl(String url) {
JSONObject jsonResponse = null;
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
Log.v("URL request", "--->" + url);
URI uri = new URI(url);
HttpGet httpget = new HttpGet(uri);
httpget.setHeader("Accept", "application/json");
httpget.setHeader("Content-type", "application/json; charset=utf-8");
HttpResponse response = httpClient.execute(httpget);
HttpEntity responseEntity = response.getEntity();
String changeTIDRec = EntityUtils.toString(responseEntity);
System.out.println(changeTIDRec);
jsonResponse = new JSONObject(changeTIDRec);
Log.v("WebService", "Response : " + jsonResponse);
} catch (Exception e) {
e.printStackTrace();
}
return jsonResponse;
}}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new AsyncTask<Void,Void,Void>() { @Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
JSONObject jObject = getJSONfromURL("http://mascwt.oicp.net:7080/Monitoring/Data/getOrgData/");
return null;
}
}.execute();
}
public JSONObject getJSONfromURL(String url) {// 初始化
InputStream is = null;
String result = "";
JSONObject jArray = null;// http post
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();} catch (Exception e) {
Log.e("log_tag", "Error in http connection " + e.toString());
}// 转换response到string
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result = sb.toString();
} catch (Exception e) {
Log.e("log_tag", "Error converting result " + e.toString());
}// 解析string到JSON对象
try {
jArray = new JSONObject(result);
} catch (JSONException e) {
Log.e("log_tag", "Error parsing data " + e.toString());
}return jArray;
//...
public WebClient() {
Log.v(TAG, "初始化");
timeout = 5 * 1000;
bufferSize = 8192;
encode = "UTF-8";
httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams, timeout);
HttpConnectionParams.setSoTimeout(httpParams, timeout);
HttpConnectionParams.setSocketBufferSize(httpParams, bufferSize);
HttpClientParams.setRedirecting(httpParams, true);
httpClient = new DefaultHttpClient(httpParams);
} public String doGet(String url) throws Exception {
return doGet(url, null);
} public String doGet(String url, Map<String, String> params)
throws Exception {
// 添加QueryString
String paramStr = "";
if (params != null) {
Iterator<Entry<String, String>> iter = params.entrySet().iterator();
while (iter.hasNext()) {
Entry<String, String> entry = (Entry<String, String>) iter
.next();
paramStr += "&" + entry.getKey() + "="
+ URLEncoder.encode(entry.getValue(), encode);
}
if (paramStr.length() > 0)
paramStr.replaceFirst("&", "?");
url += paramStr;
}
// 创建HttpGet对象
HttpGet get = new HttpGet(url);
Log.i("doGet " + "URL ", url);
try {
String strResp = "";
// 发起请求
HttpResponse resp = httpClient.execute(get);
if (resp.getStatusLine().getStatusCode() == HttpURLConnection.HTTP_OK)
strResp = EntityUtils.toString(resp.getEntity());
else
// 如果返回的StatusCode不是OK则抛异常
throw new Exception("Error Response:"
+ resp.getStatusLine().toString());
Log.i("doGet Response ", strResp);
return strResp;
} finally {
get.abort();
}
}
//...
}
第二层, Servicespublic class MyServices extends Service {
private static final String TAG = "MyServices"; private WebClient client; @Override
public void onCreate() {
Log.v(TAG, "onCreate");
this.client = new WebClient();
} @Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
Log.v(TAG, "onBind");
return null;
} @Override
public void onStart(Intent intent, int startId) {
Log.v(TAG, "onStart"); if (intent != null) {
final Bundle bundle = intent.getExtras();
if (bundle != null) { int flag = bundle.getInt("flag");
switch (flag) {
case 999:{
new Thread() {
@Override
public void run() {
Log.v(TAG + "onStart", "mascwt");
mascwt();
}
}.start();
break;
}
default:
Log.w(TAG + "onStart", "为匹配的case");
} }
} } @Override
public void onDestroy() {
super.onDestroy();
Log.v(TAG, "onDestroy");
} public void mascwt(){
String str = "";
try {
str = client.doGet("http://mascwt.oicp.net:7080/Monitoring/Data/getOrgData/");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Intent broadIntent = new Intent();
broadIntent.setAction("com.ytu.enetmobile.servicesBroadcast");
Bundle bundle = new Bundle();
bundle.putString("mascwt", str);
bundle.putInt("flag", 999);
broadIntent.putExtras(bundle);
sendBroadcast(broadIntent);
}
}第三层, UIpublic class ConnectionTestActivity extends Activity {
//...
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_connectiontest); tv_1 = (TextView) this.findViewById(R.id.tv_1); receiver = new DataReceiver();
} @Override
public void onStart() {
super.onStart();
if (null == receiver) {
receiver = new DataReceiver();
}
IntentFilter filter = new IntentFilter();// 创建IntentFilter对象
filter.addAction("com.ytu.enetmobile.servicesBroadcast");
this.registerReceiver(receiver, filter);
} public void onClick(View view) {
switch (view.getId()) {
case R.id.button2: {
Intent intent = new Intent(
"com.ytu.enetmobile.services.enetservices");
Bundle bundle = new Bundle();
bundle.putInt("flag", 999);
intent.putExtras(bundle); startService(intent);
break;
}
} } class DataReceiver extends BroadcastReceiver {
public static final String TAG = "DataReceiver"; @Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
switch (bundle.getInt("flag")) {
case 999: {
String str = intent.getStringExtra("mascwt");
tv_1.setText(str);
break;
}
default:
Log.v(TAG + "onReceive", "未匹配的case");
break; }
}
}
}
运行结果测试结果:
真机测试OK.
有乱码, 推测为编码问题.
之前服务器端用的这个编码,因为我手机上运行时经常要请求7-8次才能成功,所以我才在这贴这个帖子。
后来和服务器那边的交流了一下,估计是服务器那边的配置问题。
其实大家的请求过程我都明白,我也能请求成功,编码也没问题,也能解析出来,就是想问问为什么会时常出现
SocketException:Connection reset by peer.
这个问题再我另外一个帖子上贴出来了,其中有我请求数据的源码。和大家一样的。
其实我的疑问是客户端和服务器HTTP头参数配置。模拟器数据能请求成功,证明上层代码都是对的。因为我的代码都是其他工程拿过来的。而把程序放到手机上运行就经常会出现SocketException:Connection reset by peer. 我看了很多关于这个错误的原理。
其实报错在:HttpResponse resp = httpClient.execute(get); 所以我想问的就是这个get参数配置的影响,为什么模拟器和电脑浏览器能访问,而手机访问就会出错?我运行的时候是经常出错,所以我采用连续请求的方式,最后也能请求到数据。问下,你在手机运行的过程中就没有报过这个错??
http://bbs.csdn.net/topics/390253540
上面这个地址是我关于同一个问题的另一个帖子。回复里面有我的两段源码。你可以看看。服务器是.Net MVC,具体细节我并不清楚。只有那个url地址。