首页 文章 精选 留言 我的

精选列表

搜索[传媒云原生移动开发平台],共10000篇文章
优秀的个人博客,低调大师

Android开发者指南(2) —— aapt

正文 使用aapt aapt是标准的Android辅助打包工具,位于SDK的tools/文件夹下。该工具允许查看、创建或更新Zip兼容格式(zip,jar,apk)的文档,并且能将资源编译到二进制格式的包中。 通常不需要直接使用aapt工具,IDE插件和编译脚本能利用它打包apk文件来合成应用程序。 详细的用法可以打开命令行终端,到tools文件夹下运行如下命令: Linux或Mac OS X: ./aapt Windows: aapt.exe 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582290,如需转载请自行联系原作者

优秀的个人博客,低调大师

一次Hadoop开发思路分享

困扰了自己1周的一个问题终于得到解决了,感谢给我帮助的同学,同时记录下来分享给大家. 问题简化描述: HDFS存在这样格式的文件:用户ID主题ID用户对此主题的偏好分数score。 现在要求实现对给定的几个主题T1,T2,T3,...TN,每个主题要求筛选出指定数量的用户ID是M1,M2,M3,...MX。 希望尽可能根据score来选出偏好的用户ID,并且主题之间的用户ID不可以重复。 另外HDFS上distinct的用户ID数量是大于等于M1+M2+M3+...+MX的。 思路分析: 问题有几个关键点,第一,不重复,第二,数量上要满足,第三,偏好分数score。 如何保证,主题之间的用户不重复呢? 其实就是完成,一个用户只能属于一个主题的过程,当然,我们可以很简单的对一个用户下的所有偏好分数进行排序,取出最偏好的主题。 虽然这样避免了重复的问题,可是问题来了,如果偏好主题T1要求的数量是100W,而仅仅只有90W的用户ID对T1最偏好,这该如何补数呢?又如何通过程序来自动化的实现这个过程呢?越想越复杂! 这个问题好像有点类似于高考填自愿的问题,我们每一个人会填写几个志愿,但是我们终究只会被一个院校录取,这是怎么做到的呢?是否可以从中借鉴呢? 首先,我们根据HDFS的内容,写一个MapReduce完成一次计算,形成下面的用户志愿HDFS内容: 用户ID 主题ID-A:score1;主题ID-B:score2;... 很简单,希望得到一个用户ID下面按照score desc排序的主题列表,上面一行其实就是说: 用户ID的第一志愿是主题A,第二志愿是主题B...。 ------------------------------------------ 接下来,形成下面的一个列表list信息: 主题A count-A 主题B count-B 主题C count-C ... 按照主题需要的用户ID的数量进行ASC排序。 ------------------------------------------ 下面,我们就来看如何进行主题选择用户的过程: 我们首先选择对数量要求最少的主题A完成下面的MapReduce计算: 这样,我们就完成了主题A的用户筛选问题。 接下来,我们取出list中数量要求比A多一点的主题B,那么它怎么取用户呢? 很简单,我们只需要在MAP处理阶段,传递主题A生成的结果HDFS路径(路径下面的文件内容当然是主题A的用户)用于reduce阶段取用户时进行过滤。 那么,主题C又如何取用户呢? 类似的,只需要给MAP多传递主题A,主题B已经占用的用户信息用于过滤,其他处理操作不变! 其实,我们可以发现,上面的MapReduce其实可以是一个通用的程序,类似于COMMAND: hadoop jar XXX.jar 主题ID 数量 [input1,input2,input3,...] 用户志愿HDFS路径 输出路径 其中input1,input2,input3,...是可选的,其实就是用于用户过滤的。 最后,我们可以写一个Shell脚本,根据list的内容来进行重复调用上面的COMMAND,通过传递不同的参数信息达到目的,这样我们就可以自动化实现上面的要求了! 本文转自zfz_linux_boy 51CTO博客,原文链接:http://blog.51cto.com/zhangfengzhe/1689902,如需转载请自行联系原作者

优秀的个人博客,低调大师

android的互联网开发 上

