首页 > 技术文章 > android+myeclipse+mysql自定义控件下拉框的数据绑定

zhu520 2017-12-27 15:27 原文

原创作品,允许转载,转载时请务必声明作者信息和本声明。http://www.cnblogs.com/zhu520/p/8031936.html  

 本人小白,那个大神看到有问题可指出,谢谢。。。。

这个是接着之前的 android+myeclipse+mysql下拉框数据绑定 的服务器(后台)来做的,所以这里就只给 Android的代码,如果想要服务器的代码去 android+myeclipse+mysql下拉框数据绑定找就好了

 

一:Android studio

  •  1);先进行准备前工作先 在build.gradle四个地方要加入代码

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
        mavenCentral()//apllay   // add plugin
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
build.gradle

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

// 这个非常重要,会生成Dao的类
greendao { //add plugin
schemaVersion 2
//生成greedao的对象类的路径
设置DaoMaster,DaoSession,Dao包的路径,我不太喜欢它原来的路径,每次找都很麻烦,所以把它放在一个自己方便看的路径下来,你也可以不要下面这两句!
daoPackage 'zhu.com.sprnner_cbo.greendao'
targetGenDir 'src/main/java'//保存到java代码路径 ==》这句你可以不要
}

       

复制代码
如果没有这俩句,那么DaoMaster,DaoSession,Dao的原路径是在这里的

有这俩句,那么DaoMaster,DaoSession,Dao那么路径挺好找的


复制代码

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao'//add plugin
android {
    compileSdkVersion 26
    buildToolsVersion "27.0.3"
    defaultConfig {
        applicationId "com.example.pearl.customdropdownbox"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
// 这个非常重要,会生成Dao的类
greendao {    //add plugin
    schemaVersion 2
    //生成greedao的对象类的路径   ==》我不太喜欢它原来的路径,所以把它放在一个自己方便看的路径下来,所以这句你可以不要!
    daoPackage 'com.example.pearl.customdropdownbox.greendao'
    targetGenDir 'src/main/java'//保存到java代码路径   ==》这句你可以不要
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.+'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
    compile 'com.loopj.android:android-async-http:1.4.9'// add library==》这个是添加 网络请求的插件
    compile 'org.greenrobot:greendao:3.2.2' // add library  ==>这个是 添加 greedao插件
}
build.gradle

 a):因为需要网络的请求 所以 要必须 要在AndroidManifest.xml加一句代码,不加就会出现下面这种错误的情况

12-26 02:45:25.969 5267-5334/zhu.com.sprnner_cbo W/System.err: java.net.SocketException: Permission denied
12-26 02:45:25.970 5267-5334/zhu.com.sprnner_cbo W/System.err:     at java.net.Socket.createImpl(Socket.java:473)
12-26 02:45:25.970 5267-5334/zhu.com.sprnner_cbo W/System.err:     at java.net.Socket.getImpl(Socket.java:536)
12-26 02:45:25.971 5267-5334/zhu.com.sprnner_cbo W/System.err:     at java.net.Socket.setSoTimeout(Socket.java:1127)
12-26 02:45:25.971 5267-5334/zhu.com.sprnner_cbo W/System.err:     at cz.msebera.android.httpclient.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:116)
12-26 02:45:25.971 5267-5334/zhu.com.sprnner_cbo W/System.err:     at cz.msebera.android.httpclient.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:157)
12-26 02:45:25.971 5267-5334/zhu.com.sprnner_cbo W/System.err:     at cz.msebera.android.httpclient.conn.scheme.SchemeSocketFactoryAdaptor.connectSocket(SchemeSocketFactoryAdaptor.java:65)
12-26 02:45:25.972 5267-5334/zhu.com.sprnner_cbo W/System.err:     at cz.msebera.android.httpclient.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:177)
12-26 02:45:25.972 5267-5334/zhu.com.sprnner_cbo W/System.err:     at cz.msebera.android.httpclient.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:145)
12-26 02:45:25.972 5267-5334/zhu.com.sprnner_cbo W/System.err:     at cz.msebera.android.httpclient.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:131)
12-26 02:45:25.972 5267-5334/zhu.com.sprnner_cbo W/System.err:     at cz.msebera.android.httpclient.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:611)
12-26 02:45:25.973 5267-5334/zhu.com.sprnner_cbo W/System.err:     at cz.msebera.android.httpclient.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:446)
12-26 02:45:25.973 5267-5334/zhu.com.sprnner_cbo W/System.err:     at cz.msebera.android.httpclient.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:860)
12-26 02:45:25.973 5267-5334/zhu.com.sprnner_cbo W/System.err:     at cz.msebera.android.httpclient.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
12-26 02:45:25.973 5267-5334/zhu.com.sprnner_cbo W/System.err:     at com.loopj.android.http.AsyncHttpRequest.makeRequest(AsyncHttpRequest.java:146)
12-26 02:45:25.974 5267-5334/zhu.com.sprnner_cbo W/System.err:     at com.loopj.android.http.AsyncHttpRequest.makeRequestWithRetries(AsyncHttpRequest.java:177)
12-26 02:45:25.974 5267-5334/zhu.com.sprnner_cbo W/System.err:     at com.loopj.android.http.AsyncHttpRequest.run(AsyncHttpRequest.java:106)
12-26 02:45:25.974 5267-5334/zhu.com.sprnner_cbo W/System.err:     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428)
12-26 02:45:25.974 5267-5334/zhu.com.sprnner_cbo W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
12-26 02:45:25.975 5267-5334/zhu.com.sprnner_cbo W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
12-26 02:45:25.975 5267-5334/zhu.com.sprnner_cbo W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
12-26 02:45:25.975 5267-5334/zhu.com.sprnner_cbo W/System.err:     at java.lang.Thread.run(Thread.java:761)
错误情况

 

 

 

 好了配置弄好剩下的就 很好解决了

 

