- 相關(guān)推薦
使用Android實現(xiàn)接口實信息在留言板顯示辦法
下面通過圖文并茂的方式給大家分享下如何使用Android實現(xiàn)接口實信息在留言板顯示。
看到標(biāo)題,顧名思義,我今天只是和大家講一下如何實現(xiàn)接口信息的顯示,不包括添加信息。
接口幫助文檔:http://api.wzhospital.cn/msg/help
根據(jù)查看接口文檔,我們可以知道接口內(nèi)部的一些信息結(jié)構(gòu)。
當(dāng)然,想要查看具體的信息,是通過此鏈接:http://api.wzhospital.cn/MSG/api/Message/GetList
獲取以下信息,來驗證顯示的正確性。
我的第一個默認(rèn)留言2015-07-30 08:29:19林豪22女林志玲我的第二個默認(rèn)留言2015-07-30 08:31:19林志玲18女劉德華我的第三個默認(rèn)留言我的第三個默認(rèn)留言我的第三個默認(rèn)留言我的第三個默認(rèn)留言我的第三個默認(rèn)留言我的第三個默認(rèn)留言我的第三個默認(rèn)留言我的第三個默認(rèn)留言我的第三個默認(rèn)留言我的第三個默認(rèn)留言我的第三個默認(rèn)留言2015-07-30 08:33:19林豪22人妖林志玲dd2015-07-30 16:35:57h0nnmmcontent2015-07-30 16:37:49me18maleyou122015-07-30 16:52:42sk0lekdcontent2015-07-30 17:05:32me0youedddd
首先,我先給大家看一下界面效果圖(排版難看,大家諒解)。
第一步:先說一下,整個頁面是布局。
這個頁面由兩部分組成,其一:activity_main.xml中,只包含一個listView.其二:重寫了一個list_message.xml.
activity_main.xml list_message.xml
關(guān)于為什么重寫一個.xml文件呢,這是因為listview本身比較復(fù)雜,重寫一個便于引用顯示。
第二步:根據(jù)接口文檔,建立實體類。
單擊 GET api/Message/GetList 將獲得接口信息,由于我采用的是json的格式,我只截取這一段代碼。
根據(jù)信息分析,我創(chuàng)建了一個message.java的實體類。
package com.example.message.model;import android.R.string;public class Message { private String content; private String creatime; private String messager; private String messagerAge; private String messagerSex; private String reciver; public String getContent() { return content; } public void setContent(String content){ this.content=content; } public String getCreatime() { return creatime; } public void setCreatime(String creatime) { this.creatime=creatime; } public String getMessager() { return messager; } public void setMessager(String messager) { this.messager=messager; } public String getMessagerAge() { return messagerAge; } public void setMessagerAge(String messagerAge) { this.messagerAge=messagerAge; } public String getMessagerSex() { return messagerSex; } public void setMessagerSex(String messagerSex) { this.messagerSex=messagerSex; } public String getReceiver() { return reciver; } public void setReceiver(String reciver) { this.reciver=reciver; } public String tostring() { return "content:"+content+",creatime:"+creatime+",Messager:"+messager+",MessagerAge:"+messagerAge+",MessagerSex:"+messagerSex+",Reciver:"+reciver; }}
第三步:我們需要做的是如何獲取接口的數(shù)據(jù),并且去解析(我將其寫于MainActivity.java中)它,那么我們需要新建一個新類,這個我取名為HttpData.java。它的作用就是獲取接口中的內(nèi)容。代碼如下:
package com.example.message;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.params.HttpParams;public class HttpData { private HttpClient client;//定義HTTP一個客戶端 private HttpResponse reponse;//定義一個HTTP響應(yīng) private HttpEntity entity;//定義一個HTTP實體 private InputStream in;//定義一個輸入流 private BufferedReader reader;//定義一個字符流; private StringBuffer data = new StringBuffer("");//定義一個空的字符串緩沖; private String url = "http://api.wzhospital.cn/MSG/api/Message/GetList"; //private String url1="http://api.wzhospital.cn/MSG/api/Message/Add"; private HttpGet get;//GET:請求的數(shù)據(jù)隨HTTP請求頭發(fā)過去 public StringBuffer getData(){//此方法獲取接口的文本內(nèi)容,并以字符流的形式return client = new DefaultHttpClient(); get = new HttpGet(url);//url定向 try { HttpParams params = new HttpParams() { public HttpParams setParameter(String arg0, Object arg1) { // TODO Auto-generated method stub return null; } public HttpParams setLongParameter(String arg0, long arg1) { // TODO Auto-generated method stub return null; } public HttpParams setIntParameter(String arg0, int arg1) { // TODO Auto-generated method stub return null; } public HttpParams setDoubleParameter(String arg0, double arg1) { // TODO Auto-generated method stub return null; } public HttpParams setBooleanParameter(String arg0, boolean arg1) { // TODO Auto-generated method stub return null; } public boolean removeParameter(String arg0) { // TODO Auto-generated method stub return false; } public boolean isParameterTrue(String arg0) { // TODO Auto-generated method stub return false; } public boolean isParameterFalse(String arg0) { // TODO Auto-generated method stub return false; } public Object getParameter(String arg0) { // TODO Auto-generated method stub return null; } public long getLongParameter(String arg0, long arg1) { // TODO Auto-generated method stub return 0; } public int getIntParameter(String arg0, int arg1) { // TODO Auto-generated method stub return 0; } public double getDoubleParameter(String arg0, double arg1) { // TODO Auto-generated method stub return 0; } public boolean getBooleanParameter(String arg0, boolean arg1) { // TODO Auto-generated method stub return false; } public HttpParams copy() { // TODO Auto-generated method stub return null; } }; reponse = client.execute(get);//執(zhí)行客戶端的get操作 entity = reponse.getEntity();//獲取響應(yīng)中是實例 in = entity.getContent();//獲取實例中的文本內(nèi)容 reader = new BufferedReader(new InputStreamReader(in));//讀入字符流 String line = ""; while( (line = reader.readLine()) != null ){ data.append(line); } return data; } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return data; }}
第四步:封裝數(shù)據(jù)集合(listview),通過視圖繪制,此處采用的是數(shù)據(jù)適配器繪制。
代碼如下:
package com.example.message;import java.util.List;import java.util.zip.Inflater;import com.example.message.model.Message;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.RelativeLayout;import android.widget.TextView;public class DataAdapter extends BaseAdapter{ private Listmessages; private Context context; private TextView v_content; private TextView v_time; private TextView v_messger; private TextView v_messgerAge; private TextView v_messgerSex; private TextView v_receiver; public DataAdapter(Listmessages, Context context){ this.messages = messages; this.context = context; } public int getCount() { return messages.size(); } public Object getItem(int arg0) { return messages.get(arg0); } public long getItemId(int arg0) { // TODO Auto-generated method stub return arg0; } public View getView(int arg0, View arg1, ViewGroup arg2) { RelativeLayout layout = (RelativeLayout)LayoutInflater.from(context).inflate(R.layout.list_message, null); Message msg = (Message)getItem(arg0); v_content = (TextView)layout.findViewById(R.id.Content); v_time = (TextView)layout.findViewById(R.id.CreateTime); v_messger = (TextView)layout.findViewById(R.id.Meassger); v_receiver = (TextView)layout.findViewById(R.id.Receiver); v_messgerAge=(TextView)layout.findViewById(R.id.MessagerAge); v_messgerSex=(TextView)layout.findViewById(R.id.MessagerSex); v_content.setText(msg.getContent()); v_time.setText(msg.getCreatime()); v_messger.setText(msg.getMessager()); v_receiver.setText(msg.getReceiver()); v_messgerAge.setText(msg.getMessagerAge()); v_messgerSex.setText(msg.getMessagerSex()); return layout; }}
第五步:我們來看一看MainActivity.java是如何調(diào)用方法獲取數(shù)據(jù),并解析的。此處額外新開了一個子線程,進行操作。代碼如下:
package com.example.message;import android.os.Bundle;import android.os.Handler;import android.app.Activity;import android.view.Menu;import java.io.FileOutputStream; import java.io.InputStream; import java.util.ArrayList;import java.util.List; import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ListView; import com.example.message.model.Message; public class MainActivity extends Activity { private Listmessages = new ArrayList(); private DataAdapter myAdapter; //定義一個自己的適配器,用于繪制 private Handler handler;//定義一個Handler,Handler 負(fù)責(zé)在必要時進行信息格式化 private ListView listView; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView)findViewById(R.id.listView); handler = new Handler() { public void handleMessage(android.os.Message msg) { if(msg.what == 0x123){ System.out.println("接收數(shù)據(jù)"); for(Message g:messages){ System.out.println(g.getContent()); } myAdapter = new DataAdapter(messages, MainActivity.this); listView.setAdapter(myAdapter); } }; }; new Thread(new Runnable() { public void run() { // TODO Auto-generated method stub HttpData data = new HttpData(); StringBuffer str = data.getData(); System.out.println(str.toString()); Log.v("msg", str.toString()); try { JSONObject object = new JSONObject(str.toString());//使用json ,解析數(shù)據(jù) JSONArray msg = (JSONArray)object.get("Data"); for(int i=0; i<msg.length(); i++){ JSONObject o=msg.getJSONObject(i); Message message=new Message(); message.setContent(o.getString("Content")); message.setCreatime(o.getString("CreateTime")); message.setMessager(o.getString("Messager")); message.setMessagerAge(o.getString("MessagerAge")); message.setMessagerSex(o.getString("MessagerSex")); message.setReceiver(o.getString("Receiver")); messages.add(message); } android.os.Message handlerMsg=new android.os.Message(); handlerMsg.what=0x123; handler.sendMessage(handlerMsg); System.out.println("發(fā)送數(shù)據(jù)"); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }).start(); }}
以上,就是實現(xiàn)接口留言板的顯示。有以下幾點,是在我寫的時候遇到的問題。
1、個別電腦的虛擬機和電腦設(shè)置的問題,程序可能跑不起來,建議使用安卓真機。
2、由于我們的程序存在網(wǎng)絡(luò)訪問,需要在網(wǎng)絡(luò)訪問配置文件當(dāng)中加寫權(quán)限設(shè)置。
3、有關(guān)網(wǎng)絡(luò)方面的東西,都必須寫在子線程上,這就是為什么我重新開了一個新的線程。
4、控件的更新必須在主線程上,否則將出錯。
5、當(dāng)我們使用適配器繪制時,其中g(shù)etCount這個方法必須要寫。
以上就是本文的全部內(nèi)容,希望大家喜歡。
【使用Android實現(xiàn)接口實信息在留言板顯示辦法】相關(guān)文章:
留言板的句子11-15
留言板留言11-05
留言板的留言10-11
留言板寄語03-24
留言板語錄12-10
經(jīng)典留言板留言11-29
經(jīng)典留言板留言12-27
情侶留言板留言10-01
愛情留言板留言10-01