一、java socket编程的介绍http://www.cnblogs.com/linzheng/archive/2011/01/23/1942328.html 二、URL、UrlConnection网络编程介绍 三、HTTP网络编程介绍 http协议-简介http协议-C#获取网页源代码http协议-多线程文件传输 四、 Web Service网络编程介绍 五、 android WebView网络编程介绍 实例代码----------------------------------------------- 服务器端模拟 MyServer.java packagecom.amaker.socket; importjava.io.IOException; importjava.io.OutputStream; importjava.net.ServerSocket; importjava.net.Socket; /** * *Socket服务器,向客户端写HelloAndroid! */ publicclassMyServer{ publicstaticvoidmain(String[]args){ try{ ServerSocketserver=newServerSocket(8888); while(true){ Socketclient=server.accept(); OutputStreamout=client.getOutputStream(); Stringmsg="HelloAndroid!"; out.write(msg.getBytes()); client.close(); } }catch(IOExceptione){ e.printStackTrace(); } } } LoginServlet.java packagecom.amaker.http; importjava.io.IOException; importjava.io.PrintWriter; importjavax.servlet.ServletException; importjavax.servlet.http.HttpServlet; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; /** * *响应登录Servlet */ publicclassLoginServletextendsHttpServlet{ publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ Stringusername=request.getParameter("username"); Stringpassword=request.getParameter("password"); System.out.println(username+":"+password); response.setContentType("text/html"); response.setCharacterEncoding("utf-8"); PrintWriterout=response.getWriter(); Stringmsg=null; if(username!=null&&username.equals("admin")&&password!=null&&password.equals("1")){ msg="登录成功!"; }else{ msg="登录失败!"; } out.print(msg); out.flush(); out.close(); } publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ doGet(request,response); } } web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>com.amaker.http.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/servlet/LoginServlet</url-pattern> </servlet-mapping> </web-app> android客户端 MainActivity.java packagecom.amaker.ch13; importandroid.app.ListActivity; importandroid.content.Intent; importandroid.os.Bundle; importandroid.view.View; importandroid.widget.ArrayAdapter; importandroid.widget.ListView; importcom.amaker.ch13.http.LoginActivity; importcom.amaker.ch13.socket.TestSocketActivity; importcom.amaker.ch13.url.TestURLActivity; importcom.amaker.ch13.webservice.TestWebServiceActivity; importcom.amaker.ch13.webservice.WeatherActivity; importcom.amaker.ch13.webview.TestWebViewActivity; publicclassMainActivityextendsListActivity{ @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); //菜单项数组 String[]items={"测试Socket","测试URL、UrlConnection","测试HTTP","测试WebService","天气预报","TestWebView"}; //将菜单项数组设置为ListView的列表项展示 setListAdapter(newArrayAdapter<String>(this, android.R.layout.simple_list_item_1,items)); getListView().setTextFilterEnabled(true); } //响应菜单项的单击事件 protectedvoidonListItemClick(ListViewl,Viewv,intposition,longid){ Intentintent=null; switch(position){ case0: intent=newIntent(MainActivity.this,TestSocketActivity.class); startActivity(intent); break; case1: intent=newIntent(MainActivity.this,TestURLActivity.class); startActivity(intent); break; case2: intent=newIntent(MainActivity.this,LoginActivity.class); startActivity(intent); break; case3: intent=newIntent(MainActivity.this,TestWebServiceActivity.class); startActivity(intent); break; case4: intent=newIntent(MainActivity.this,WeatherActivity.class); startActivity(intent); break; case5: intent=newIntent(MainActivity.this,TestWebViewActivity.class); startActivity(intent); break; } } } AndroidManifest.xml <?xmlversion="1.0"encoding="utf-8"?> <manifestxmlns:android="http://schemas.android.com/apk/res/android" package="com.amaker.ch13" android:versionCode="1" android:versionName="1.0"> <applicationandroid:icon="@drawable/icon"android:label="@string/app_name"> <activityandroid:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <actionandroid:name="android.intent.action.MAIN"/> <categoryandroid:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <activityandroid:name="com.amaker.ch13.http.LoginActivity"/> <activityandroid:name="com.amaker.ch13.socket.TestSocketActivity"/> <activityandroid:name="com.amaker.ch13.url.TestURLActivity"/> <activityandroid:name="com.amaker.ch13.webservice.TestWebServiceActivity"/> <activityandroid:name="com.amaker.ch13.webservice.WeatherActivity"/> <activityandroid:name="com.amaker.ch13.webview.TestWebViewActivity"/> </application> <uses-sdkandroid:minSdkVersion="3"/> <uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> <uses-permissionandroid:name="android.permission.INTERNET"></uses-permission> </manifest> 一、socket编程 TestSocketActivity.java 代码 packagecom.amaker.ch13.socket; importjava.io.IOException; importjava.io.InputStream; importjava.net.Socket; importjava.net.UnknownHostException; importandroid.app.Activity; importandroid.os.Bundle; importandroid.widget.TextView; importcom.amaker.ch13.R; /** * *Android Socket客户端接收服务器信息 */ publicclassTestSocketActivityextendsActivity{ privateTextViewmyTextView; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.socket); myTextView=(TextView)findViewById(R.id.msgTextView01); try{ Socketsocket=newSocket("192.168.1.101",8888); InputStreamin=socket.getInputStream(); byte[]buffer=newbyte[in.available()]; in.read(buffer); Stringmsg=newString(buffer); myTextView.setText(msg); }catch(UnknownHostExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); } } } socket.xml 代码 <?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:text="等待接收服务器信息..." android:id="@+id/msgTextView01" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> </LinearLayout> 二、URL、UrlConnection编程 TestURLActivity.java 代码 packagecom.amaker.ch13.url; importjava.io.InputStream; importjava.net.URL; importjava.net.URLConnection; importandroid.app.Activity; importandroid.graphics.Bitmap; importandroid.graphics.BitmapFactory; importandroid.os.Bundle; importandroid.widget.ImageView; importcom.amaker.ch13.R; /** *通过URL进行网络连接 */ publicclassTestURLActivityextendsActivity{ privateImageViewimageView; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.test_url); imageView=(ImageView)findViewById(R.id.ImageView01); StringurlStr="http://192.168.1.101:8080/Chapter_13_Networking_server/upload/zs.jpg"; try{ URLurl=newURL(urlStr); //1.直接使用URL获得输入流 //InputStreamin=url.openStream(); //2.获得URLconnection URLConnectionconn=url.openConnection(); InputStreamin=conn.getInputStream(); //3.如果是HTTP协议可以使用HttpURLConnection //HttpURLConnectionhttpConn=(HttpsURLConnection)conn; //in=httpConn.getInputStream(); Bitmapbm=BitmapFactory.decodeStream(in); imageView.setImageBitmap(bm); }catch(Exceptione){ e.printStackTrace(); } } } test_url.xml 代码 <?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:id="@+id/ImageView01" android:layout_width="wrap_content" android:layout_height="wrap_content"></ImageView> </LinearLayout> 三、 HTTP编程 LoginActivity.java 代码 packagecom.amaker.ch13.http; importjava.io.UnsupportedEncodingException; importjava.util.ArrayList; importjava.util.List; importorg.apache.http.HttpResponse; importorg.apache.http.NameValuePair; importorg.apache.http.client.entity.UrlEncodedFormEntity; importorg.apache.http.client.methods.HttpPost; importorg.apache.http.impl.client.DefaultHttpClient; importorg.apache.http.message.BasicNameValuePair; importorg.apache.http.protocol.HTTP; importorg.apache.http.util.EntityUtils; importandroid.app.Activity; importandroid.app.AlertDialog; importandroid.content.DialogInterface; importandroid.os.Bundle; importandroid.view.View; importandroid.view.View.OnClickListener; importandroid.widget.Button; importandroid.widget.EditText; importcom.amaker.ch13.R; publicclassLoginActivityextendsActivity{ /* *声明使用到的Button和EditText视图组件 */ privateButtoncancelBtn,loginBtn; privateEditTextuserEditText,pwdEditText; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.http1); /* *实例化视图组件 */ cancelBtn=(Button)findViewById(R.id.cancelButton); loginBtn=(Button)findViewById(R.id.loginButton); userEditText=(EditText)findViewById(R.id.userEditText); pwdEditText=(EditText)findViewById(R.id.pwdEditText); /* *设置登录监听器 */ loginBtn.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ Stringusername=userEditText.getText().toString(); Stringpwd=pwdEditText.getText().toString(); login(username,pwd); } }); /* *设置取消监听器 */ cancelBtn.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ finish(); } }); } /* *定义一个显示提示信息的对话框 */ privatevoidshowDialog(Stringmsg){ AlertDialog.Builderbuilder=newAlertDialog.Builder(this); builder.setMessage(msg) .setCancelable(false) .setPositiveButton("确定",newDialogInterface.OnClickListener(){ publicvoidonClick(DialogInterfacedialog,intid){ } }); AlertDialogalert=builder.create(); alert.show(); } /* *通过用户名称和密码进行查询,发送Post请求,获得响应结果。 */ privatevoidlogin(Stringusername,Stringpassword){ //1.使用HttpURLConnection实现 /*StringurlStr="http://192.168.1.101:8080/Chapter_13_Networking_server/servlet/LoginServlet?"; StringqueryString="username="+username+"&password="+password; urlStr+=queryString; try{ URLurl=newURL(urlStr); HttpURLConnectionconn=(HttpURLConnection)url.openConnection(); if(conn.getResponseCode()==HttpURLConnection.HTTP_OK){ InputStreamin=conn.getInputStream(); byte[]b=newbyte[in.available()]; in.read(b); Stringmsg=newString(b); showDialog(msg); in.close(); } conn.disconnect(); }catch(Exceptione){ showDialog(e.getMessage()); }*/ //2.使用ApacheHTTP客户端实现 StringurlStr="http://192.168.1.101:8080/Chapter_13_Networking_server/servlet/LoginServlet"; HttpPostrequest=newHttpPost(urlStr); //如果传递参数个数比较多的话,我们可以对传递的参数进行封装 List<NameValuePair>params=newArrayList<NameValuePair>(); params.add(newBasicNameValuePair("username",username)); params.add(newBasicNameValuePair("password",password)); try{ request.setEntity(newUrlEncodedFormEntity(params,HTTP.UTF_8)); HttpResponseresponse=newDefaultHttpClient().execute(request); if(response.getStatusLine().getStatusCode()==200){ Stringmsg=EntityUtils.toString(response.getEntity()); showDialog(msg); } }catch(Exceptione){ e.printStackTrace(); } } } 本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1079279