b):设置实体类: 

  实体类 要根据返回的json中 相对于的key 一一对应

 

 注意:   主键:id必须要设置Long的类型 ,切记 必须要加入  @Entity, 和@Id

 

 

   设置好变量后 ,还有一个操作 设置 生成DaoMaster,DaoSession,Dao类的操作,这它就会自动补全我们实体类剩下的get和set的方法了

 ================生成的========》

 

  

复制代码
    最后在实体类中再加 一个方法 得到 从 服务器专递的json的数据
    // 将json ==>转化为 Bean的对象(即Tb_Cbo_CLDL的对象)
    public static  Tbmep json_To_Bean(JSONObject object){
        try {
            return  new Tbmep(object.getLong("did"),
                    object.getString("dname")
            );
        }catch (Exception e){   }
        return  null;
    }
复制代码

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~··

 Tbmep

package com.example.pearl.customdropdownbox;

import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.Generated;
import org.json.JSONObject;

/**
 * Created by Pearl on 2017/12/27.
 */

@Entity
public class Tbmep {
    @Id
    private Long did;
    private String dname;
    @Generated(hash = 1103728403)
    public Tbmep(Long did, String dname) {
        this.did = did;
        this.dname = dname;
    }
    @Generated(hash = 1857599075)
    public Tbmep() {
    }
    public Long getDid() {
        return this.did;
    }
    public void setDid(Long did) {
        this.did = did;
    }
    public String getDname() {
        return this.dname;
    }
    public void setDname(String dname) {
        this.dname = dname;
    }
    // 将json ==>转化为 Bean的对象(即Tb_Cbo_CLDL的对象)
    public static  Tbmep json_To_Bean(JSONObject object){
        try {
            return  new Tbmep(object.getLong("did"),
                    object.getString("dname")
            );
        }catch (Exception e){   }
        return  null;
    }
}

 

 2):界面

a):activity_cbo.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.pearl.customdropdownbox.CBOActivity">

    <RelativeLayout
        android:id="@+id/relativelayout"
        android:padding="2dp"
        android:layout_width="wrap_content"
        android:layout_height="42dp" >
        <TextView
            android:id="@+id/kj_tv_tbmep"
            android:background="@drawable/etitext_frame_radiuo"
            android:layout_width="130dp"
            android:layout_height="35dp"
            android:layout_centerVertical="true"
            android:gravity="left|center"
            android:hint="~部门~"
            android:paddingLeft="10dp"
            android:textColor="#ff000000"
            android:textSize="11sp" >
        </TextView>
        <LinearLayout
            android:id="@+id/bt_dropdown"
            android:layout_width="25dp"
            android:layout_height="match_parent"
            android:layout_marginLeft="109dp"
            android:gravity="center"
            >
            <ImageView
                android:layout_width="20dp"
                android:layout_height="20dp"
                android:background="@drawable/btn_click_radius_press" />
        </LinearLayout>
    </RelativeLayout>


</RelativeLayout>

 

 b):spiner_item_layout.xml

 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="#00000000"
    android:minHeight="40dp">

  <TextView
      android:id="@+id/textView"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:background="#00000000"
      android:gravity="center"
      android:textColor="@color/text_yellow"
      android:textSize="18sp" />
  <TextView
      android:id="@+id/text_provinceId"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:background="#00000000"
      android:gravity="center"
      android:visibility="invisible"
      android:textColor="@color/text_yellow"
      android:textSize="18sp" />
</RelativeLayout>

 

 spiner_listview_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:background="#ffffff"
    android:orientation="vertical">

    <ListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/sprinner_line_background"
        android:cacheColorHint="#00000000"
        android:scrollbars="none"></ListView>

