进击的大神之路

无线点餐进行时……(结束)

学习中的小问题,集中更新,因不爱看视频慢慢来,在做项目中的一系列问题,喜欢在项目中进行解决(也许有些很脑残)- -

  • 自定义控件

就是在lisetview中添加各种控件,这个小伙伴都会吧 - -,其中就是一个小小的问题。listview焦点问题,在listview中植入自定义控件会发生的一个焦点问题,导致无法点击自定义控件的button按钮,

beforeDescendants:viewgroup会优先其子类控件而获取到焦点 。
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点 。
一般使用 beforeDescendants:viewgroup 加在layout布局文件中,从而获得焦点。

  • viewpager和fragment

一个activity类和一个adapter类,还插入了一个RadioButton的按钮也以用来控制页面的跳转,本来是有参考大大的博客的,但是没保存…..

activity类:

package com.example.gmproject;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;

public class menuMain extends FragmentActivity{

    private ViewPager view;
    private checkAdapter adapter;
    private RadioGroup radiogroup;
    private RadioButton tb1,tb2,tb3,tb4;

    @Override
    protected void onCreate(Bundle arg0) {
        // TODO Auto-generated method stub
        super.onCreate(arg0);
        setContentView(R.layout.menu);

        intiView();
        addAdpter();
    }

    public void intiView(){
        view = (ViewPager) findViewById(R.id.viewpager);
        radiogroup = (RadioGroup) findViewById(R.id.radiogroup);
        tb1 = (RadioButton) findViewById(R.id.tab1);
        tb2 = (RadioButton) findViewById(R.id.tab2);
        tb3 = (RadioButton) findViewById(R.id.tab3);
        tb4 = (RadioButton) findViewById(R.id.tab4);
    }

    public void addAdpter(){
        adapter = new checkAdapter(getSupportFragmentManager());
        view.setAdapter(adapter);

        view.setOnPageChangeListener(new OnPageChangeListener() {

            public void onPageSelected(int arg0) {
                // TODO Auto-generated method stub
                switch (arg0) {
                case 0:
                    tb1.setChecked(true);
                    tb2.setChecked(false);
                    tb3.setChecked(false);
                    tb4.setChecked(false);
                    break;
                case 1:
                    tb1.setChecked(false);
                    tb2.setChecked(true);
                    tb3.setChecked(false);
                    tb4.setChecked(false);
                    break;
                case 2:
                    tb1.setChecked(false);
                    tb2.setChecked(false);
                    tb3.setChecked(true);
                    tb4.setChecked(false);
                    break;
                case 3:
                    tb1.setChecked(false);
                    tb2.setChecked(false);
                    tb3.setChecked(false);
                    tb4.setChecked(true);
                    break;
                }
            }

            public void onPageScrolled(int arg0, float arg1, int arg2) {
                // TODO Auto-generated method stub

            }

            public void onPageScrollStateChanged(int arg0) {
                // TODO Auto-generated method stub

            }
        });

        radiogroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            public void onCheckedChanged(RadioGroup group, int checkedId) {
                switch (checkedId) {
                case R.id.tab1:
                    view.setCurrentItem(0);//返回VIEW中的界面0,1,2,3
                    break;
                case R.id.tab2:
                    view.setCurrentItem(1);
                    break;
                case R.id.tab3:
                    view.setCurrentItem(2);
                    break;
                case R.id.tab4:
                    view.setCurrentItem(3);
                    break;
                }
            }
        });
    }

}

adapter类:

package com.example.gmproject;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.rtp.RtpStream;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;


public class checkAdapter extends FragmentPagerAdapter {

    public checkAdapter(FragmentManager fm) {
        super(fm);
        // TODO Auto-generated constructor stub
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return 4;// 页面数量
    }

    public Fragment getItem(int position) {

        switch (position) {
        case 0:
            return new CheckItemFragment1();
        case 1:
            return new CheckItemFragment2();
        case 2:
            return new CheckItemFragment3();
        case 3:
            return new CheckItemFragment4();
        default:
            return null;
        }
    }

    public static class CheckItemFragment1 extends Fragment {

    }

    public static class CheckItemFragment2 extends Fragment {


    }

    public static class CheckItemFragment3 extends Fragment {


    }

    public static class CheckItemFragment4 extends Fragment {


    }

    }

}

就是一个这样子的框框

这样就能实现viewpage和rediobutton进行页面控制了然后在viewpage中嵌套fragment ,使用fragment应该要看好他的生命周期,什么会被销毁,什么会被缓存(吃了一波大亏 T T)。

  • webservice发布IIS

让andorid连接webservice尽量将webservice发布到IIS上不然会出现一系列连接问题,在模拟器上是不能使用localhost的模拟器想要访问本地是10.0.2.2但是也会出现很多问题,在连接tomacat可以使用电脑的默认IP地址,但是在我连接webservice貌似也出现了连接不上的问题,所以IIS最靠谱 - - ,一个小插曲webservice连接了数据库,sqlserver数据库不要用windows验证模式,不然IIS是连接不上数据库的。