优秀的个人博客,低调大师

android的互联网开发 下

http1.xml <TableRow> <TextView android:text="用户密码:" android:id="@+id/TextView" android:layout_width="wrap_content" android:layout_height="wrap_content" ></TextView> <EditText android:text="" android:id="@+id/pwdEditText" android:layout_width="fill_parent" android:layout_height="wrap_content" android:password="true"></EditText> </TableRow> <TableRowandroid:gravity="right"> <Button android:text="取消" android:id="@+id/cancelButton" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> <Button android:text="登陆" android:id="@+id/loginButton" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> </TableRow> </TableLayout> /LinearLayout> 四、Web Service编程 TestWebServiceActivity.java packagecom.amaker.ch13.webservice; importjava.io.IOException; importorg.ksoap2.SoapEnvelope; importorg.ksoap2.serialization.MarshalBase64; importorg.ksoap2.serialization.PropertyInfo; importorg.ksoap2.serialization.SoapObject; importorg.ksoap2.serialization.SoapSerializationEnvelope; importorg.ksoap2.transport.AndroidHttpTransport; importorg.xmlpull.v1.XmlPullParserException; importandroid.app.Activity; importandroid.os.Bundle; publicclassTestWebServiceActivityextendsActivity{ @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); StringserviceNamespace="http://tempuri.org/"; StringserviceURL="http://www.ayandy.com/Service.asmx"; StringmethodName="getWeatherbyCityName"; SoapObjectrequest=newSoapObject(serviceNamespace,methodName); PropertyInfoinfo=newPropertyInfo(); info.setName("theCityName"); info.setValue("北京"); PropertyInfoinfo2=newPropertyInfo(); info2.setName("theDayFlag"); info2.setValue("1"); request.addProperty(info); request.addProperty(info2); SoapSerializationEnvelopeenvelope=newSoapSerializationEnvelope(SoapEnvelope.VER11); envelope.bodyOut=request; (newMarshalBase64()).register(envelope); AndroidHttpTransportht=newAndroidHttpTransport(serviceURL); ht.debug=true; try{ ht.call("http://tempuri.org/getWeatherbyCityName",envelope); if(envelope.getResponse()!=null){ System.out.println(envelope.getResult()); } }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(XmlPullParserExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } } WeatherActivity.java packagecom.amaker.ch13.webservice; importjava.util.List; importandroid.app.Activity; importandroid.os.Bundle; importandroid.view.View; importandroid.widget.AdapterView; importandroid.widget.ArrayAdapter; importandroid.widget.Spinner; importandroid.widget.TextView; importandroid.widget.AdapterView.OnItemSelectedListener; importcom.amaker.ch13.R; /** * *显示天气预报 */ publicclassWeatherActivityextendsActivity{ //声明视图组件 privateTextViewdisplayTextView; privateSpinnerspinner; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.weather); //实例化视图组件 displayTextView=(TextView)findViewById(R.id.displayTextView03); spinner=(Spinner)findViewById(R.id.citySpinner01); List<String>citys=WebServiceUtil.getCityList(); ArrayAdaptera=newArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item,citys); spinner.setAdapter(a); spinner.setOnItemSelectedListener(newOnItemSelectedListener(){ @Override publicvoidonItemSelected(AdapterView<?>arg0,Viewarg1, intarg2,longarg3){ Stringmsg=WebServiceUtil.getWeatherMsgByCity(spinner.getSelectedItem().toString()); displayTextView.setText(msg); } @Override publicvoidonNothingSelected(AdapterView<?>arg0){ } }); } } WebServiceUtil.java packagecom.amaker.ch13.webservice; importjava.io.IOException; importjava.io.InputStream; importjava.util.ArrayList; importjava.util.List; importjavax.xml.parsers.DocumentBuilder; importjavax.xml.parsers.DocumentBuilderFactory; importorg.apache.http.HttpResponse; importorg.apache.http.NameValuePair; importorg.apache.http.client.entity.UrlEncodedFormEntity; importorg.apache.http.client.methods.HttpPost; importorg.apache.http.impl.client.DefaultHttpClient; importorg.apache.http.message.BasicNameValuePair; importorg.apache.http.protocol.HTTP; importorg.apache.http.util.EntityUtils; importorg.ksoap2.SoapEnvelope; importorg.ksoap2.serialization.MarshalBase64; importorg.ksoap2.serialization.SoapObject; importorg.ksoap2.serialization.SoapSerializationEnvelope; importorg.ksoap2.transport.AndroidHttpTransport; importorg.w3c.dom.Document; importorg.w3c.dom.Element; importorg.w3c.dom.Node; importorg.w3c.dom.NodeList; importorg.xmlpull.v1.XmlPullParserException; /** * *天气预报工具类 */ publicclassWebServiceUtil{ /* *通过传递城市名称获得天气信息 */ publicstaticStringgetWeatherMsgByCity(StringcityName){ Stringurl="http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx/getWeather"; HttpPostrequest=newHttpPost(url); List<NameValuePair>params=newArrayList<NameValuePair>(); params.add(newBasicNameValuePair("theCityCode",cityName)); params.add(newBasicNameValuePair("theUserID","")); Stringresult=null; try{ UrlEncodedFormEntityentity=newUrlEncodedFormEntity(params, HTTP.UTF_8); request.setEntity(entity); HttpResponseresponse=newDefaultHttpClient().execute(request); if(response.getStatusLine().getStatusCode()==200){ result=EntityUtils.toString(response.getEntity()); returnparse2(result); } }catch(Exceptione){ e.printStackTrace(); } returnnull; } /* *使用ksoap,获得城市列表 */ publicstaticList<String>getCityList(){ //命名空间 StringserviceNamespace="http://WebXml.com.cn/"; //请求URL StringserviceURL="http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx"; //调用的方法 StringmethodName="getRegionProvince"; //实例化SoapObject对象 SoapObjectrequest=newSoapObject(serviceNamespace,methodName); //获得序列化的Envelope SoapSerializationEnvelopeenvelope=newSoapSerializationEnvelope( SoapEnvelope.VER11); envelope.bodyOut=request; (newMarshalBase64()).register(envelope); //Android传输对象 AndroidHttpTransportht=newAndroidHttpTransport(serviceURL); ht.debug=true; try{ //调用 ht.call("http://WebXml.com.cn/getRegionProvince",envelope); if(envelope.getResponse()!=null){ returnparse(envelope.bodyIn.toString()); } }catch(IOExceptione){ e.printStackTrace(); }catch(XmlPullParserExceptione){ e.printStackTrace(); } returnnull; } /* *对天气信息XML文件进行解析 */ privatestaticStringparse2(Stringstr){ Stringtemp; String[]temps; Listlist=newArrayList(); StringBuildersb=newStringBuilder(""); if(str!=null&&str.length()>0){ temp=str.substring(str.indexOf("<string>")); temptemps=temp.split("</string>"); for(inti=0;i<temps.length;i++){ sb.append(temps[i].substring(12)); sb.append("\n"); } } returnsb.toString(); } /* *对得到的城市XML信息进行解析 */ privatestaticList<String>parse(Stringstr){ Stringtemp; List<String>list=newArrayList<String>(); if(str!=null&&str.length()>0){ intstart=str.indexOf("string"); intend=str.lastIndexOf(";"); temp=str.substring(start,end-3); String[]test=temp.split(";"); for(inti=0;i<test.length;i++){ if(i==0){ temp=test[i].substring(7); }else{ temp=test[i].substring(8); } intindex=temp.indexOf(","); list.add(temp.substring(0,index)); } } returnlist; } } weather.xml <?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:text="天气预报" android:id="@+id/titleTextView01" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:text="请选择城市:" android:id="@+id/cityTextView02" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> <Spinner android:id="@+id/citySpinner01" android:layout_width="fill_parent" android:layout_height="wrap_content"></Spinner> </LinearLayout> <ScrollView android:id="@+id/ScrollView01" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:text="@+id/displayTextView03" android:id="@+id/displayTextView03" android:layout_width="fill_parent" android:layout_height="fill_parent"></TextView> </ScrollView> </LinearLayout> 五、WebView编程 TestWebViewActivity.java packagecom.amaker.ch13.webview; importandroid.app.Activity; importandroid.os.Bundle; importandroid.webkit.WebView; importcom.amaker.ch13.R; /** *通过WebView浏览网络 */ publicclassTestWebViewActivityextendsActivity{ privateWebViewwebView; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.test_webview); webView=(WebView)findViewById(R.id.mywebview); /*Stringurl="http://www.google.com"; webView.loadUrl(url);*/ Stringhtml=""; html+="<html>"; html+="<body>"; html+="<ahref=http://www.google.com>GoogleHome</a>"; html+="</body>"; html+="</html>"; webView.loadData(html,"text/html","utf-8"); } } test_webview.xml <?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <WebView android:id="@+id/mywebview" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout> 本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1079312

优秀的个人博客,低调大师

Android开发之OkHttp3.4.x

HTTP是现代应用程序访问网络的一种方式。网络中很多请求就是使用的http方式,来访问网络的。 Android从4.4开始,HttpUrlConnection开始使用okhttp作为底层实现。实现原理如下图: 这篇博客简单说一下okhttp的使用。文字部分没有讲清楚的,可以查看代码里面的注释。首先看一下okHttp怎么工作的。 首先我们看看一个okhttp完整的网络访问,都涉及到了那几个类(这里先说核心类)。 1.OkHttpClient: Call类的工厂,Call是用来发送网络请求和接收服务器响应的类。这个类实例可以设置拦截器,缓存大小,缓存目录,连接池等信息。 2.Request:是用来创建http请求,这个请求里面可以设置请求头信息,网络访问地址,请求方式(GET,POST,DELETE,PUT)等。 3.Call:一个接口,一个准备执行的请求。 具体代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 /** *首先构建OkHttpClient,<br/> *1.方法:直接使用new关键字创建 *2.方法:使用构造着模式,OkHttpClient.Builder.build方法构造。 *这个类是用来配置和创建HTTP连接。在大多数的程序中,这个类可以封装成一个单利模式 *来进行程序网络访问的统一管理。 *设置共享的响应缓存、线程池、连接复用 *(要设置这些东西,请使用官方提供的方法,OkHttpClient.Builder来设置缓存目录、缓存大小, *配置连接池, *配置拦截器, *) *然后构建Request请求对象<br/> *request对象只能使用Request.Builder.build来创建对象。 *最后Call,使用httpClient.newCall(request)来生成一个执行对象。 *用call对象,调用execute方法,执行网络请求 **/ Filefile= new File(Environment.getDataDirectory().getAbsolutePath()+File.pathSeparator+ "http_cache" ); final Cachecache= new Cache(file, 20000 ); //最大的闲置连接数量, ConnectionPoolpool= new ConnectionPool( 10 , 5 ,TimeUnit.SECONDS); //call的工厂类,Call是用来发送请求和接收响应的类 OkHttpClienthttpClient= new OkHttpClient.Builder().addInterceptor( new Interceptor(){ @Override public Responseintercept(Chainchain) throws IOException{ //请求时的参数 Responseresponse=chain.proceed(chain.request()); okhttp3.MediaTypemediaType=response.body().contentType(); //响应体 Stringcontent=response.body().string(); return response.newBuilder() .body(okhttp3.ResponseBody.create(mediaType,content)) .build(); } //这只连接池,缓存 }).connectionPool(pool).cache(cache).build(); //这里面来设置网络访问的头信息,以及访问的网络地址,这里默认使用get方式请求 Requestrequest= new Request.Builder().url( "https://www.baidu.com" ).build(); Callcall=httpClient.newCall(request); call.enqueue( new Callback(){ @Override public void onFailure(Callcall,IOExceptione){ Log.d( "--MainActivity--" , "onFailure:---网络访问失败" ); } @Override public void onResponse(Callcall,Responseresponse) throws IOException{ //这个方法在网络访问成功之后回执行。response响应体,实例里封装了服务器返回的数据。 //最常用的就是body(),服务器返回的数据(ResponseBody)。这个ResponseBody里面是服务器具体返回的数据 //如果是返回的字符串则用string()方法。如果是流,则byteStream(),字节数组bytes(). Log.d( "--MainActivity--" , "onResponse:" +response.body().string()); } }); 这样一个完整的网络访问就完成了。 使用到得权限: <uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 注:okhttp源码:https://github.com/square/okhttp 本文转自 墨宇hz 51CTO博客,原文链接:http://blog.51cto.com/zzhhz/1879372

优秀的个人博客,低调大师

hadoop mapreduce开发实践文件合并(join)

有两份不同的文件,他们有相同的键,把他们合并成一个文件; 1、文件内容 合并前的文件a.txt和b.txt $ head a.txt b.txt ==> a.txt <== aaa1 hdfs aaa2 hdfs aaa3 hdfs aaa4 hdfs aaa5 hdfs aaa6 hdfs aaa7 hdfs aaa8 hdfs aaa9 hdfs aaa10 hdfs ==> b.txt <== aaa1 mapreduce aaa2 mapreduce aaa3 mapreduce aaa4 mapreduce aaa5 mapreduce aaa6 mapreduce aaa7 mapreduce aaa8 mapreduce aaa9 mapreduce aaa10 mapreduce 2、思路 1)、首先分别对a.txt和b.txt做一个map标签处理(用于区分a.txt和b.txt上的数据); 2)、mapjoin用于输出做过标签处理的a.txt和b.txt; 3)、用一个reducejoin的程序做类似wordcount处理,相同的key放在一起,把a.txt和b.txt上的value放在key后面输出; 3、实现 3.1、创建目录和上传数据 $ hadoop fs -mkdir /input/join $ hadoop fs -mkdir /output/join/ $ hadoop fs -put a.txt b.txt /input/join 3.2、 mapperA程序 #!/usr/bin/env python # -*- conding:utf-8 -*- import sys def mapper(): for line in sys.stdin: wordline = line.strip().split() wordkey = wordline[0] wordvalue = wordline[1] #print wordline print "%s\ta\t%s" % (wordkey, wordvalue) if __name__ == "__main__": mapper() 3.3、mapperB程序 #!/usr/bin/env python # -*- conding:utf-8 -*- import sys def mapper(): for line in sys.stdin: wordline = line.strip().split() wordkey = wordline[0] wordvalue = wordline[1] print "%s\tb\t%s" % (wordkey, wordvalue) if __name__ == "__main__": mapper() 3.4、mapperjoin程序 #!/usr/bin/env python # -*- conding:utf-8 -*- import sys def mapper(): for line in sys.stdin: print line.strip() if __name__ == "__main__": mapper() 3.5、reducerjoin程序 #!/usr/bin/env python # -*- conding:utf-8 -*- import sys def reducer(): valueA = '' for line in sys.stdin: wordkey, flag, wordvalue = line.strip().split('\t') if flag == 'a': valueA = wordvalue elif flag == 'b': valueB = wordvalue print "%s\t%s\t%s" % (wordkey,valueA,valueB) valueA = '' if __name__ == "__main__": reducer() 3.6、run_streaming程序 #!/bin/bash HADOOP_CMD="/home/hadoop/app/hadoop/hadoop-2.6.0-cdh5.13.0/bin/hadoop" STREAM_JAR_PATH="/home/hadoop/app/hadoop/hadoop-2.6.0-cdh5.13.0/share/hadoop/tools/lib/hadoop-streaming-2.6.0-cdh5.13.0.jar" INPUT_FILE_PATH_A="/input/join/a.txt" INPUT_FILE_PATH_B="/input/join/b.txt" OUTPUT_FILE_PATH_A="/output/join/a" OUTPUT_FILE_PATH_B="/output/join/b" OUTPUT_FILE_JOIN_PATH="/output/join/abjoin" $HADOOP_CMD fs -rmr -skipTrash $OUTPUT_FILE_PATH_A $HADOOP_CMD fs -rmr -skipTrash $OUTPUT_FILE_PATH_B $HADOOP_CMD fs -rmr -skipTrash $OUTPUT_FILE_JOIN_PATH # step1: map a $HADOOP_CMD jar $STREAM_JAR_PATH \ -input $INPUT_FILE_PATH_A \ -output $OUTPUT_FILE_PATH_A \ -jobconf "mapred.job.name=joinfinemapA" \ -mapper "python mapperA.py" \ -file "./mapperA.py" # step2: map b $HADOOP_CMD jar $STREAM_JAR_PATH \ -input $INPUT_FILE_PATH_B \ -output $OUTPUT_FILE_PATH_B \ -jobconf "mapred.job.name=joinfinemapB" \ -mapper "python mapperB.py" \ -file "./mapperB.py" # step3: join $HADOOP_CMD jar $STREAM_JAR_PATH \ -input $OUTPUT_FILE_PATH_A,$OUTPUT_FILE_PATH_B \ -output $OUTPUT_FILE_JOIN_PATH \ -mapper "python mapperjoin.py" \ -reducer "python reducerjoin.py" \ -jobconf "mapred.job.name=joinfinemapAB" \ -jobconf "stream.num.map.output.key.fields=2" \ -jobconf "num.key.fields.for.partition=1" \ -file "./reducerjoin.py" \ -file "./mapperjoin.py" 3.7、执行程序 $ ./run_streamingab.sh ...中间省略... 18/02/05 10:43:13 INFO streaming.StreamJob: Output directory: /output/join/a ...中间省略... 18/02/05 10:43:42 INFO streaming.StreamJob: Output directory: /output/join/b ...中间省略... 18/02/05 10:44:12 INFO streaming.StreamJob: Output directory: /output/join/abjoin 3.8、查看结果 $ hadoop fs -ls /output/join/abjoin Found 2 items -rw-r--r-- 1 hadoop supergroup 0 2018-02-05 10:44 /output/join/abjoin/_SUCCESS -rw-r--r-- 1 hadoop supergroup 6276 2018-02-05 10:44 /output/join/abjoin/part-00000 $ hadoop fs -text /output/join/abjoin/part-00000|head aaa1 hdfs mapreduce aaa10 hdfs mapreduce aaa100 hdfs mapreduce aaa11 hdfs mapreduce aaa12 hdfs mapreduce aaa13 hdfs mapreduce aaa14 hdfs mapreduce aaa15 hdfs mapreduce aaa16 hdfs mapreduce aaa17 hdfs mapreduce 4、hadoop streaming 语法参考 http://blog.51cto.com/balich/2065419 本文转自 巴利奇 51CTO博客,原文链接:http://blog.51cto.com/balich/2068884

