基于AsyncTask和HttpClient Post方法的android前端和服务器连接的框架

学习总结自极客学院Android教学视频:实践项目《秘密》。原教程使用UrlConnect进行连接,我改进成HttpClient,并整合加入了进度条,避免每一次使用框架都要重新写一个进度条。

对代码不理解的朋友,强烈建议学习一下极客学院的教程,关于AsyncTask、httpClient以及对Json对象的解析可以参考我的另一篇博文。

作者接触安卓开发不到三个月,问题还有很多,希望大家能够多交流。

源代码如下。

public class NetConnection {
	public NetConnection(final String url,
			final SuccessCallback successCallback,
			final FailCallback failCallback,final Context context,final String... kvs) {

		final ProgressDialog dialog = new ProgressDialog(context);
		dialog.setCancelable(false);
		dialog.setTitle(R.string.title_connecting);
		dialog.setMessage(context.getString(R.string.message_connecting));
		dialog.show();
		
		new AsyncTask<Void, Void, String>() {
				
			@Override
			protected String doInBackground(Void... arg0) {
				List<NameValuePair> params = new ArrayList<NameValuePair>();
				for (int i = 0; i < kvs.length; i += 2) {
					params.add(new BasicNameValuePair(kvs[i], kvs[i + 1]));
				}

				HttpClient httpClient;
				httpClient = new DefaultHttpClient();
				HttpPost httpPost = new HttpPost(url);
				StringBuffer result = new StringBuffer();
				try {
					httpPost.setEntity(new UrlEncodedFormEntity(params,
							HTTP.UTF_8));
					HttpResponse httpResponse = httpClient.execute(httpPost);

					System.out.println(">>>>---提交信息--->>>>");
					System.out.println("Request data:"
							+ params.toString());
					System.out.println(">>>>------>>>>");

					if (httpResponse.getStatusLine().getStatusCode() == 200) {
						InputStream is = httpResponse.getEntity().getContent();
						InputStreamReader isr = new InputStreamReader(is,
								HTTP.UTF_8);
						BufferedReader br = new BufferedReader(isr);
						String line = null;
						while ((line = br.readLine()) != null) {
							result.append(line);
						}
						br.close();
						isr.close();
						is.close();

						System.out.println(">>>>---获取信息--->>>>");
						System.out.println(result.toString());
						System.out.println(">>>>------>>>>");
						return result.toString();
					}
				} catch (ClientProtocolException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

				return null;
			}

			protected void onPostExecute(String result) {
				if (result != null) {
					if (successCallback != null) {
						successCallback.onSuccess(result);
					}
				} else {
					if (failCallback != null) {
						failCallback.onFail();
					}
				}
				dialog.dismiss();
				super.onPostExecute(result);
			};
		}.execute();
	}

	public static interface SuccessCallback {
		void onSuccess(String result);
	}

	public static interface FailCallback {
		void onFail();
	}
}


NetConnection类中除了构造方法,就是两个回调接口,其中成功的回调接口的result参数即是获取到的网络内容。

其中使用了ProgressDialog,所以构造方法中要传入Context参数,有关UI的操作,android中要求在非主线程中进行,所以使用AsyncTask。

在doInBackgroud方法中,使用HttpClient获取网络内容,返回值为String类型,传入onPostExcute方法中,使用回调接口onSuccess.

其余只要在其构造方法,传入参数和连接地址即可。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目:使用AngularJs编写的简单 益智游戏(附源代码)  这是一个简单的 javascript 项目。这是一个拼图游戏,也包含一个填字游戏。这个游戏玩起来很棒。有两个不同的版本可以玩这个游戏。你也可以玩填字游戏。 关于游戏 这款游戏的玩法很简单。如上所述,它包含拼图和填字游戏。您可以通过移动图像来玩滑动拼图。您还可以选择要在滑动面板中拥有的列数和网格数。 另一个是填字游戏。在这里你只需要找到浏览器左侧提到的那些单词。 要运行此游戏,您需要在系统上安装浏览器。下载并在代码编辑器中打开此项目。然后有一个 index.html 文件可供您修改。在命令提示符中运行该文件,或者您可以直接运行索引文件。使用 Google Chrome 或 FireFox 可获得更好的用户体验。此外,这是一款多人游戏,双方玩家都是人类。 这个游戏包含很多 JavaScript 验证。这个游戏很有趣,如果你能用一点 CSS 修改它,那就更好了。 总的来说,这个项目使用了很多 javascript 和 javascript 库。如果你可以添加一些具有不同颜色选项的级别,那么你一定可以利用其库来提高你的 javascript 技能。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值