MyAdapter.java
上传用户:vip_99
上传日期:2021-03-27
资源大小:61159k
文件大小:6k
源码类别:

android开发

开发平台:

Java

  1. package irdc.ex09_02;
  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.InputStreamReader;
  6. import java.io.UnsupportedEncodingException;
  7. import java.net.HttpURLConnection;
  8. import java.net.URL;
  9. import java.net.URLEncoder;
  10. import java.util.ArrayList;
  11. import android.content.Context;
  12. import android.view.View;
  13. import android.view.ViewGroup;
  14. import android.widget.BaseAdapter;
  15. import android.widget.Filter;
  16. import android.widget.Filterable;
  17. import android.widget.LinearLayout;
  18. import android.widget.TextView;
  19. public class MyAdapter extends BaseAdapter implements Filterable
  20. {
  21.   ArrayList<String> keyWordValue = new ArrayList<String>();
  22.   ArrayList<String> resultValue = new ArrayList<String>();
  23.   private Context mContext;
  24.   LinearLayout.LayoutParams param1;
  25.   public MyAdapter(Context context)
  26.   {
  27.     mContext = context;
  28.     param1 = new LinearLayout.LayoutParams(
  29.         LinearLayout.LayoutParams.WRAP_CONTENT,
  30.         LinearLayout.LayoutParams.WRAP_CONTENT);
  31.   }
  32.   @Override
  33.   public int getCount()
  34.   {
  35.     return keyWordValue.size();
  36.   }
  37.   @Override
  38.   public Object getItem(int position)
  39.   {
  40.     return keyWordValue.get(position);
  41.   }
  42.   @Override
  43.   public long getItemId(int position)
  44.   {
  45.     return position;
  46.   }
  47.   @Override
  48.   public View getView(int position, View view, ViewGroup viewGroup)
  49.   {
  50.     LinearLayout myLinearLayout = new LinearLayout(mContext);
  51.     myLinearLayout.setOrientation(LinearLayout.HORIZONTAL);
  52.     if (position >= keyWordValue.size())
  53.       return myLinearLayout;
  54.     /* 第一个TextView放关键字 */
  55.     TextView keyWordTextView = new TextView(this.mContext);
  56.     keyWordTextView.setTextColor(mContext.getResources().getColor(
  57.         R.drawable.blue));
  58.     keyWordTextView.setTextSize(18);
  59.     keyWordTextView.setWidth(180);
  60.     try
  61.     {
  62.       keyWordTextView
  63.           .setText(keyWordValue.get(position).toString());
  64.     } catch (java.lang.IndexOutOfBoundsException i)
  65.     {
  66.       keyWordTextView.setText("");
  67.     }
  68.     /* 第二个TextView放关键字结果数量 */
  69.     TextView resultTextView = new TextView(this.mContext);
  70.     resultTextView.setTextColor(mContext.getResources().getColor(
  71.         R.drawable.red));
  72.     resultTextView.setTextSize(18);
  73.     try
  74.     {
  75.       resultTextView.setText(resultValue.get(position).toString());
  76.     } catch (java.lang.IndexOutOfBoundsException i)
  77.     {
  78.       resultTextView.setText("");
  79.     }
  80.     myLinearLayout.addView(keyWordTextView, param1);
  81.     myLinearLayout.addView(resultTextView, param1);
  82.     return myLinearLayout;
  83.   }
  84.   @Override
  85.   public Filter getFilter()
  86.   {
  87.     // TODO Auto-generated method stub
  88.     Filter myFilter = new Filter()
  89.     {
  90.       @Override
  91.       protected FilterResults performFiltering(CharSequence text)
  92.       {
  93.         FilterResults fr = new FilterResults();
  94.         keyWordValue = new java.util.ArrayList<String>();
  95.         resultValue = new java.util.ArrayList<String>();
  96.         if (text == null || text.length() == 0)
  97.         {
  98.           fr.count = keyWordValue.size();
  99.           fr.values = keyWordValue;
  100.           return fr;
  101.         }
  102.         /* 输入关键字后调用google 关键字API */
  103.         changeResult(getGoogleAPI(text.toString()));
  104.         fr.count = keyWordValue.size();
  105.         fr.values = keyWordValue;
  106.         return fr;
  107.       }
  108.       @Override
  109.       protected void publishResults(CharSequence text,
  110.           FilterResults filterResults)
  111.       {
  112.         if (filterResults != null && filterResults.count > 0)
  113.           notifyDataSetChanged();
  114.         else
  115.           notifyDataSetInvalidated();
  116.       }
  117.     };
  118.     return myFilter;
  119.   }
  120.   /* 访问GoogleAPI取得返回的结果字符串 */
  121.   private String getGoogleAPI(String text)
  122.   {
  123.     String uri = "";
  124.     try
  125.     {
  126.       /* 输入的字要encode */
  127.       uri = "http://www.google.com/complete/"
  128.           + "search?hl=en&js=true&qu="
  129.           + URLEncoder.encode(text, "utf-8");
  130.     } catch (UnsupportedEncodingException e1)
  131.     {
  132.       // TODO Auto-generated catch block
  133.       e1.printStackTrace();
  134.     }
  135.     URL googleUrl = null;
  136.     HttpURLConnection conn = null;
  137.     InputStream is = null;
  138.     BufferedReader in = null;
  139.     String resultStr = "";
  140.     /* 取得连接 */
  141.     try
  142.     {
  143.       googleUrl = new URL(uri);
  144.       /* 打开连接 */
  145.       conn = (HttpURLConnection) googleUrl.openConnection();
  146.       int code = conn.getResponseCode();
  147.       /* 连接OK时 */
  148.       if (code == HttpURLConnection.HTTP_OK)
  149.       {
  150.         /* 取得返回的InputStream */
  151.         is = conn.getInputStream();
  152.         in = new BufferedReader(new InputStreamReader(is));
  153.         String inputLine;
  154.         /* 一行一行读取 */
  155.         while ((inputLine = in.readLine()) != null)
  156.         {
  157.           resultStr += inputLine;
  158.         }
  159.       }
  160.     } catch (IOException e)
  161.     {
  162.       // TODO Auto-generated catch block
  163.       e.printStackTrace();
  164.     } finally
  165.     {
  166.       try
  167.       {
  168.         if (is != null)
  169.           is.close();
  170.         if (conn != null)
  171.           conn.disconnect();
  172.       } catch (Exception e)
  173.       {
  174.       }
  175.     }
  176.     return resultStr;
  177.   }
  178.   /* 处理返回的字符串变成ArrayList */
  179.   private void changeResult(String text)
  180.   {
  181.     String resultStr = "";
  182.     String startSub = "new Array(2, ";
  183.     String endSub = "), new Array";
  184.     int start = text.indexOf(startSub);
  185.     int end = text.indexOf(endSub);
  186.     if (start != -1 && end != -1)
  187.     {
  188.       resultStr = text.substring(start + startSub.length(), end);
  189.       /* 去掉前后的" */
  190.       resultStr = resultStr.substring(1, resultStr.length() - 1);
  191.       /* 以 ", "来分隔字符串变成字符串数组 */
  192.       String total[] = resultStr.split("\", \"");
  193.       for (int i = 0; i < total.length / 2; i++)
  194.       {
  195.         keyWordValue.add(total[i * 2]);
  196.         /* 将results字符串去掉 */
  197.         resultValue
  198.             .add(total[i * 2 + 1].replaceAll(" results", ""));
  199.       }
  200.     }
  201.   }
  202. }