</LinearLayout>

 需要用到 一些应用来设置界面 

  a):values的设置

 b)drawable的设置

btn_click_radius_press.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/btn_press"/>
    <item android:drawable="@drawable/btn_radius"/>
</selector>

    <!--要是button可以变色:
    那么要把在btn_radius.xml的btn_bg和btn_press.xml没按的效果组合起来就可以进行变色的效果-->

 

 btn_press.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@android:color/holo_red_dark">
    </solid><!--solid是一个填充的的颜色-->
    <stroke android:width="1dp"
        android:color="#A3AAAA">
    </stroke>
    <corners android:radius="5dp"/>
</shape>

    <!--这个是按的效果: 这个是定义进度条的时候使用 button 变色的情况-->

btn_radius.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@android:color/holo_green_light">
    </solid>
    <stroke android:width="1dp"
        android:color="#fff">

    </stroke>
    <corners android:radius="5dp"/>
</shape>

etitext_frame_radiuo.xml

<?xml version="1.0" encoding="utf-8" ?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" android:padding="10dp">

     <padding
              android:bottom="5dp"
              android:left="5dp"
              android:right="5dp"
              android:top="5dp" />
          <!-- 设置圆角矩形 -->
          <corners android:radius="7dp" />

          <stroke
              android:width="5px"
              android:color="#1199EF" />


</shape>

 

sprinner_line_background.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle"
    >

    <stroke
        android:width="0.01dp"
        android:color="#C6C7CE" />
    <padding
        android:bottom="5dp"
        />
    <solid android:color="@android:color/holo_red_dark">
    </solid><!--solid是一个填充的的颜色-->
    <stroke android:width="1dp"
        android:color="#A3AAAA">
    </stroke>
    <corners android:radius="5dp"/>
</shape>

 

 3):代码

MyBaseAdapter 
package com.example.pearl.customdropdownbox;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.List;

/**
 * Created by XiaoZhu on 2017/9/26.
 */

public class MyBaseAdapter extends BaseAdapter {

    public static interface IOnItemSelectListener {
        public void onItemClick(int pos);
    }

    ;

    private List<String> mObjects;

    private LayoutInflater mInflater;

    public MyBaseAdapter(Context context, List<String> mObjects) {
        this.mObjects = mObjects;
        mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }


    public void refreshData(List<String> objects, int selIndex) {
        mObjects = objects;
        if (selIndex < 0) {
            selIndex = 0;
        }
        if (selIndex >= mObjects.size()) {
            selIndex = mObjects.size() - 1;
        }
    }


    @Override//在此适配器中所代表的数据集的条目数
    public int getCount() {

        return mObjects.size();
    }

    @Override//获取数据集中与指定索引对应的数据项
    public Object getItem(int pos) {
        return mObjects.get(pos).toString();
    }

    @Override//取在列表中与指定索引对应的行id
    public long getItemId(int pos) {
        return pos;
    }

    @Override  //下面的是重点
    public View getView(int pos, View convertView, ViewGroup arg2) {
        ViewHolder viewHolder;
        if (convertView == null) {
            convertView = mInflater.inflate( R.layout.spiner_item_layout, null);
            viewHolder = new ViewHolder();
            viewHolder.mTextView = (TextView) convertView.findViewById(R.id.textView);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }

        //Object item =  getItem(pos);
        viewHolder.mTextView.setText(mObjects.get(pos));

        return convertView;
    }


    public static class ViewHolder {
        public TextView mTextView;
    }

}

 

 SpinerPopWindow

package com.example.pearl.customdropdownbox;

import android.content.Context;
import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.PopupWindow;

import java.util.List;


/**
 * Created by XiaoZhu on 2017/12/12.
 */

public class SpinerPopWindow extends PopupWindow implements AdapterView.OnItemClickListener {

    private Context mContext;
    private ListView mListView;
    private MyBaseAdapter mAdapter;
    private MyBaseAdapter.IOnItemSelectListener mItemSelectListener;

    public SpinerPopWindow(Context context) {
        super(context);

        mContext = context;
        init();
    }

    public void setItemListener(MyBaseAdapter.IOnItemSelectListener listener) {
        mItemSelectListener = listener;
    }

    public void setAdatper(MyBaseAdapter adapter) {
        mAdapter = adapter;
        mListView.setAdapter(mAdapter);
    }


    private void init() {
        View view = LayoutInflater.from(mContext).inflate(R.layout.spiner_listview_layout, null);
        setContentView(view);
        setWidth(LayoutParams.WRAP_CONTENT);
        setHeight(LayoutParams.WRAP_CONTENT);

        setFocusable(true);
        ColorDrawable dw = new ColorDrawable(0x00);
        setBackgroundDrawable(dw);


        mListView = (ListView) view.findViewById(R.id.listview);
        mListView.setOnItemClickListener(this);
    }


