mysql 绑定到下拉框_android+myeclipse+mysql自定义控件下拉框的数据绑定

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

一:Android studio

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

de2b49eed32affd70b3e475385399450.png

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

//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

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

ea0abc0a6fb94b2dbbd6cf6b4c4ff922.png

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

// 这个非常重要,会生成Dao的类

greendao { //add plugin

schemaVersion 2

//生成greedao的对象类的路径

设置DaoMaster,DaoSession,Dao包的路径,我不太喜欢它原来的路径,每次找都很麻烦,所以把它放在一个自己方便看的路径下来,你也可以不要下面这两句!

daoPackage 'zhu.com.sprnner_cbo.greendao'

targetGenDir 'src/main/java'//保存到java代码路径 ==》这句你可以不要

}

1172bbd3dd786e2e3ce6ffc11af3ecba.png

48304ba5e6f9fe08f3fa1abda7d326ab.png

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

db25348bffcb297c8aa8fb7e24ea05b5.png

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

7b047571f590d9f3e5630ca008d736f2.png

48304ba5e6f9fe08f3fa1abda7d326ab.png

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

14130a69ccc8fb7d54b5dff284e055af.png

82f5926c4f20068acae3f60c0432868f.png

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

apply plugin: 'com.android.application'apply plugin:'org.greenrobot.greendao'//add plugin

android {

compileSdkVersion26buildToolsVersion"27.0.3"defaultConfig {

applicationId"com.example.pearl.customdropdownbox"minSdkVersion15targetSdkVersion26versionCode1versionName"1.0"testInstrumentationRunner"android.support.test.runner.AndroidJUnitRunner"}

buildTypes {

release {

minifyEnabledfalseproguardFiles 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加一句代码,不加就会出现下面这种错误的情况

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

12-26 02:45:25.969 5267-5334/zhu.com.sprnner_cbo W/System.err: java.net.SocketException: Permission denied12-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)

错误情况

53b9c942cae0947c8bc1522c82d10382.png

9d63183f418715a396ed19e2c0d414a3.png

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

b):设置实体类:

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

d6c12d85a94f2a49566c26fc936dead0.png

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

6b85737c1b02d9786cfed3213f4f88f3.png

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

b9b291f59b47c5cf045dec473674647d.png================生成的========》

77637a3e5a88f5e90f463ff27836a063.png

48304ba5e6f9fe08f3fa1abda7d326ab.png

最后在实体类中再加 一个方法 得到 从 服务器专递的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;

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

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

Tbmep

packagecom.example.pearl.customdropdownbox;importorg.greenrobot.greendao.annotation.Entity;importorg.greenrobot.greendao.annotation.Id;importorg.greenrobot.greendao.annotation.Generated;importorg.json.JSONObject;/*** Created by Pearl on 2017/12/27.*/@Entitypublic classTbmep {

@IdprivateLong did;privateString dname;

@Generated(hash= 1103728403)publicTbmep(Long did, String dname) {this.did =did;this.dname =dname;

}

@Generated(hash= 1857599075)publicTbmep() {

}publicLong getDid() {return this.did;

}public voidsetDid(Long did) {this.did =did;

}publicString getDname() {return this.dname;

}public voidsetDname(String dname) {this.dname =dname;

}//将json ==>转化为 Bean的对象(即Tb_Cbo_CLDL的对象)

public staticTbmep 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

>

b):spiner_item_layout.xml

spiner_listview_layout.xml

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

a):values的设置

e29823515abf3076ddda703060f6376e.png

b)drawable的设置

559203c878ba7963b5efec66a2bf6ae6.png

btn_click_radius_press.xml

btn_press.xml

btn_radius.xml

etitext_frame_radiuo.xml

sprinner_line_background.xml

>

/>

3):代码

MyBaseAdapter

packagecom.example.pearl.customdropdownbox;importandroid.content.Context;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.ViewGroup;importandroid.widget.BaseAdapter;importandroid.widget.TextView;importjava.util.List;/*** Created by XiaoZhu on 2017/9/26.*/

