Android 网络通信架构学习
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Android 网络通信架构学习,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含7227字,纯文字阅读大概需要11分钟。
内容图文
![Android 网络通信架构学习](/upload/InfoBanner/zyjiaocheng/1237/3702aeae4aee405aa7d357ddc6ed44f3.jpg)
最近跟着云课堂上的极客学院做安卓APP,学习了课程里面介绍的一种网络通信架构。清晰明了,比我自己东一块西一块拼凑出来的要好很多。在这里记录一下。
云课堂的连接:http://study.163.com/course/courseMain.htm?courseId=917001
目录:
一、Android端实现
1.1 架构图
1.2 NetworkConnection.java实现
1.3 Logic.java实现
1.4 Activity.java实现
二、测试
2.1 服务器配置
2.2 结果
==============================
正文
1.1 架构图
NetworkConnection.java里面实现的,就是网络通信的内容。他不负责任何逻辑处理,只提供网络通信,将逻辑处理过程通过回调函数的方式留给上层的Logic.java实现
Logic.java针对具体的处理事件,实现处理逻辑,如数据的处理,网络通信成功或失败的后续处理等。与界面的交流等主要通过回调函数,留给Activity.java实现
Activity.java是界面类,主要获取界面内容和更新界面,通过实现Logic.java 的回调函数进行页面的更新。
以一个登陆的例子,其源代码组织如图:
1.2 NetworkConnection.java的实现
package com.example.networkarch.net; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import android.os.AsyncTask; public class NetConnection { public NetConnection(final String url, final HttpMethod method, final SuccessCallback successCallback, final FailCallback failCallback, final String ... kvs){ System.out.println("4"); new AsyncTask<Void, Void, String>() { @Override protected String doInBackground(Void... arg0) { StringBuffer paramsStr = new StringBuffer(); for(int i = 0; i < kvs.length; i += 2){ paramsStr.append(kvs[i]).append("+").append(kvs[i+1]).append("&"); } URLConnection uc; try { switch (method) { case POST: uc = new URL(url).openConnection(); uc.setDoOutput(true); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(uc.getOutputStream())); bw.write(paramsStr.toString()); bw.flush(); break; default: uc = new URL(url + "?" + paramsStr.toString()).openConnection(); break; } BufferedReader br = new BufferedReader(new InputStreamReader(uc.getInputStream())); String line = null; StringBuffer result = new StringBuffer(); while((line = br.readLine()) != null){ result.append(line); } System.out.println("++result: "+result.toString()); return result.toString(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } returnnull; } protectedvoid onPostExecute(String result){ if(result != null){ if(successCallback != null){ successCallback.onSuccess(result); } } else{ if(failCallback != null){ failCallback.onFail(); } } super.onPostExecute(result); } }.execute(); } publicstaticinterface SuccessCallback{ void onSuccess(String result); } publicstaticinterface FailCallback{ void onFail(); } }
1.3 Logic.java的实现
package com.example.networkarch.logic; import org.json.JSONException; import org.json.JSONObject; import com.example.networkarch.Config; import com.example.networkarch.net.HttpMethod; import com.example.networkarch.net.NetConnection; public class Login { public Login(String username, String password, final SuccessCallback successCallback, final FailCallback failCallback){ System.out.println("3"); new NetConnection(Config.SERVER_URL, HttpMethod.POST, new NetConnection.SuccessCallback() { @Override publicvoid onSuccess(String result) { if(successCallback != null){ try { System.out.println("result: "+result); JSONObject jsonObject = new JSONObject(result); System.out.println("5"); switch (jsonObject.getInt(Config.KEY_STATUS)) { case Config.RESULT_STATUS_SUCCESS: if(successCallback != null){ successCallback.onSuccess(jsonObject.getString(Config.VAULE_RESULT)); } break; default: if(failCallback != null){ failCallback.onFail(); } break; } } catch (JSONException e) { e.printStackTrace(); if(failCallback != null){ failCallback.onFail(); } } } } }, new NetConnection.FailCallback() { @Override publicvoid onFail() { if(failCallback != null){ failCallback.onFail(); } } }, "action", "login", "username", username, "password", password); } publicstaticinterface SuccessCallback{ void onSuccess(String result); } publicstaticinterface FailCallback{ void onFail(); } }
1.4 Activity.java的实现
package com.example.networkarch; import com.example.networkarch.aty.ATYHome; import com.example.networkarch.logic.Login; import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBar; import android.support.v4.app.Fragment; import android.app.ProgressDialog; import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import android.os.Build; public class MainActivity extends ActionBarActivity { private EditText username; private EditText password; private Button loginButton; @Override protectedvoid onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); username = (EditText)findViewById(R.id.et_username); password = (EditText)findViewById(R.id.et_password); loginButton = (Button)findViewById(R.id.bt_login); loginButton.setOnClickListener(new View.OnClickListener() { @Override publicvoid onClick(View arg0) { //final ProgressDialog pd = ProgressDialog.show(MainActivity.this, "Login...", "Please wait"); System.out.println("2"); new Login(username.getText().toString(), password.getText().toString(), new Login.SuccessCallback() { @Override publicvoid onSuccess(String result) { Intent intent = new Intent(MainActivity.this, ATYHome.class); intent.putExtra(Config.KEY_RESULT, result); startActivity(intent); finish(); } }, new Login.FailCallback() { @Override publicvoid onFail() { Toast.makeText(MainActivity.this, "Sorry", Toast.LENGTH_LONG).show(); } }); } }); } }
另外补充两个在代码里面用到的代码:
package com.example.networkarch; public class Config { public static final String SERVER_URL = "http://192.168.1.13:80/NetworkTest/test"; publicstaticfinalint RESULT_STATUS_SUCCESS = 2; publicstaticfinalint RESULT_STATUS_FAIL = 1; publicstaticfinal String KEY_STATUS = "status"; publicstaticfinal String KEY_RESULT = "result"; publicstaticfinal String VAULE_RESULT = "result"; }
package com.example.networkarch.net; public enum HttpMethod { POST,GET }
APP需要上网的权限,在Manifest.xml文件中补充如下代码:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
2.1 Server端实现
package cn.example.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.json.JSONObject; public class Result extends HttpServlet{ publicvoid doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ doPost(request, response); } publicvoid doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ System.out.println("++++++++++++++++get the infor"); JSONObject json = new JSONObject(); json.put("status", 2); json.put("result", "hello welcome"); PrintWriter out = response.getWriter(); out.write(json.toString()); } }
做一个简单的servlet,只要收到请求了,就返回一个字符串“hello welcom”的json给APP
2.2 结果
APP将收到的结果提取出来,传给下一个页面并显示出来即可。
原文:http://www.cnblogs.com/zhawj159753/p/4248138.html
内容总结
以上是互联网集市为您收集整理的Android 网络通信架构学习全部内容,希望文章能够帮你解决Android 网络通信架构学习所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。