    public void refreshData(List<String> list, int selIndex) {
        if (list != null && selIndex != -1) {
            if (mAdapter != null) {
                mAdapter.refreshData(list, selIndex);
            }
        }
    }

    @Override
    public void onItemClick(AdapterView<?> arg0, View view, int pos, long arg3) {
        dismiss();
        if (mItemSelectListener != null) {
            mItemSelectListener.onItemClick(pos);
        }
    }

}

 

 CBOActivity

package com.example.pearl.customdropdownbox;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.RelativeLayout;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import cz.msebera.android.httpclient.Header;

public class CBOActivity extends Activity implements  View.OnClickListener ,MyBaseAdapter.IOnItemSelectListener   {
    private List< String> list_Tbmep =null;
    private TextView tv_sprnner_Tbmep;
    private MyBaseAdapter mAdapter;
    private RelativeLayout relativeLayout;
    private SpinerPopWindow mSpinerPopWindow;
    private  List<Tbmep> list_cboTbmep=null;
    private long   TbmepID=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cbo);
        relativeLayout = (RelativeLayout) findViewById(R.id.relativelayout);
        relativeLayout.setOnClickListener(this);//自已下拉框
        tv_sprnner_Tbmep=  (TextView) findViewById(R.id.kj_tv_tbmep);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.relativelayout:
                cbo_tbmep();
                break;

        }
    }

    @Override
    public void onItemClick(int pos) {
        TbmepID =list_cboTbmep.get((int) pos).getDid();
        String value = list_Tbmep.get(pos);
        tv_sprnner_Tbmep.setText(value.toString());
    }

    public void cbo_tbmep(){
        AsyncHttpClient client =new AsyncHttpClient();
        //第一个参数是访问 后台的路径,第二是:参数根据 id获取 string 查询数据 ,第三个:回调函数
        client.get("http://192.168.191.2:8080/2017_1214_cbo/Binding_Cbo/android_cbo.json", null, new AsyncHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
                if (statusCode==200){
                    try {
                        JSONObject object = new JSONObject(new String(responseBody));//获取json数据
                        JSONArray jsonArray = object.getJSONArray("cbo_bm");//获取数据集名称为obj的数据
                        Log.d("jsonArray数据输出:", String.valueOf(jsonArray));
                        list_cboTbmep = new ArrayList<>();
                        for(int i=0;i<jsonArray.length();i++){
                            JSONObject json_one=jsonArray.getJSONObject(i);
                            //把 json 转换为 ==》bean的对象形式
                            //方法1;
                            Tbmep cbo=Tbmep.json_To_Bean(json_one);

                             if (cbo!=null){
                                list_cboTbmep.add(cbo);//把对象放入 list的数组中
                            }
                        }
                        if (jsonArray.length() > 0) {
                          //  TbmepID = list_cboTbmep.get(0).getDid();
                            list_Tbmep = new ArrayList<  String >();
                            for (int i = 0; i < list_cboTbmep.size(); i++) {
                                Tbmep section = list_cboTbmep.get(i);
                                list_Tbmep.add(section.getDname());

                            }

                        }
                        mAdapter=new MyBaseAdapter(CBOActivity.this,list_Tbmep);
                        mAdapter.refreshData(list_Tbmep, 0);
                        //初始化PopWindow
                        mSpinerPopWindow = new SpinerPopWindow(CBOActivity.this);
                        mSpinerPopWindow.setAdatper(mAdapter);
                        mSpinerPopWindow.setItemListener(CBOActivity.this);
                        showSpinWindow();//显示SpinerPopWindow
                    } catch (JSONException e) {
                        Toast.makeText(CBOActivity.this, "下拉框加载失败!", Toast.LENGTH_SHORT).show();
                    }
                    mAdapter.notifyDataSetChanged();// 数据加载 完毕, 通知列表去更新
                }else if(statusCode==400){
                    Toast.makeText(CBOActivity.this, "若返回值400,则是返回网络异常!", Toast.LENGTH_SHORT).show();
                }
            }

            @Override
            public void onFailure(int statusCode,cz.msebera.android.httpclient.Header[]  headers, byte[] responseBody, Throwable error) {

            }
        }) ;

    }
    //设置PopWindow
    private void showSpinWindow() {
        //设置mSpinerPopWindow显示的宽度
        mSpinerPopWindow.setWidth(relativeLayout.getWidth());
        //设置显示的位置在哪个控件的下方
        mSpinerPopWindow.showAsDropDown(relativeLayout);
    }
}

 

  运行效果:

   

源码:http://download.csdn.net/download/qq_35812301/10176025

 

推荐阅读