Android项目《Tom伴你行》开发过程中遇到的问题总结

一安卓服务端的搭建

Eclipse+myeclipse+tomcat+mysql

1.           按钮事件的添加

代码:

mysure.setOnClickListener(btnsure);

private Button.OnClickListenerbtnsure=newButton.OnClickListener(){

        public void onClick(View v){

            myname.setText("你好!"+myname.getText().toString());

        }

};

2.           服务器连接不上mysql数据库的问题

将数据库换做access数据库就连上了。

3.           连接服务器取不到数据

privatestatic final String NameSpace="http://db.upc";

String methodName="ConnectDb";//方法名

HttpTransportSE ht = newHttpTransportSE(serviceurl);//创建HttpTransportSE对象,并指定WSDL文档的URL

       try{

       ht.call(NameSpace+methodName,envelope);

ht.call函数中的第一个参数是namespace+methodname;

开始时是null.

SoapPrimitive response =(SoapPrimitive) envelope.getResponse();//使用getResponse方法获得WebService方法的返回结果

          result="密码是:"+response.toString();

z这个地方本来用的是SoapObject类,也是导致取不到数据的原因之一,所以改用SoapPrimitive,原因参见下面的博客。

http://www.cnblogs.com/gfqFighting/archive/2012/12/06/2804671.html

4.                用toast弹出一个提示框的时候无法弹出,

忘记在toast.maketext()加.show()导致,加上.show()就好了。

5.  

Android手机/平板连接局域网访问局域网电脑Web服务器

http://blog.csdn.net/huazai963184709/article/details/12906085

6.不同的activity之间共享变量

http://www.cnblogs.com/wangsx/archive/2012/05/23/2514772.html

用通过Application Context进行变量共享

7.android中如何调整嵌套的一个linearlayout与与其上边的一个控件的间距。

在要调整的那个linearlayout中加上如下代码

android:layout_marginTop="60dp",

调整的值的大小可自行调整。

8.在给listview添加响应函数时程序奔溃

用arg2参数来判断点击了那个内容,第一条内容对应得arg2参数是0,依次类推。

lv2.setOnItemClickListener(new OnItemClickListener(){

                 publicvoid  onItemClick(AdapterView<?>arg0, View arg1,int arg2, long arg3) {

                      if(arg2==0){//点击了设置当前位置

                            Toast.makeText(ListOfSettings.this,""+arg2, Toast.LENGTH_SHORT).show();

                      }

                      if(arg2==1){//点击了拍摄实景

                            Intent it=newIntent();

                            it.setClass(ListOfSettings.this, UpLoadingPhoto.class);

                            startActivity(it);

                      }

                      if(arg2==2){//点击了关于

                            Intent it=newIntent();

                            it.setClass(ListOfSettings.this, AboutSmartbus.class);

                            startActivity(it);

                      }

                 }

           });

9. The method makeText(Context,CharSequence, int) in the type Toast is not applicable for the arguments (newAdapterView.OnItemClickListener(){}, String, int)

在这里加入activity的名字+“.”

Toast.makeText(this,""+arg2,Toast.LENGTH_SHORT).show();

 

 

10.用intent的putExtra函数在activity间传值的方法。

假设有a,b俩activity,a中有值要传到b中,在a中这样做:

Intent it=newIntent();it.setClass(a.this,b.class);it.putExtra(“x”,”hello”);

startActivity(it);

在b中这样做:

Intent intent =getIntent();

/*取出Intent中附加的数据*/

String hello = intent.getStringExtra("x");

实现传值。

11.BASE64Decoder cannot be resolved to a type

引入common-codec-1.5.jar包

在package下加入import语句

import org.apache.commons.codec.binary.Base64;

调用时用法如下:

byte[] buffer=Base64.decodeBase64(image);

12.点击拍照按钮后,完成拍照确认后不能显示在imageview且程序崩溃

首先代码问题:

protected void onActivityResult(int requestCode,int resultCode, Intent data) {

             super.onActivityResult(requestCode, resultCode, data);

              if (requestCode==CAMERA_RESULT&&resultCode==Activity.RESULT_OK) {

                      try{

                             myBitmap = BitmapFactory.decodeFile(mPhotoPath);

                             if(null !=myBitmap ){

                               myview.setVisibility(View.VISIBLE);

                               myview.setImageBitmap(myBitmap);

                               myview.setScaleType(ScaleType.FIT_CENTER);

                             }

                      }catch ( Exception e ){

                            e.printStackTrace();

                      }

              }

          }

代码是从网上拷贝的,差别都不大

然后就是从网上得知,要将AndroidManifest.xml中的android:targetSdkVersion注释掉。

注释方法:<!-- android:targetSdkVersion="18" -->

然后就调试成功!

13[ERROR]org.apache.commons.codec.binary.Base64.decodeBase64(Ljava

问题原因是:D:\Tomcat\webapps\axis2\WEB-INF\lib中已经有commons-codec-1.3.jar,所以用commons-codec-1.5.jar将其替换就好了。

14.用new AlertDialog.Builder(ListOfSettings.this)

           .setIcon(R.drawable.alert_dialog_icon)

           .setTitle(R.string.alert_dialog_text_entry)

           .setView(textEntryView)

           .setPositiveButton(R.string.alert_dialog_ok,new DialogInterface.OnClickListener() {

                publicvoid onClick(DialogInterface dialog, int whichButton) {

 

                    /* User clicked OK so do some stuff */

                      ConnectService cs=new ConnectService();

                      cs.setIpAddress(etx.getText().toString());

                      Toast.makeText(ListOfSettings.this,"ipv4地址设置成功", Toast.LENGTH_SHORT).show();

                }

           })

           .setNegativeButton(R.string.alert_dialog_cancel,new DialogInterface.OnClickListener() {

                publicvoid onClick(DialogInterface dialog, int whichButton) {

 

                    /* User clicked cancel so do some stuff */

                }

           })

            .create();

的方法,但是点击item后没有反应,到网上查后,发现是没加

alertDialog.show()方法。

15.在用android的alertdialog时,setPositiveButton这个方法里面想取得EditText的值,却报空指针异常java.lang.NullPointerException

final View textEntryView = factory.inflate(R.xml.alert_dialog, null);

etx=(EditText)textEntryView.findViewById(R.id.ipinfo_edit);//这句出错,应该使用textEntryView.findViewById

原因:默认的findViewById是你当前activity的对象,而你这里父对象应该是dialog,不应该用默认的findViewById

16.could not find method org.apache.commons.codec.binary.Base64.decodeBase64

 byte[]buffer = android.util.Base64.decode(ret,android.util.Base64.DEFAULT);

17.Theprocessing instruction target matching "[xX][mM][lL]" is not allowed

<?xmlversion="1.0" encoding="UTF-8"?>前面不要有任何其他字符,如空格、回车、换行这些否则就会出现上面的异常。 

18.安卓客户端怎么接收webservice返回的字符串数组。

首先在服务器端将要返回给客户端的字符串数组转换为字符串,要加上标记,以便在客户端解析。

服务器端代码如:

public String returnstr(){

     String mystr=null;

     StringBuffer sb=new StringBuffer();

     String []str={"1","2","3","4","5"};

     for (int i=0;i<str.length;i++){

     sb.append(str[i]+",");

     }

     mystr=sb.toString();

   return mystr;

   }

在客户端将获取的字符串解析为字符串数组

代码如下:

private String[] parseString(String result){

                 String[]ss=new String[10];

                 ss=result.split(",");

                 return ss;

           }

19.java将字符数组转换为字符串

String[] ary = {"abc", "123", "45"};

StringBuffer sb = new StringBuffer();

for(int i = 0; i < ary.length; i++){

 sb.append(ary[i]);

}

 

String newStr = sb.toString();

20.java 获取文件夹下的文件名,并转换为字符串。

先获取文件列表,然后将文件数组.toString()就转换为字符串了,好吧好简单。

File f1=new File("D:\\Tomcat\\webapps\\images");

     File[] fx=f1.listFiles();

     //String ss=null;

     String []ss=new String[100];

     System.out.println(fx.length);

     for(int i=0;i<fx.length;i++){

        ss[i]=fx[i].toString();

        System.out.println(fx[i]+"\n");

        System.out.println(ss[i]+"\n");

     }

21.listview显示sd卡中的图片

SimpleAdapter中能放置drawable中的图片,如果想放置其它来源的图片(如:SD卡、数据库、网络图片),那么需要重写它的bindView方法,这是个private方法,因此还需要重写所以调用它的方法

22.java.lang.OutOfMemoryError

在下载的时候,在循环中在图片保存完毕后,将image数组清空.

如红色代码所示。这样下载过程就不会使程序奔溃了。

代码:

for (int i=0;i<photoName.length;i++){

                  image[i]=cs.downloadphoto(cityName,photoName[i]);

                 try{         

                            byte [] buffer=android.util.Base64.decode(image[i],android.util.Base64.DEFAULT);

                            Filedestdir=new File(photoPath);

                            if(!destdir.exists())destdir.mkdir();

                            fos= new FileOutputStream(new File(destdir,photoName[i]));//保存图片

                            fos.write(buffer);

                            image[i]=null;

                            System.gc();//处理内存溢出

                            fos.flush();

                            fos.close();

                      }

                 catch(Exception e){

                      e.printStackTrace();

                      returnfalse;

                 }

           }

在显示时程序奔溃

23.拍照上传时出现java.lang.NullPointerException:file==null,程序崩溃。

由于 bitmap.recycle()引起

24. Android导入工程出现unable to get system library for the project

可能是由于sdk版本不兼容导致的。假设引入的工程sdk版本是7,而自己eclipse关联的sdk中没有版本7,便会出现找不到库的错误,此时需要更改。

右击工程--properties--Android,对话框右侧会列出各个sdk版本,点击选择就可以了,这种方式要比第一种方式好,因为会自动在default.properties文件中填写sdk版本名称,

25. WARNING: Application does not specify an API levelrequirement!

修改AndroidManifest.xml,添加sdkVersion

26. 

Androidjava.io.IOException: Permission denied解决

因为我是直接将手机用USB线连接电脑进行调试,这也恰恰是问题所在!!!我们都知道,当手机用USB线连接电脑时,SD卡上的数据是禁止访问的,所以你以这种方式运行你的程序,你就当然不具有读写SD卡地权限了,自然无法进行IO操作

27.完美解决在点击不能连续拍摄多张照片然后上传的问题

   就是在上传按钮点击事件中的函数中添加bitmap.recycle();函数,意思就是在上传照片完毕后,回收内存。如红色代码所示。

代码:

public void uploadphoto(){//将拍的照片通过Base64编码上传到服务器

            ConnectService cs=new ConnectService();

            try{

                      FileInputStreamfis=new FileInputStream(mPhotoPath);

                      System.out.println(mPhotoPath);

                      ByteArrayOutputStreambaos=new ByteArrayOutputStream();//字节数组输出流作为目的地。

                      byte [] buffer=newbyte[8196];

                      int count=0;

                      while((count=fis.read(buffer))>=0){

                            baos.write(buffer,0,count);

                      }

                      StringuploadBuffer=new String(Base64.encodeBase64(baos.toByteArray()));

                      load_result=cs.uploadPhoto(etx_loaction.getText().toString(),getPhotoFileName(), uploadBuffer);//调用webservice方法,上传照片

                      fis.close();

            }

            catch(FileNotFoundException e){

                  e.printStackTrace();

             }

            catch(IOException e){

                  e.printStackTrace();

            }

            bitmap.recycle();//上传后回收。

       }

28. access表中第一列设置为自动编号,那在insert的时候对该列怎么处理

'指定一下
sql = "insert into 20001(name,date) values('quanquan','" & Date & "')"

29. Android处理程序(listview)出现NullPointerException错误

自己写一个listview的布局xml文件,就解决了。

30.sqlite数据库中文乱码

请问有没有办法更改 windows 下 cmd(dos) 编码方式 将其改为UTF-8

2009-11-26 12:09寂寞的程序员 | 分类:Windows | 浏览4871

请问有没有办法更改 windows 下 cmd(dos) 编码方式 将其改为UTF-8?
chcp 命令,
chcp 65001  就是换成UTF-8代码页

chcp 936 可以换回默认的GBK
chcp 437 是美国英语

31. android 项目中出现红色感叹号的解决方法

 引入工程中的第三方jar包,是0kb,导致出现问题。

32. Caused by: java.lang.ClassCastException:android.widget.ImageButton

是同一个控件在XML中和JAVA文件中类型不一致导致的

32. android 显示多张图

    用android gidview 控件来显示多张图片。

33.The importandroid.widget.GridView conflicts with a type defined in the same file

定义的类名与anroid的类名相同了。改掉类名。

34. Default buffer size used in BufferedInputStreamconstructor. It would be better to be explicit if an 8k buffer/resolveUrifailed on bad bitmap uri:android.graphics.Bitmap@48394288

用gridview显示sd卡中的图片不成功,改用自定义的一个继承了simpleadapter的类,然后就显示成功。

35.android 去掉标题栏

1、在代码中实现:
在此方法setContentView(R.layout.main)之前加入:
requestWindowFeature(Window.FEATURE_NO_TITLE);标题栏就没有了。

2、在AndroidManifest.xml中实现:
注册Activity时加上如下的一句配置就可以实现。
<activity  android:name=".Activity"
      android:theme="@android:style/Theme.NoTitleBar"
  ></activity>

36.GridView添加响应事件

 gridView.setOnItemClickListener(newOnItemClickListener() 
            { 
               public void onItemClick(AdapterView<?> parent, View v, int position, longid) 
               { 

37.在android虚拟机中按钮能响应,安装到手机上后,按钮不能响应

原因:虚拟机和手机android版本不一致,导致在虚拟机中能运行的程序不能在手机中运行,将程序中的过时的api改为最新版本的,就好了.

代码:

         Old:API:proDialog.setButton("cancel",new DialogInterface.OnClickListener() {

New:proDialog.setButton(BUTTON_NEGATIVE,"cancel",new DialogInterface.OnClickListener() {

38. java.sql.SQLException:No data found

原因:access不能在一个字段上连续多次调用 rs.getString("字段名"),你需要先定义一个变量保存
39.ANDROID  SQLITE 根据时间倒序查询
select * from Page_cache  ORDER  By  newsDate desc 

39. ADB server didn't ACK

http://jingyan.baidu.com/article/454316aba27e49f7a7c03ab1.html
40.android显示百度地图显示格子,没有地图。

首先<meta-dataandroid:name="com.baidu.lbsapi.API_KEY"android:value="ttAmE6K4dSZmXCB3nCizcU1S">

               </meta-data>要放在</application>
其次换一个key.(重新申请一个)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值