<span id="Label3"></p><p><p>In our Android development, we often encounter some callback functions, in which our most common callback is that when we listen to a component setting, it is actually relative to the set callback Function. For example:</p></p><pre class="prettyprint"><pre class="prettyprint"><code class=" hljs cs">Button btn = (Button)findViewById(R.id.btn);btn.setOnClickListener(<span class="hljs-keyword">new</span> Button.OnClickListener(){<span class="hljs-comment">//创建监听 </span> <span class="hljs-keyword">public</span><span class="hljs-keyword">void</span><span class="hljs-title">onClick</span>(View v) { <span class="hljs-string">"点击Button01"</span>; Ev1.setText(strTmp); } </code></pre></pre><p><p>first, Let's look at what is called a callback Function. Suppose we have two classes, A and b, where a needs to invoke the function in b, but B also needs to call the function C in a, then C is the callback function, so it appears that it is equivalent to implementing a two-way call.</p></p><p><p>When we were developing our android, we used some open source packages that were made by the open source community to get data on the Web or to download images, which used a lot of callback functions, and now we're going to take a look at how to define our own callback functions using an example of getting network Data.</p></p><p><p>The first thing to declare is that the callback function is implemented by the trial Interface. Let's take a step-by-step implementation of the callback Function.</p></p><p><p>1: define an interface that defines some of the callback functions that need to be used.</p></p><p><p><em>Name: Downinterface.java</em></p></p><pre class="prettyprint"><pre class="prettyprint"><code class=" hljs cs">package interfaces;<span class="hljs-keyword">public</span><span class="hljs-keyword">interface</span> DownInterface { <span class="hljs-comment">//需要用到的回调函数</span> <span class="hljs-keyword">public</span><span class="hljs-keyword">void</span><span class="hljs-title">onDownloadSuccess</span>(String result);}</code></pre></pre><p><p>2: Define tool class, invoke callback function</p></p><p><p>The tool class has the following properties:</p></p> <ol> <ol> <li>The object in the class that has just the interface defined</li> <li>class, the interface that you just defined as a parameter</li> <li>Call an interface function when you need to invoke an interface function</li> </ol> </ol><p><p>We implement a tool class here that implements the data obtained from the network and, when the data is obtained successfully, invokes the Ondownloadsuccess () function in the interface, passing the data to the object calling the Class.</p></p><p><p>Here we define the tool class:</p></p><p><p><em>Downloadeventnotifier. Java</em></p></p><pre class="prettyprint"><code class=" hljs java"><span class="hljs-keyword"><span class="hljs-keyword"></span> package</span>Interfaces<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>java.io.IOException;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>java.io.UnsupportedEncodingException;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>java.util.ArrayList;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>java.util.List;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>org.apache.http.HttpResponse;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>org.apache.http.client.ClientProtocolException;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>org.apache.http.client.entity.UrlEncodedFormEntity;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>org.apache.http.client.methods.HttpPost;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>org.apache.http.impl.client.DefaultHttpClient;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>org.apache.http.message.BasicNameValuePair;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>org.apache.http.util.EntityUtils;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>com.sdu.utils.StaticValue;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>android.os.Handler;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>android.os.Message;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>android.util.Log;<span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-class"><span class="hljs-class"> <span class="hljs-keyword">class</span> <span class="hljs-title">downloadeventnotifier</span> {</span></span> <span class="hljs-keyword"><span class="hljs-keyword">Private</span></span>Downinterface dif;<span class="hljs-comment"><span class="hljs-comment">after processing data receive is complete, call the interface function</span></span> <span class="hljs-keyword"><span class="hljs-keyword">Private</span></span>Handler Handler =<span class="hljs-keyword"><span class="hljs-keyword">New</span></span>Handler () {<span class="hljs-annotation"><span class="hljs-annotation">@Override</span></span> <span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-keyword"><span class="hljs-keyword">void</span></span> <span class="hljs-title"><span class="hljs-title">Handlemessage</span></span>(Message Msg) {<span class="hljs-comment"><span class="hljs-comment">//TODO auto-generated Method Stub</span></span> <span class="hljs-keyword"><span class="hljs-keyword">if</span></span>(msg.what = =<span class="hljs-number"><span class="hljs-number">0</span></span>) {string back = (string) msg.obj; Dif.ondownloadsuccess (back); } } };<span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-title"><span class="hljs-title">Downloadeventnotifier</span></span>(downinterface Dif) {<span class="hljs-keyword"><span class="hljs-keyword"></span> this</span>. dif = dif; }<span class="hljs-comment"><span class="hljs-comment">//start the Download</span></span> <span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-keyword"><span class="hljs-keyword">void</span></span> <span class="hljs-title"><span class="hljs-title">Start</span></span>(String req,string Url) {<span class="hljs-keyword"><span class="hljs-keyword">New</span></span>Thread (<span class="hljs-keyword"><span class="hljs-keyword">New</span></span>Dealthread (req, url)). Start (); } class Dealthread implements runnable{<span class="hljs-keyword"><span class="hljs-keyword">Private</span></span>String req;<span class="hljs-keyword"><span class="hljs-keyword">Private</span></span>String url;<span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-title"><span class="hljs-title">Dealthread</span></span>(String req,string Url) {<span class="hljs-keyword"><span class="hljs-keyword"></span> this</span>. req = req;<span class="hljs-keyword"><span class="hljs-keyword"></span> this</span>. url = url; }<span class="hljs-annotation"><span class="hljs-annotation">@Override</span></span> <span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-keyword"><span class="hljs-keyword">void</span></span> <span class="hljs-title"><span class="hljs-title">Run</span></span>() {<span class="hljs-comment"><span class="hljs-comment">//TODO auto-generated Method Stub</span></span>Deal (); }<span class="hljs-keyword"><span class="hljs-keyword">Private</span></span> <span class="hljs-keyword"><span class="hljs-keyword">void</span></span> <span class="hljs-title"><span class="hljs-title">deal</span></span>() {LOG.E (<span class="hljs-string"><span class="hljs-string">"req"</span></span>, req);<span class="hljs-comment"><span class="hljs-comment">//get Response Content</span></span>list<basicnamevaluepair> params =<span class="hljs-keyword"><span class="hljs-keyword">New</span></span>Arraylist<basicnamevaluepair> (); Params.add (<span class="hljs-keyword"><span class="hljs-keyword">New</span></span>Basicnamevaluepair (<span class="hljs-string"><span class="hljs-string">"REQUEST"</span></span>, req));<span class="hljs-keyword"><span class="hljs-keyword">Try</span></span>{<span class="hljs-comment"><span class="hljs-comment">//http://jiduoduo.duapp.com</span></span> <span class="hljs-comment"><span class="hljs-comment">//http://211.87.227.124/study.php</span></span>HttpPost Postmethod =<span class="hljs-keyword"><span class="hljs-keyword">New</span></span>HttpPost (staticvalue.url+url); Postmethod.setentity (<span class="hljs-keyword"><span class="hljs-keyword">New</span></span>Urlencodedformentity (params,<span class="hljs-string"><span class="hljs-string">"utf-8"</span></span>));<span class="hljs-comment"><span class="hljs-comment">//fill in the parameters into the post entity</span></span>LOG.E (<span class="hljs-string"><span class="hljs-string">"url"</span></span>, staticvalue.url+url);<span class="hljs-comment"><span class="hljs-comment">//get Response Content</span></span>HttpResponse response =<span class="hljs-keyword"><span class="hljs-keyword">New</span></span>Defaulthttpclient (). Execute (postmethod);<span class="hljs-comment"><span class="hljs-comment">//execute Post Method</span></span>String back = entityutils.tostring (response.getentity (),<span class="hljs-string"><span class="hljs-string">"utf-8"</span></span>); LOG.E (<span class="hljs-string"><span class="hljs-string">"result"</span></span>,<span class="hljs-string"><span class="hljs-string">"result ="</span></span>+ back);<span class="hljs-comment"><span class="hljs-comment">//get Response Content</span></span>Message msg = Message.obtain (); Msg.obj = back; Msg.what =<span class="hljs-number"><span class="hljs-number">0</span></span>; Handler.sendmessage (msg); }<span class="hljs-keyword"><span class="hljs-keyword">Catch</span></span>(unsupportedencodingexception E) {<span class="hljs-comment"><span class="hljs-comment">//TODO auto-generated Catch block</span></span>E.printstacktrace (); }<span class="hljs-keyword"><span class="hljs-keyword">Catch</span></span>(clientprotocolexception E) {<span class="hljs-comment"><span class="hljs-comment">//TODO auto-generated Catch block</span></span>E.printstacktrace (); }<span class="hljs-keyword"><span class="hljs-keyword">Catch</span></span>(ioexception E) {<span class="hljs-comment"><span class="hljs-comment">//TODO auto-generated Catch block</span></span>E.printstacktrace (); } } }}</code></pre><p><p>3: Use the tool class</p></p><p><p>Let's take a look at how to use the tool class, in class a, if you have a button, click the button, get the data on the network, and when the data in the network gets successful, print out the Data.</p></p><p><p>Let's take a look at the code of the Call:</p></p><pre class="prettyprint"><code class=" hljs java"><span class="hljs-keyword"><span class="hljs-keyword"></span> package</span>com.sdu.activities;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>Interfaces. downinterface;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>Interfaces. downloadeventnotifier;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>com.sdu.androidmarket.r;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>android.app.Activity;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>android.os.Bundle;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>android.view.View;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>android.widget.Button;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>android.widget.Toast;<span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-class"><span class="hljs-class"> <span class="hljs-keyword">class</span> <span class="hljs-title">testactivity</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Activity</span>{</span></span> <span class="hljs-keyword"><span class="hljs-keyword">Private</span></span>Button btn;<span class="hljs-keyword"><span class="hljs-keyword">Private</span></span>Downloadeventnotifier den;<span class="hljs-annotation"><span class="hljs-annotation">@Override</span></span> <span class="hljs-keyword"><span class="hljs-keyword">protected</span></span> <span class="hljs-keyword"><span class="hljs-keyword">void</span></span> <span class="hljs-title"><span class="hljs-title">onCreate</span></span>(Bundle Savedinstancestate) {BTN = (Button) Findviewbyid (r.id.button1); Btn.setonclicklistener (<span class="hljs-keyword"><span class="hljs-keyword">New</span></span>View.onclicklistener () {<span class="hljs-annotation"><span class="hljs-annotation">@Override</span></span> <span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-keyword"><span class="hljs-keyword">void</span></span> <span class="hljs-title"><span class="hljs-title">OnClick</span></span>(View V) {den =<span class="hljs-keyword"><span class="hljs-keyword">New</span></span>Downloadeventnotifier (<span class="hljs-keyword"><span class="hljs-keyword">New</span></span>Downinterface () {<span class="hljs-annotation"><span class="hljs-annotation">@Override</span></span> <span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-keyword"><span class="hljs-keyword">void</span></span> <span class="hljs-title"><span class="hljs-title">ondownloadsuccess</span></span>(String Result) {<span class="hljs-comment"><span class="hljs-comment">//TODO auto-generated Method Stub</span></span>Toast.maketext (getapplicationcontext (), result, toast.length_short). show (); } }); } });<span class="hljs-keyword"><span class="hljs-keyword">Super</span></span>. onCreate (savedinstancestate); }}</code></pre><p><p>see, Are you feeling familiar? We often use the download toolkit, which has onloading (), onsuccess (), onStop () and so on these functions are actually callback Functions. In fact, we can also use the callback function to define our own download tool class, Wait a few days I define a tool class like this, test it. You can try to define a callback function yourself.</p></p> <p style="font-size:12px;"><p style="font-size:12px;">Copyright Notice: This article for Bo Master original article, without Bo Master permission not Reproduced.</p></p> <p><p>Android callback function</p></p></span>
The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion;
products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the
content of the page makes you feel confusing, please write us an email, we will handle the problem
within 5 days after receiving your email.
If you find any instances of plagiarism from the community, please send an email to:
info-contact@alibabacloud.com
and provide relevant evidence. A staff member will contact you within 5 working days.
A Free Trial That Lets You Build Big!
Start building with 50+ products and up to 12 months usage for Elastic Compute Service