android App中的网络访问
2012-12-25 11:17
323 查看
单机app在android的生态环境中几乎没有立足之地,因此app获取网络访问权的能力是必不可少的,本文除了代码之外还包括一些注意事项(可能是太基础了所以书上或者其他参考网站都没有提及这些细节)。
一,在AndroidManifest.xml中加入访问互联网的权限:
< uses-permission android:name = "android.permission.INTERNET" />
二,访问互联网的操作不能在main thread (对于activity来说是UI thread)中进行,否则会报错:
”android.os.NetworkOnMainThreadException“
可选的方式有:
1, 使用AsyncTask处理网络操作。
2, 在activity中创建新thread处理网络操作。
3, 启动service并在service中创建新thread处理网络操作。
三,下面以简单的GET方式作为例子说明。
1, 访问互联网的主函数:
2, 在AsyncTask的doInBackground里面调用这个函数:
3, 在UI线程中启动task:
* AsyncTask的使用还需要优化,这里仅作为demo简单实现。上述代码在N880E上验证通过。
一,在AndroidManifest.xml中加入访问互联网的权限:
< uses-permission android:name = "android.permission.INTERNET" />
二,访问互联网的操作不能在main thread (对于activity来说是UI thread)中进行,否则会报错:
”android.os.NetworkOnMainThreadException“
可选的方式有:
1, 使用AsyncTask处理网络操作。
2, 在activity中创建新thread处理网络操作。
3, 启动service并在service中创建新thread处理网络操作。
三,下面以简单的GET方式作为例子说明。
1, 访问互联网的主函数:
public String executeHttpGet(){ BufferedReader in = null; String result = "empty"; String weather = "http://m.weather.com.cn/data/101280601.html"; try{ DefaultHttpClient client = new DefaultHttpClient(); HttpGet request = new HttpGet(); request.setURI(new URI(weather)); // url max length = 2048, need to do POST if u wanna long request HttpResponse response = client.execute(request); in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); StringBuffer sb = new StringBuffer(); String line = ""; String NL = System.getProperty("line.separator"); while((line=in.readLine()) != null){ sb.append(line + NL); } result = sb.toString(); // Log.d(DEBUG_TAG, result); }catch(Exception e){ e.printStackTrace(); }finally{ if(in != null){ try{ in.close(); }catch(Exception e){ e.printStackTrace(); } } } return result; }
2, 在AsyncTask的doInBackground里面调用这个函数:
class HttpTask extends AsyncTask<Integer, Integer, String>{ @Override protected String doInBackground(Integer... params) { return executeHttpGet(); } @Override protected void onPostExecute(String result){ // update UI when process done Log.e(DEBUG_TAG, "onPostExecute"); if(mTextView != null) mTextView.setText(result); super.onPostExecute(result); } }
3, 在UI线程中启动task:
public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.http1); ... ... // other initialization new HttpTask().execute(); } // end of onCreate
* AsyncTask的使用还需要优化,这里仅作为demo简单实现。上述代码在N880E上验证通过。
相关文章推荐
- Android下基于Iptables的一种app网络访问控制方案(一)
- Android下基于Iptables的一种app网络访问控制方案(二)
- Android下基于Iptables的一种app网络访问控制方案(二)
- Android关于网络访问app应用开发相关的异常总结
- android iptables 屏蔽某个app网络访问
- Android app网络访问控制
- Android下基于Iptables的一种app网络访问控制方案(一)
- Android 主线程无法访问网络
- android网络访问框架OkHttp的进一步封装
- Android将网页做成app-- Jsoup网络解析框架
- Android中进行基于HTTP协议的网络访问基础
- Android网络访问
- Android 4.x 在 https 协议下无法利用 okhttp 进行网络访问的临时解决办法
- Android访问网络,使用HttpURLConnection还是HttpClient?
- Android之loadUrl访问网络资源与本地资源的方法
- Android 访问网络图片
- android 模拟浏览器访问网络
- android判断连接的wifi是否能访问网络
- Android 多线程通信 访问网络
- Android之HttpsURLConnection访问网络(android https协议)