zoukankan      html  css  js  c++  java
  • ANDROID_MARS学习笔记_S04_008_用Listview、自定义adapter显示返回的微博数据

    一、简介

    运行结果

    二、代码
    1.xml
    (1)activity_main.xml

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:orientation="vertical"
     4     android:layout_width="fill_parent"
     5     android:layout_height="fill_parent"
     6     >
     7         <Button android:id="@+id/btn_launch_oauth"
     8                 android:layout_width="fill_parent"
     9                 android:layout_height="wrap_content"
    10                 android:text="Launch OAuth Flow"/>
    11 
    12         <Button 
    13                 android:id="@+id/btn_sendWeiBo"
    14                 android:layout_width="fill_parent"
    15                 android:layout_height="wrap_content"
    16                 android:text="发送一条微博消息"
    17         />
    18         <Button 
    19                 android:id="@+id/btn_getWeiBoList"
    20                 android:layout_width="fill_parent"
    21                 android:layout_height="wrap_content"
    22                 android:text="得到主页时间线数据"
    23         />
    24 </LinearLayout>

    (2)AndroidManifest.xml

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     3       package="org.marsdroid.oauth05"
     4       android:versionCode="1"
     5       android:versionName="1.0">
     6     <uses-sdk android:minSdkVersion="10" />
     7 
     8     <uses-permission android:name="android.permission.INTERNET" />
     9     <application android:icon="@drawable/icon" android:label="@string/app_name">
    10         <activity android:name=".MainActivity" android:label="@string/app_name">
    11             <intent-filter>
    12                 <action android:name="android.intent.action.MAIN" />
    13                 <category android:name="android.intent.category.LAUNCHER" />
    14             </intent-filter>
    15         </activity>
    16         <activity android:name=".PrepareRequestTokenActivity" android:launchMode="singleTask">
    17             <intent-filter>
    18                 <action android:name="android.intent.action.VIEW" />
    19                 <category android:name="android.intent.category.DEFAULT" />
    20                 <category android:name="android.intent.category.BROWSABLE" />
    21                 <data android:scheme="x-oauthflow" android:host="callback" />
    22             </intent-filter>
    23         </activity>
    24         <activity android:name=".BroadcastTimelineActivity"/>
    25     </application>
    26 </manifest>

    (3)list.xml

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:orientation="vertical"
     4     android:layout_width="fill_parent"
     5     android:layout_height="fill_parent"
     6     >
     7 <ListView 
     8     android:id="@android:id/list"
     9     android:layout_width="fill_parent"
    10     android:layout_height="wrap_content"
    11 ></ListView>
    12 </LinearLayout>

    (4)item.xml

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:orientation="vertical"
     4     android:layout_width="fill_parent"
     5     android:layout_height="fill_parent"
     6     >
     7     <TextView 
     8         android:id="@+id/nameId"
     9         android:layout_width="fill_parent"    
    10         android:layout_height="wrap_content"
    11     />
    12     <TextView
    13         android:id="@+id/textId"
    14         android:layout_height="wrap_content"
    15         android:layout_width="fill_parent"
    16         />
    17 </LinearLayout>

    2.java
    (1)MainActivity.java

     1 import java.util.ArrayList;
     2 import java.util.HashMap;
     3 import java.util.List;
     4 import java.util.Map;
     5 
     6 import org.marsdroid.model.WeiBoList;
     7 
     8 import oauth.signpost.OAuth;
     9 import android.app.Activity;
    10 import android.content.Intent;
    11 import android.content.SharedPreferences;
    12 import android.os.Bundle;
    13 import android.preference.PreferenceManager;
    14 import android.view.View;
    15 import android.view.View.OnClickListener;
    16 import android.widget.Button;
    17 
    18 import com.google.gson.Gson;
    19 
    20 public class MainActivity extends Activity {
    21     
    22     final String TAG = getClass().getName();
    23     private SharedPreferences prefs;
    24     /** Called when the activity is first created. */
    25     @Override
    26     public void onCreate(Bundle savedInstanceState) {
    27         super.onCreate(savedInstanceState);
    28         setContentView(R.layout.main);
    29         
    30         prefs = PreferenceManager.getDefaultSharedPreferences(this);
    31         Button launchOauth = (Button) findViewById(R.id.btn_launch_oauth);
    32         Button sendWeiBoButton = (Button)findViewById(R.id.btn_sendWeiBo);
    33         Button getWeiBoListButton = (Button)findViewById(R.id.btn_getWeiBoList);
    34         
    35         sendWeiBoButton.setOnClickListener(new OnClickListener() {
    36             
    37             @Override
    38             public void onClick(View v) {
    39                 //收集需要向腾讯微博服务器端发送的数据
    40                 Map<String,String> map = new HashMap<String,String>();
    41                 map.put("content", "test");
    42                 map.put("clientip", "127.0.0.1");
    43                 map.put("format", "json");
    44                 //URL编码
    45                 List<String> decodeNames = new ArrayList<String>();
    46                 decodeNames.add("oauth_signature");
    47                 //生成WeiboClient对象需要四个参数:Consumer_key,Consumer_key_secret,Oauth_tokent,OAuth_token_secret
    48                 String OAuth_token = prefs.getString(OAuth.OAUTH_TOKEN, "");
    49                 String OAuth_token_secret = prefs.getString(OAuth.OAUTH_TOKEN_SECRET, "");
    50                 WeiBoClient weiBoClient = new WeiBoClient(Constants.CONSUMER_KEY, Constants.CONSUMER_SECRET, OAuth_token, OAuth_token_secret);
    51                 weiBoClient.doPost("http://open.t.qq.com/api/t/add",map,decodeNames);
    52             }
    53         });
    54         
    55         getWeiBoListButton.setOnClickListener(new OnClickListener(){
    56 
    57             @Override
    58             public void onClick(View v) {
    59                 
    60                 Intent intent = new Intent(MainActivity.this, BroadcastTimelineActivity.class);
    61                 startActivity(intent);
    62             }
    63             
    64         });
    65         
    66         launchOauth.setOnClickListener(new OnClickListener() {
    67             public void onClick(View v) {
    68                 startActivity(new Intent().setClass(v.getContext(), PrepareRequestTokenActivity.class));
    69             }
    70         });
    71     }
    72 
    73 }

    (2)BroadcastTimelineActivity.java

     1 import java.util.HashMap;
     2 import java.util.Map;
     3 
     4 import oauth.signpost.OAuth;
     5 
     6 import org.marsdroid.model.WeiBoList;
     7 
     8 import android.app.ListActivity;
     9 import android.content.SharedPreferences;
    10 import android.os.Bundle;
    11 import android.preference.PreferenceManager;
    12 import android.widget.ListView;
    13 
    14 import com.google.gson.Gson;
    15 
    16 public class BroadcastTimelineActivity extends ListActivity{
    17 
    18     private SharedPreferences prefs;
    19     @Override
    20     protected void onCreate(Bundle savedInstanceState) {
    21         super.onCreate(savedInstanceState);
    22         setContentView(R.layout.list);
    23         
    24         prefs = PreferenceManager.getDefaultSharedPreferences(this);
    25         Map<String,String> keyValues = new HashMap<String,String>();
    26         keyValues.put("format", "json");
    27         keyValues.put("pageflag", "0");
    28         keyValues.put("pagetime", "0");
    29         keyValues.put("reqnum", "20");
    30         String OAuth_token = prefs.getString(OAuth.OAUTH_TOKEN, "");
    31         String OAuth_token_secret = prefs.getString(OAuth.OAUTH_TOKEN_SECRET, "");
    32         WeiBoClient weiBoClient = new WeiBoClient(Constants.CONSUMER_KEY, Constants.CONSUMER_SECRET, OAuth_token, OAuth_token_secret);
    33         String result = weiBoClient.doGet(Constants.WeiBoApi.HOME_TIMELINE, keyValues);
    34         Gson gson = new Gson();
    35         WeiBoList weiBoList = gson.fromJson(result, WeiBoList.class);
    36         WeiBoAdapter weiBoAdapter = new WeiBoAdapter(weiBoList, this);
    37         ListView listView = getListView();
    38         listView.setAdapter(weiBoAdapter);
    39     }
    40 
    41 }

    (3)WeiBoAdapter.java

     1 import java.util.HashMap;
     2 import java.util.List;
     3 import java.util.Map;
     4 
     5 import org.marsdroid.model.WeiBoData;
     6 import org.marsdroid.model.WeiBoList;
     7 
     8 import android.content.Context;
     9 import android.view.LayoutInflater;
    10 import android.view.View;
    11 import android.view.ViewGroup;
    12 import android.widget.BaseAdapter;
    13 import android.widget.TextView;
    14 
    15 public class WeiBoAdapter extends BaseAdapter{
    16     //WeiBoList对象当中的数据,代表了服务器端所返回的所有数据
    17     private WeiBoList weiBoList;
    18     //info当中存储了一次所取回的所有微博数据
    19     private List<WeiBoData> info = null;
    20     //View对象的缓存,不用每次要数据都new 一个view对象
    21     private Map<Integer,View> rowViews = new HashMap<Integer,View>();
    22     private Context context = null;
    23     
    24     public WeiBoAdapter(WeiBoList weiBoList,Context context){
    25         this.weiBoList = weiBoList;
    26         info = weiBoList.getData().getInfo();
    27         this.context = context;
    28     }
    29     //返回当中的Adapter当中,共包含多少个item
    30     @Override
    31     public int getCount() {
    32         // TODO Auto-generated method stub
    33         return info.size();
    34     }
    35     //根据位置,得到相应的item对象
    36     @Override
    37     public Object getItem(int position) {
    38         // TODO Auto-generated method stub
    39         return info.get(position);
    40     }
    41     //根据位置,得到相应的item对象的ID
    42     @Override
    43     public long getItemId(int position) {
    44         // 这例子对id没什么要求
    45         return position;
    46     }
    47 
    48     //ListView通过调用getView()方法,得到相应的View对象,并将其显示在Activity当中
    49     @Override
    50     public View getView(int position, View convertView, ViewGroup parent) {
    51         //convertView可以提高view的性能,涉及到数据结构的问题
    52         View rowView = rowViews.get(position);
    53         if(rowView == null){
    54             //生成一个LayoutInflater对象,填充器
    55             LayoutInflater layoutInflater = LayoutInflater.from(context);
    56             //调用LayoutInflater对象的inflate方法,可以生成一个View对象,null是父控件
    57             rowView = layoutInflater.inflate(R.layout.item, null);
    58             //得到该View当中的两个控件
    59             TextView nameView = (TextView)rowView.findViewById(R.id.nameId);
    60             TextView textView = (TextView)rowView.findViewById(R.id.textId);
    61             //调用getItem()方法,得到对应位置的weiBoData对象
    62             WeiBoData weiBoData = (WeiBoData)getItem(position);
    63             nameView.setText(weiBoData.getName());
    64             textView.setText(weiBoData.getText());
    65             rowViews.put(position, rowView);//缓存取过的数据
    66         }
    67         return rowView;
    68     }
    69 
    70 }
  • 相关阅读:
    为EasySharding.EFCore提供Dapper相关查询扩展
    古典音乐作品编号标记解读
    乐理基础
    音乐指挥家
    2021年,年终总结
    有关Android launchMode 在APP(task)之间的应用——扔物线视频
    Springboot Jpa 有关多数据源的问题
    Python运算符及优先级
    高中信息技术(Python)重难点4:切片
    高中信息技术(Python)必修1 数据与计算 出现的模块和函数
  • 原文地址:https://www.cnblogs.com/shamgod/p/5206860.html
Copyright © 2011-2022 走看看