您的位置:首页 > 移动开发 > Android开发

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

2014-10-10 23:35 771 查看
一安卓服务端的搭建

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.(重新申请一个)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息