public class MyBaseAdapter extendsBaseAdapter {public static interfaceIOnItemSelectListener {public void onItemClick(intpos);

}

;private ListmObjects;privateLayoutInflater mInflater;public MyBaseAdapter(Context context, ListmObjects) {this.mObjects =mObjects;

mInflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}public void refreshData(List objects, intselIndex) {

mObjects=objects;if (selIndex < 0) {

selIndex= 0;

}if (selIndex >=mObjects.size()) {

selIndex= mObjects.size() - 1;

}

}

@Override//在此适配器中所代表的数据集的条目数

public intgetCount() {returnmObjects.size();

}

@Override//获取数据集中与指定索引对应的数据项

public Object getItem(intpos) {returnmObjects.get(pos).toString();

}

@Override//取在列表中与指定索引对应的行id

public long getItemId(intpos) {returnpos;

}

@Override//下面的是重点

public View getView(intpos, View convertView, ViewGroup arg2) {

ViewHolder viewHolder;if (convertView == null) {

convertView= mInflater.inflate( R.layout.spiner_item_layout, null);

viewHolder= newViewHolder();

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));returnconvertView;

}public static classViewHolder {publicTextView mTextView;

}

}

SpinerPopWindow

packagecom.example.pearl.customdropdownbox;importandroid.content.Context;importandroid.graphics.drawable.ColorDrawable;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.ViewGroup.LayoutParams;importandroid.widget.AdapterView;importandroid.widget.ListView;importandroid.widget.PopupWindow;importjava.util.List;/*** Created by XiaoZhu on 2017/12/12.*/

public class SpinerPopWindow extends PopupWindow implementsAdapterView.OnItemClickListener {privateContext mContext;privateListView mListView;privateMyBaseAdapter mAdapter;privateMyBaseAdapter.IOnItemSelectListener mItemSelectListener;publicSpinerPopWindow(Context context) {super(context);

mContext=context;

init();

}public voidsetItemListener(MyBaseAdapter.IOnItemSelectListener listener) {

mItemSelectListener=listener;

}public voidsetAdatper(MyBaseAdapter adapter) {

mAdapter=adapter;

mListView.setAdapter(mAdapter);

}private voidinit() {

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 list, intselIndex) {if (list != null && selIndex != -1) {if (mAdapter != null) {

mAdapter.refreshData(list, selIndex);

}

}

}

@Overridepublic void onItemClick(AdapterView> arg0, View view, int pos, longarg3) {

dismiss();if (mItemSelectListener != null) {

mItemSelectListener.onItemClick(pos);

}

}

}

CBOActivity

packagecom.example.pearl.customdropdownbox;importandroid.app.Activity;importandroid.content.Intent;importandroid.os.Bundle;importandroid.util.Log;importandroid.view.View;importandroid.widget.AdapterView;importandroid.widget.ArrayAdapter;importandroid.widget.RelativeLayout;importandroid.widget.Spinner;importandroid.widget.TextView;importandroid.widget.Toast;importcom.loopj.android.http.AsyncHttpClient;importcom.loopj.android.http.AsyncHttpResponseHandler;importorg.json.JSONArray;importorg.json.JSONException;importorg.json.JSONObject;importjava.io.Serializable;importjava.util.ArrayList;importjava.util.List;importcz.msebera.android.httpclient.Header;public class CBOActivity extends Activity implementsView.OnClickListener ,MyBaseAdapter.IOnItemSelectListener {private List< String> list_Tbmep =null;privateTextView tv_sprnner_Tbmep;privateMyBaseAdapter mAdapter;privateRelativeLayout relativeLayout;privateSpinerPopWindow mSpinerPopWindow;private List list_cboTbmep=null;private long TbmepID=0;

@Overrideprotected voidonCreate(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);

}

@Overridepublic voidonClick(View view) {switch(view.getId()) {caseR.id.relativelayout:

cbo_tbmep();break;

}

}

@Overridepublic void onItemClick(intpos) {

TbmepID=list_cboTbmep.get((int) pos).getDid();

String value=list_Tbmep.get(pos);

tv_sprnner_Tbmep.setText(value.toString());

}public voidcbo_tbmep(){

AsyncHttpClient client=newAsyncHttpClient();//第一个参数是访问 后台的路径,第二是:参数根据 id获取 string 查询数据 ,第三个:回调函数

client.get("http://192.168.191.2:8080/2017_1214_cbo/Binding_Cbo/android_cbo.json", null, newAsyncHttpResponseHandler() {

@Overridepublic 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

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();

}

}

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

}

}) ;

}//设置PopWindow

private voidshowSpinWindow() {//设置mSpinerPopWindow显示的宽度

mSpinerPopWindow.setWidth(relativeLayout.getWidth());//设置显示的位置在哪个控件的下方

mSpinerPopWindow.showAsDropDown(relativeLayout);

}

}

运行效果:

6ec0f3cc9bbb215ad933feb398b2ec1a.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值