webservice的代码(用C#写的webservice):

using System;
using System.Data.SqlClient;
using System.Collections.Generic;  

namespace Webservice
{
    public class DBopen :IDisposable
    {

        public static SqlConnection sqlcont;//连接数据库

        //连接数据库字符串
        private String content = @"Data Source=HP-PC\LOL;Initial Catalog=C_order;Persist Security Info=True;User ID=sa;Password=2518598";

        //创建一个构造函数
        public DBopen(){

            //判断数据库是否连接
            if (sqlcont == null){
                //连接数据库
                sqlcont = new SqlConnection();
                sqlcont.ConnectionString = content;
                sqlcont.Open();

            }

            //关闭数据库重连
            else {
                sqlcont.Close();
                sqlcont = new SqlConnection();
                sqlcont.ConnectionString = content;
                sqlcont.Open();          
            }

        }

        //创建一个增加数据的方法
        ///<param name="C_id">食物ID</param>
        /// <param name="C_name">食物名称</param>  
        /// <param name="C_num">食物数量</param>
        /// <param name="C_price">食物价格</param>

        public bool insertCargoInfo( string C_name, int C_num , int C_price)
        {
            try
            {
                string sql = "insert into To_order (C_name,C_num,C_price) values (" +"'"+ C_name +"'"+"," + C_num + "," + C_price + ")";
                SqlCommand cmd = new SqlCommand(sql, sqlcont);
                cmd.ExecuteNonQuery();
                cmd.Dispose();

                return true;
            }
            catch (Exception)
            {
                return false;
            }
        } 


        //创建一个list获取所有的数据

        public List<string> selectAllData() {

            List<string> list = new List<string>();

            try {

                string sql = "select * from To_order";
                SqlCommand cmd = new SqlCommand(sql,sqlcont);
                SqlDataReader reader = cmd.ExecuteReader();

                while (reader.Read()) { 

                    //结果返回其中
                    list.Add(reader[0].ToString());
                    list.Add(reader[1].ToString());
                    list.Add(reader[2].ToString());
                }

                reader.Close();
                cmd.Dispose();
            }

            catch (Exception){

            }

            return list;

        }

        public void Dispose()
        {
            throw new NotImplementedException();
        }

        void IDisposable.Dispose()
        {
            throw new NotImplementedException();
        }
    }
}

参考大大的博客有:

webservice的创建和发布
http://blog.sina.com.cn/s/blog_45eaa01a0102vopl.html

  • andoroid 连接 webservice

连接方法使用koap2协议,首先下载一个第三方包。
webservice是用C#写的,所以在android代码中 加上 envelope.dotNet = true;
andorid访问网络需要注册网络权限,在AndroidManifest.xml中加入

安卓主程序反应时间5秒(貌似是这个意思)所以,连接webservice不能写在主程序中,要使用异步或者是子线程(3.0以上版本)。
连接webservcie需要 注意版本协议号,SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( SoapEnvelope.VER10);
协议号看webservice服务说明,这是1.0版本
《?xml version=”1.0” encoding=”UTF-8”?>
低版本不能向高版本兼容,不然会报XML解析错误,(最后的一个问题了,终于能实现一个雏形了….)

    static String URL = "http://192.168.123.39/web/WebService1.asmx?WSDL";
    static String server_rul = "http://FristLwAmf.org/";
    static String SelectMethName = "selectAllCargoInfor";
    static String InsertMethname = "insertCargoInfo";

        // 执行异步
        class wsasynctask extends AsyncTask {

            @Override
            protected Object doInBackground(Object... params) {

                String name, num, price;

                name = CheckItemFragment1.this.name.getText().toString();
                num = CheckItemFragment1.this.num.getText().toString();
                price = CheckItemFragment1.this.price.getText().toString();
                // 准备webservice

                // 指定service命名空间和调用方法
                SoapObject request = new SoapObject(server_rul, InsertMethname);

                // example方法中有一个String的参数,这里将“信息”传递到example中(需要传递数据可用)
                request.addProperty("FoodName", name);
                request.addProperty("FoodNumber", num);
                request.addProperty("FoodPrice", price);
                // 创建SoapSerializationEnvelope对象,并指定WebService的版本(指定版本號在wsdl中查詢webservice
                // soap1.0)
                SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                        SoapEnvelope.VER10);
                // 设置bodyOut属性
                envelope.bodyOut = request;
                // c#写的应用程序必须加上这句
                envelope.dotNet = true;

                envelope.setOutputSoapObject(request);
                // 创建HttpTransportSE对象,并指定WSDL文档的URL
                AndroidHttpTransport ht = new AndroidHttpTransport(URL);

                try {
                    ht.call(server_rul + InsertMethname, envelope);
                SoapObject result = (SoapObject)envelope.getResponse();
                        count = result.getPropertyCount();// 返回的所有属性值长度
                        // 获取webservice中的属性返回值
                        name = result.getProperty(0).toString();
                        price = result.getProperty(1).toString();
                        num = result.getProperty(2).toString();
                            //刷新UI
                            public void run() {
                                // TODO Auto-generated method stub
                                    //异步的方法 - -, 可以使用子线程和handler的,偷一波懒
                                }

                } catch (IOException e) {
                    Toast.makeText(getActivity(), "网络连接异常", 0);
                    e.printStackTrace();
                } catch (XmlPullParserException e) {
                    Toast.makeText(getActivity(), "XML解析异常", 0);
                    e.printStackTrace();
                }

                return null;
            }

        }

参考大大的博客有:

andorid连接C#webservice:
http://www.cnblogs.com/kissazi2/p/3406662.html
调用webservice中方法,参数和字符串
http://blog.csdn.net/tsingheng/article/details/7817084

- 总结

这个 项目(算项目吗 - - 好歹有客户端,有服务器端好吧…..)到此也就GG了,很多问题看破之后就感觉自己像个傻子T T,向上吧,骚年继续加油咯!!!能看到成果就有做下去的动力,还是坚持不看视频,实操中掌握真理 下一波手机安全卫士吧….希望道路能平坦点。

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值