优秀的个人博客,低调大师

iOS开发 ARC下dealloc的使用

在MRC时代,我们需要在 dealloc中做很多,比如释放对象,等等; 如今我们已经进入ARC时代,对于普通对象的释放,系统已经帮我们做好了; 那是否可以高枕无忧了呢?在ARC下我们应该做什么? 观点: ARC下,系统可以帮我们释放该对象,及其包含的对象; 但是却无法释放不属于该对象的一些东西,如: 1.通知的观察者,或KVO的观察者 由于通知中心是系统的一个单例,你在注册通知的观察者时,实际上是在通知中心注册的, 这时,即使ARC下系统帮我们释放了对象,但是在通知中心的观察还是没有移除,那么当有 该通知时,依然会尝试调用该对象的接受通知的方法,这可能会导致一些问题. 这一点有点像,你晚上六点下班了...但是却没有刷卡..., 2.对象强委托/引用的解除(例如XMPPMannerger的delegateQueue) 对于其他的对象来把你当做委托 delegate时,并且是 强引用时,即时你自身被释放,但是引用你的对象依然还在, 这时需要在引用你的对象移除该delegate 3.做一些其他的注销之类的操作(关闭程序运行期间没有关闭的资源) 一个对象,如一个ViewController在销毁之前有可能需要和server打交道; 这时我们也可以在dealloc中写 关于dealloc的底层实现,可以参照objc运行时代码 示例,ARC下我们应该做的: [html]view plaincopy -(void)dealloc { [[NSNotificationCenterdefaultCenter]removeObserver:self];//移除通知观察者 [[XMPPManagersharedManager]removeFromDelegateQueue:self];//移除委托引用 [[MyClassshareInstance]doSomething]//其他操作 } ARC下我们没必要做的 [html]view plaincopy -(void)dealloc { _name=nil; [_timeinvalid]; } [html]view plaincopy 总结:dealloc在ARC下的作用就是释放系统无法释放的该对象占用的资源,或者其他对象对该对象的引用. 原文出自:http://blog.csdn.net/yangbingbinga/ 本文转自ljianbing51CTO博客,原文链接:http://blog.51cto.com/ljianbing/1871811,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册