adnroid上如何访问url返回数据,特殊!!
"http://mascwt.oicp.net:7080/Monitoring/Data/getOrgData/"
发个url地址,望有高手能给出访问url返回数据的方法。这个url是要返回json数据。
电脑上可以访问返回,我想在android上开发,但是用android的HttpClient..方式搞不了。
拜托了。。。别人现在一直催,我搞不定啊。
[解决办法]
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;
}
}
[解决办法]
@Override
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;
[解决办法]
第一层,WebClient
public class WebClient{
//...
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();
}
}
//...
}
第二层, Services
public 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);
}
}
第三层, UI
public 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.
有乱码, 推测为编码问题.
