您的位置:首页 > 理论基础 > 计算机网络

使用网络编程的较好方式

2015-11-30 12:40 351 查看
因为程序中会多处使用网络连接,所以应该将网络连接单独放在一个类中,可以复用。

接口HttpCallbackListener

package com.example.myInterface;

public interface httpCallbackListener {
void onFinish(String response);
void onError(Exception e);
}


HttpUtil.java

package com.example.util;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import com.example.myInterface.httpCallbackListener;

public class HttpUtil {

public static void sendHttpRequest(final String address,final httpCallbackListener listener){
new Thread(new Runnable() {
@Override
public void run() {
try {
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(address);//指定访问的服务器地址是电脑本机
HttpResponse httpResponse = httpClient.execute(httpGet);
String response;
if(httpResponse.getStatusLine().getStatusCode() == 200){
//请求和相应都成功
HttpEntity entity = httpResponse.getEntity();
response = EntityUtils.toString(entity,"utf-8");
if(listener!=null){
listener.onFinish(response);
}
}
else{
response = "error";
if(listener!=null){
listener.onFinish(response);
}
}

} catch (Exception e) {
if(listener!=null){
listener.onError(e);
}
}

}
}

).start();

}

}


MainActivity.java

package com.example.testsometing;

import java.util.List;
import com.example.entity.App;
import com.example.myInterface.httpCallbackListener;
import com.example.util.HttpUtil;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;

public class MainActivity extends Activity {

Handler handler ;
TextView tv_response;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

tv_response = (TextView) this.findViewById(R.id.response);
handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 1:
tv_response.setText(parseJSONWithGson(msg.obj.toString()));
break;
default:
break;
}
}
};

String address = "http://10.0.2.2/get_json.json";
HttpUtil.sendHttpRequest(address, new httpCallbackListener() {
@Override
public void onFinish(String response) {
Message msg = new Message();
msg.what = 1;
msg.obj = response;
handler.sendMessage(msg);
}

@Override
public void onError(Exception e) {

}
});

/* new Thread(new Runnable() {
@Override
public void run() {
try {
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("http://10.0.2.2/get_json.json");//指定访问的服务器地址是电脑本机
HttpResponse httpResponse = httpClient.execute(httpGet);
String response;
if(httpResponse.getStatusLine().getStatusCode() == 200){
//请求和相应都成功
HttpEntity entity = httpResponse.getEntity();
response = EntityUtils.toString(entity,"utf-8");
}
else{
response = "error";
}
Message msg = new Message();
msg.what = 1;
msg.obj = response;
handler.sendMessage(msg);

} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}
}

).start();*/
}

private String parseJSONWithGson(String str){
String string = "";
Gson gson = new Gson();
List<App> appList = gson.fromJson(str,new TypeToken<List<App>>(){}.getType());
for(App app:appList){
string += app.getId()+":"+app.getName()+":"+app.getVersion()+"\n";
}
return string;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: