项目问题解决积累

java.lang.IllegalArgumentException: the bind value at index 1 is null

本质上还是由于调用的时候userID给了空值

String query = "select regdate,shousuo,shuzhang,maibo from xueya2 where userid = "+userID;
Cursor cursor = db.query("xueya2", new String[]{"regdate,shousuo,shuzhang,maibo"},"userid=?", new String[]{userID}, null, null, null);

 

这个提示是,你的表中有外键,你就不可以添加随意添加外键值,必须参考表中有对应的外键值。

这个错误犯了很多次:数据往服务器转存时也出现了类似的错误,从本地数据库取数据的时候加了userID,因为本地列表显示不需要userID,想当然的复用了

以前的方法,导致往服务器存数据的时候丢了userID。

 

  BloodPre bloodpre = new BloodPre();
               List<BloodPre> list= (List<BloodPre>) GeneralDbHelper.getInstance(MyApplication.getContext()).getBeanList(bloodpre,userid,temp);
               LogUtil.i("list.size",list.size()+list.get(0).toString());
               
               
               for(int i = list.size(); i>0; i--){
                   new NetTool().uploadData(list.get(i-1));
               }
               
                Editor editor = sharedPreferences.edit();
                editor.putInt("unSavedBP", 0);
                editor.commit(); 
                MyApplication.unSavedBP = 0;

 

public List<?> getBeanList(HealthData obj,String userID,int num) {
                openDatabase();
                if(obj instanceof BloodPre){                                     
                     String query = "select regdate,shousuo,shuzhang,maibo from xueya2 order by id desc limit (0,"+num+") where userid = "+userID;
                     Cursor cursor = db.query("xueya2", new String[]{"regdate,shousuo,shuzhang,maibo"},"userid=?", new String[]{userID}, null, null, null);
                     List<BloodPre> list = new ArrayList<BloodPre>();
                     cursor.moveToLast();
                     for(int i=0; i<num; i++) {
                         BloodPre bloodpre = new BloodPre();
                         bloodpre.setTime(cursor.getString(cursor.getColumnIndex("regdate")));
                         bloodpre.setHighp(cursor.getInt(cursor.getColumnIndex("shousuo")));
                         bloodpre.setLowp(cursor.getInt(cursor.getColumnIndex("shuzhang")));
                         bloodpre.setPulse(cursor.getInt(cursor.getColumnIndex("maibo")));                                    
                         list.add(bloodpre);
                         cursor.moveToPrevious();
                     }            
                    return list;
                }else if(obj instanceof BloodOx){
                     String query = "select regdate,xueyang,maibo from xueyang2 where userid = "+userID;
                     Cursor cursor = db.query("xueyang2", new String[]{"regdate,xueyang,maibo"},"userid=?", new String[]{userID}, null, null, null);
                     List<BloodOx> list = new ArrayList<BloodOx>();                 
                     while (cursor.moveToNext()) {                     
                         BloodOx bloodox = new BloodOx();
                         bloodox.setTime(cursor.getString(cursor.getColumnIndex("regdate")));
                         bloodox.setOx(cursor.getInt(cursor.getColumnIndex("xueyang")));
                         bloodox.setPulse(cursor.getInt(cursor.getColumnIndex("maibo")));
                                    
                         list.add(bloodox);                      
                    }
                    return list;
                }
                else {
                    return null;
                }

            }

 

 

另外注意,字符串匹配时,要使用like:

主键值没法设置成自动递增,报1602错误,是因为数据库中已经有数据啦,需要将数据库清空再设置。

表中有自动递增的数字时,最安全的操作是:

Statement statement = con.createStatement();
            String  str = "INSERT INTO xueya2(userid,regdate,shousuo,shuzhang,maibo) VALUES("+bloodpre.toString()+")";
            statement.execute(str);
String  str = "INSERT INTO xueya2 VALUES("+null+","+bloodpre.toString()+")";

 

为了便于MySQL数据库操作,Bean类可以重写tostring方法:

@Override
        public String toString() {
            // TODO Auto-generated method stub
//            return "BloodPre [userid=" + userid + ", time=" + time + ", highp=" + highp + ", lowp=" + lowp + ", pulse=" + pulse + "]";
            return "\'"+userid+"\',\'"+time+"\',\'"+highp+"\',\'"+lowp+"\',\'"+pulse+"\'";
        }

 

服务器端bug:

把方法封装一下就出错,封装的时候有全局变量的问题,直接传值没问题,但传静态变量就出问题,呵呵其实不是这个问题,重启程序时这个变量跳过登录界面所以没有值

NameValuePair pair1 = new BasicNameValuePair("zhongduan_id","11223344");  没问题

NameValuePair pair1 = new BasicNameValuePair("zhongduan_id",MyApplication.zhongduan_id); 出问题

这个错误应该是主线程不能更新UI

ListVIew刷新数据:

使用Listview的时候: 当要动态显示更改后的数据(例如数据库改动), 很多人应该都用过notifyDataSetChanged();这个方法来刷新Listview,显示改后的数据.

这时候就要注意了:
                 ......
                 private ArrayList<HashMap<String, Object>> usersList;
                 ......
                 usersList= query(......);     //根据查询函数获取一个ArrayList并赋值给绑定到Adapter的数据源usersList
                 sAdapter.notifyDataSetChanged();
                 ......

           如果你也是:   上面这种形式去刷新ListView的数据的话, 是不可以更新的. 必须改成如下形式:

                 ......
                //usersList= query(......);   
                 usersList.clear(); 
                 usersList.addAll(query(......));
                 sAdapter.notifyDataSetChanged();

///////////////////////////////////////////////////////////////////////////////////////

         原因是:    sAdapter会通过usersList获取List中的内容。但是实际上可能(也应该)是,在调用super(MyActivity.this, R.layout.item, usersList)时sAdapter保存了usersList指向原List(假设为List a)的引用,在调用query函数之后,usersList指向了一个新的List(List b)。但是在调用notifyDataSetChanged()时,sAdapter会跟据保存的引用(即指向List a的引用)去更新,因此当然还是原来的结果,不会进行更新。
如果大家也出现这种情况可以使用后者去刷新ListView, 应该就没问题了 

listView getView方法不执行:

原布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:android1="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#eee"
    android:orientation="horizontal" >
    
     
    <LinearLayout 
       android:id="@+id/detailfragment2"
       android:layout_width="0dp"
       android:layout_height="wrap_content"
       android:layout_weight="6" 
       android:orientation="vertical"
       >  
        <LinearLayout 
           android:id="@+id/list_title"
           android:layout_width="match_parent"
           android:layout_height="match_parent" 
           android:visibility="gone" 
           android:background="@color/common_top_bar_blue2"  
           android:orientation="horizontal"
           >         
             <TextView     
                android:layout_height="wrap_content"
                android:layout_width="0dp"
                android:textSize="25sp"
                android:layout_marginLeft="10dp"
                android:layout_weight="3"
                android:text="日期 时间"
                />
            <TextView 
              
                android:layout_height="wrap_content"
                 android:layout_width="0dp"
                 android:textSize="25sp"
                android:layout_weight="2"
                android:text="高压/低压"
                />
            <TextView  
                android:layout_height="wrap_content"
                android:layout_width="0dp"
                android:textSize="25sp"
                android:layout_marginRight="10dp"
                android:layout_weight="1"
                 android:text="脉搏"
                />
       
              </LinearLayout> 
       <ListView 
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/data_list"
            android:divider="#FFF"
            android:background="@color/common_top_bar_blue2"
            android:dividerHeight="1px"
            android:visibility="gone" 
           ></ListView>        
    </LinearLayout>
  <LinearLayout
       android:layout_width="0dp"
       android:layout_height="wrap_content"
       android:gravity="right"
       android:layout_weight="1"
       android:orientation="vertical">
         <TextView
            android1:id="@+id/tvxian"
            android1:layout_width="wrap_content"
            android1:layout_height="wrap_content"
            android1:layout_marginTop="5dp"
            android1:layout_gravity = "center"
            android1:text="视图" />   
       
       <RadioGroup
            android1:id="@+id/radioGroup1"
            android1:layout_width="wrap_content"
            android1:layout_marginTop="5dp"
            android1:layout_height="wrap_content" >
    
            <RadioButton
                android1:id="@+id/radio0"
                android1:layout_width="wrap_content"
                android1:layout_height="wrap_content"
                android1:checked="true"
                android1:text="周" />
    
            <RadioButton
                android1:id="@+id/radio1"
                android1:layout_width="wrap_content"
                android1:layout_height="wrap_content"
                android1:text="月" />

            <RadioButton
                android1:id="@+id/radio3"
                android1:layout_width="wrap_content"
                android1:layout_height="wrap_content"
                android1:text="全部" />
            <ImageView   
            android1:layout_marginTop="20dp"
            android:layout_width="match_parent"  
            android:layout_height="1dp"  
            android:background="#ffffff"  
            /> 
             <RadioButton
                android1:id="@+id/radio4"
                android1:layout_marginTop="20dp"
                android1:layout_width="wrap_content"
                android1:layout_height="wrap_content"
                android1:text="列表" />
        </RadioGroup>

   </LinearLayout>
</LinearLayout>
View Code

在平板上,下方和listview是左右布局的

 

