使用网络编程的较好方式
2015-11-30 12:40
351 查看
因为程序中会多处使用网络连接,所以应该将网络连接单独放在一个类中,可以复用。
接口HttpCallbackListener
HttpUtil.java
MainActivity.java
接口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; } }
相关文章推荐
- IPv4网络地址与子网划分
- OpenFlow对网络创新的影响
- iOS 保持界面流畅的技巧(转自http://blog.ibireme.com/author/ibireme/)
- IOS学习之 网络编程(6)--文件上传
- ios9 http请求不通。修改plist文件也不行的状况
- Mac OS X 跟新到10.11后cocoapods安装出现的问题(- bad response Not Found 404 (http://ruby.taobao.org/latest_spe)
- android 实现从网络上抓取图片并显示在手机上
- [网络基础]http的重点
- MFC tcpserver转发数据 编程思想
- iOS9 HTTP 不能正常使用的解决办法
- C#网络编程之---TCP协议的同步通信(二)
- C#网络编程之--TCP协议(一)
- Android与服务器端数据交互(http协议整合struts2+android)
- Spice工作原理及代码剖析:02 Spice网络事件处理模型
- 有时$_SERVER["HTTP_REFERER"]为空的原因
- 卷积神经网络在自然语言处理的应用
- pAdTy_2 构建连接网络和云的应用程序
- IOS学习之 网络编程(5)--多线程断点下载
- import javax.servlet.http.HttpServletRequest;
- HttpClient 中文编码问题