改动后的布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:android1="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#eee"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/detailfragment2"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_weight="6"
        android:orientation="vertical" >

        <LinearLayout
            android:id="@+id/list_title"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/common_top_bar_blue2"
            android:orientation="horizontal"
            android:visibility="gone" >

            <TextView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:textSize="20sp"
                android:layout_weight="3"
                android:text="日期 时间" />

            <TextView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:textSize="20sp"
                android:layout_weight="2"
                android:text="高压/低压" />

            <TextView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_marginRight="10dp"
                android:textSize="20sp"
                android:layout_weight="1"
                android:text="脉搏" />
        </LinearLayout>

        <ListView
            android:id="@+id/data_list"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/common_top_bar_blue2"
            android:divider="#FFF"
            android:dividerHeight="1px"
            android:visibility="gone" >
        </ListView>
    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:gravity="center_vertical"
        android:orientation="horizontal" >

        <TextView
            android1:id="@+id/tvxian"
            android1:layout_marginLeft="20dp"
            android1:layout_width="wrap_content"
            android1:layout_height="wrap_content"
            android1:layout_marginTop="5dp"
            android1:text="视图" />

        <RadioGroup
            android1:id="@+id/radioGroup1"
            android1:layout_width="wrap_content"
            android1:layout_height="wrap_content"
            android:orientation="horizontal"

            android1:layout_marginTop="5dp" >

            <RadioButton
                android1:id="@+id/radio0"
                android1:layout_width="wrap_content"
                android1:layout_height="wrap_content"
                android1:checked="true"
                android1:text="周" />

            <RadioButton
                android1:id="@+id/radio1"
                android1:layout_width="wrap_content"
                android1:layout_height="wrap_content"
                android1:text="月" />

            <RadioButton
                android1:id="@+id/radio3"
                android1:layout_width="wrap_content"
                android1:layout_height="wrap_content"
                android1:text="全部" />

            <ImageView
                android:layout_width="1dp"
                android:layout_height="match_parent"
                android1:layout_marginLeft="20dp"
                android:background="#ffffff" />

            <RadioButton
                android1:id="@+id/radio4"
                android1:layout_width="wrap_content"
                android1:layout_height="wrap_content"
                android1:layout_marginLeft="20dp"
                android1:text="列表" />
        </RadioGroup>
    </LinearLayout>

</LinearLayout>
View Code

 

 根本原因是父布局的高度设置为零啦

 

 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:android1="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout
        android:id="@+id/list_title"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_alignParentTop="true" >

        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_weight="3"
            android:text="日期 时间"
            android:textSize="20sp" />

        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:text="高压/低压"
            android:textSize="20sp" />

        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp"
            android:layout_weight="1"
            android:text="脉搏"
            android:textSize="20sp" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/detailfragment2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@id/bottom"
        android:layout_below="@id/list_title" >

        <ListView
            android:id="@+id/data_list"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/common_top_bar_blue2"
            android:divider="#FFF"
            android:dividerHeight="1px"
            android:visibility="gone" >
        </ListView>
    </LinearLayout>

    <LinearLayout
        android:id="@+id/bottom"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_alignParentBottom="true"
        android:gravity="center"
        android:orientation="horizontal" >

        <TextView
            android1:id="@+id/tvxian"
            android1:layout_width="wrap_content"
            android1:layout_height="wrap_content"
            android1:layout_marginLeft="20dp"
            android1:layout_marginTop="5dp"
            android1:text="视图" />

        <RadioGroup
            android1:id="@+id/radioGroup1"
            android1:layout_width="wrap_content"
            android1:layout_height="wrap_content"
            android1:layout_marginTop="5dp"
            android:orientation="horizontal" >

            <RadioButton
                android1:id="@+id/radio0"
                android1:layout_width="wrap_content"
                android1:layout_height="wrap_content"
                android1:checked="true"
                android1:text="周" />

            <RadioButton
                android1:id="@+id/radio1"
                android1:layout_width="wrap_content"
                android1:layout_height="wrap_content"
                android1:text="月" />

            <RadioButton
                android1:id="@+id/radio3"
                android1:layout_width="wrap_content"
                android1:layout_height="wrap_content"
                android1:text="全部" />

            <ImageView
                android:layout_width="1dp"
                android:layout_height="match_parent"
                android1:layout_marginLeft="20dp"
                android:background="#ffffff" />

            <RadioButton
                android1:id="@+id/radio4"
                android1:layout_width="wrap_content"
                android1:layout_height="wrap_content"
                android1:layout_marginLeft="20dp"
                android1:text="列表" />
        </RadioGroup>
    </LinearLayout>

</RelativeLayout>
View Code

 

                                               app.zhongduan_id = login_number.getText().toString().trim();
                                                //只要登录成功,以后就不再进入登录界面啦
                                                SharedPreferences sharedPreferences = MyApplication.getContext().getSharedPreferences("runInfo", MODE_PRIVATE);    
                                                Editor editor = sharedPreferences.edit();
                                                editor.putBoolean("isFirstRun", false);

由于登录之后,登录界面就不再出现,所以下一次重新运行程序时app.zhongduan_id就不会被赋值。所以必须把app.zhongduan_id的内容本地保存

 

.sql文件转入数据库方法:

 >mysql -uroot -psu273035;

mysql>use yourdatabasename;
mysql>set names utf8;
mysql>source /tmp/database.sql;

最后,记得将database.sql删除。

数据库查询时等号和like的问题:

select shenfennum from user2 where shenfennum =412728199005233676;和等号后面有没有空格没有关系

select shenfennum from user2 where shenfennum  = '412728199005233676';

select shenfennum from user2 where shenfennum  = '412728199005233676';

posted @ 2015-05-09 18:02  疾风剑  阅读(442)  评论(0编辑  收藏  举报