android开发问题集锦

时间:2020-12-18 18:05:45
android开发问题集锦 1、Unable to resolve target 'android-15': 在Ecplise工作空间导入书上Android会出现错误,大部分是SDK 版本不符,如下错误提示:Error:Unable to resolve target android-15解决办法:修改工程目录下的default.properties和project.properties文件里的内容target=android-5改成target=android-10(2.3为10或者其他版本)就可以了
2、如何打开从别处复制过来的项目?用导入方式 File->Import->General->Existing Project into WorkSpace->(选中你的项目就行了)
3、Obsolete proguard file; use -keepclasseswithmembers解决方法:
  • 打开 lint warnings view (Window > Show View > Other > android > Lint Warnings) 然后修改 proguard.cfg
  • 把有错行的 "keepclasseswithmembernames" 改为 "keepclasseswithmembers"
  • 重编绎  (点Lint Warnings view里的refresh灯泡左边的按钮)
  • 如果还报错,就接着改其它行。
4、asp获取标准的昨天今天时间:
timefrom=formatdatetime(Cdate(now())-1,2)&" "&Hour(Now)&":"&Minute(Now)&":"&Second(Now)
 timeto=formatdatetime(Cdate(now()),2)&" "&Hour(Now)&":"&Minute(Now)&":"&Second(Now)
 5、LIST数据问题:

String temp = "[{\"aa\":\"1\",\"bb\":\"2\"},{\"aa\":\"3\",\"bb\":\"4\"},{\"aa\":\"5\",\"bb\":\"6\"}]"; 

        List<Map<String, Object>> lm = Test.getList(temp); 

        for(int i=0;i<lm.size();i++){ 

            System.out.println(lm.get(i).get("aa")); 

            System.out.println(lm.get(i).get("bb")); 

        } 

 6、空间居中

通过设置 android:gravity="center" 来让 EditText 中的文字在 EditText 组件中居中显示;同时我们设置 EditText 的 android:layout_gravity="right" 来让 EditText 组件在 LinearLayout 中居中显

 7、让控件在一行

</LinearLayout>
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

8、String 是否为空的判断正确的写法应该先加上name != null的条件,如例:
if (name != null && !name.equals("")) {
     //do something
}

或者

if (!"".equals(name)) {//将""写在前头,这样,不管name是否为null,都不会出错。
     //do something
}

9、Failed to install *.apk on device 'emulator-5554': timeout

    错误提示:

Failed to install helloworld.apk on device 'emulator-5554': timeout

或者

the user data image is used

 

原因:

由于模拟器已经开启而没有关闭或者非法关闭引起的。

解决方法:

删除 C:\Documents and Settings\Administrator\.android\avd\对应版本.avd
下所有以.lock结尾的文件夹。

  

或者

 

Failed to install *.apk on device *:

timeout Launch canceled!

 还有一种办法:

在window->preferences->Android->DDMS->ADB connection time out (ms): 


将这个值设置的大一些,默认为5000,我设置成500000,然后就OK了。我有一次试N种方法都解决不了,后来就是用这个办法解决的。

10、使用MapAbc地图Api时,提示:Canvas: trying to use a recycled bitmap android.graphics.BitmapIntent intent=new Intent();//新Active           intent.setClass(CarNearby.this, SearchCarNearby.class);           Bundle bundle=new Bundle();//active间传值           bundle.putInt("Lat", pointx.getLatitudeE6());           bundle.putInt("Lng", pointx.getLongitudeE6());          //  bundle.putInt("FatherActivity", 2);           intent.putExtras(bundle);           startActivity(intent);         // CarNearby.this.finish();//注意:此处若是finish,将会导致下一个使用地图的Activity程序出现错误:                                     //Canvas: trying to use a recycled bitmap android.graphics.Bitmap}11、从A切换到B的过程中出现黑屏可以在Manifest文件中改变B的theme,在theme里添加<item name="android:windowIsTranslucent">true</item>,这样从A到B的过程中,因为B是透明的,所以背景就是A。这样的用户体验比较好。        <activity android:name=".ShakeSearchCarNearby">            <item name="android:windowIsTranslucent">true</item>        </activity>
12、在调程序时总是出现异常关闭的现象,log显示:E/AndroidRuntime(398):Caused by: java.lang.ClassCastException: android.widget.ImageButton折腾了我一下午,后来发现是同一个控件在XML中和JAVA文件中类型不一致导致的。无语死,亏我还一行一行的在JAVA文件里找错误呢。导致问题原因:XML中:[html] view plaincopy<ImageButton                android:id="@+id/left"               android:layout_height="30.0dip"               android:layout_width="30.0dip"               android:layout_centerVertical="true"               android:layout_toRightOf="@+id/clock"               android:layout_marginLeft="40dp"               android:src="@drawable/btn_scroll_left"               />  JAVA文件中:[java] view plaincopyprivate Button button_left;  button_left = (Button)findViewById(R.id.left);  解决方法:把两个控件类型改成一致的就可以了:private ImageButton button_left;
13、URL提交数据含有汉字等符号,需要URLEncoder.encode,否则会出错。
在客户端把中文字符用URLEncoder.encode()进行转码,在服务器端用URLDecoder.decode()进行解码,这样就能正常的提取中文字符了   java.net.URLEncoder.encode("鲁LT1111")

14、Sqlite查询结果按照相关度排序
如果不按时间排序,只按
标题中同时出现"数据库"和"Sql" >> 内容中同时出现"数据库"和"Sql" >> 标题中出现"数据库"或"Sql" >>内容中出现"数据库"或"Sql"
排序可以用:
Select Title,Content from Article where
Title like '%数据库%' and Title like '%Sql%'
union all
Select Title,Content from Article where
not (Title like '%数据库%' and Title like '%Sql%')
and Content like '%数据库%' and Content like '%Sql%'
union all
Select Title,Content from Article where
not (Title like '%数据库%' and Title like '%Sql%')
and not (Content like '%数据库%' and Content like '%Sql%')
and (Title like '%数据库%' or Title like '%Sql%')
union all
Select Title,Content from Article where
Title not like '%数据库%' and Title not like '%Sql%'
and not (Content like '%数据库%' and Content like '%Sql%')
and (Content like '%数据库%' or Content like '%Sql%')
15、动态创建按钮数组:要通过Button bt  = new Button (this);新建再传递Button[] btnguanjianci = new Button[gjc.length];
for(int ii=0;ii<gjc.length;ii++)        {final String gjci=gjc[ii];        Button bt  = new Button (this);          bt.setText(gjc[ii]);          bt.setLayoutParams(new ViewGroup.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT , ViewGroup.LayoutParams.WRAP_CONTENT));          bt.setOnClickListener(new Button.OnClickListener() {        public void onClick(View v) {        Toast.makeText(getApplicationContext(), gjci,        Toast.LENGTH_SHORT).show();        }        });          btnguanjianci[ii]=bt;        Layoutguanjianci.addView(btnguanjianci[ii]);                }

16:E/Database(2122): sqlite3_open_v2("/data/data/com.awz.gpsRec/databases/gps2012821.db", &handle, 6, NULL) failed:打开数据库的权限不够,将数据库设置为所有权限777

17 BAIDU MAP API:10-16 04:20:07.355: E/AndroidRuntime(450): Caused by: android.view.InflateException: Binary XML file line #74: Error inflating class com.baidu.mapapi.MapView
1、改为:public class Plc_Click extends MapActivity;
17.2::10-16 04:46:33.650: E/AndroidRuntime(537): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.awz.taxi/com.awz.taxi.Plc_Click}: java.lang.ClassCastException: android.app.Application
在AndroidManifest.xml里面application标签里少了句android:name=".BMapApiDemoApp" <application android:icon="@drawable/icon" android:label="@string/app_name"    android:name=".BMapApp" android:debuggable="true">18.在“”分享按钮里加上自己的程序,并通过程序读取传来的数据:比如传一个经纬度,处理这个事情的是SendActivity:图:http://www.eoeandroid.com/data/attachment/forum/201212/11/151641v88gf83ccfj8i03f.jpg
<activity
            android:name=".SendActivity">
            <intent-filter> 
                <action android:name="android.intent.action.SEND"></action> 
                <category android:name="android.intent.category.DEFAULT"></category> 
                <data android:mimeType="text/plain"></data> 
            </intent-filter>
        </activity>
然后在SendActivity。class添加:
@Override
    protected void onStart() { 
        super.onStart(); 
        Intent txtIntent=getIntent(); 
        String Lat,Lng;  //39.452246,110.541718
        String LL = txtIntent.getStringExtra(Intent.EXTRA_TEXT);
        if (LL == null)
            LL = "";
        try { 
         if(!("".equals(LL))){
         String[]  LLL = LL.split(",");
         Lat=LLL[0];
         Lng=LLL[1];
         Log.i("Lat/Lng",Lat+"/"+Lng);
         med.setText(LL);
         mTextView.setText(LL);
         Toast.makeText(getApplicationContext(), "二维码方式获取经纬度:"+LL, 1);
         }
        } catch (Exception e) { 
         Log.i("118-login","二维码方式获取经纬度失败");
         Toast.makeText(getApplicationContext(), "二维码方式获取经纬度失败"+e.getMessage(), 1); 
        } 
      //  mTextView.setText(txt); 
    }

19、引用jar中资源文件的修改:用winrar打开并修改相关图片,比如图标(可改为透明的,不能删除)再压缩回去就行。

20、报错:java.lang.NoClassDefFoundError: com.baidu.mapapi.BMapManager
解决方案:
一、右击项目->properties->Java Build Path->Order and Export,在需要引用的包前面打勾。
二、Project->Clean...
问题解决,
文章转自于PC珠江路??http://www.pczjl.com/pczjl/blog/forum.php?mod=viewthread&tid=1418 ;

21\很多人出现了java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{*****Activity}: java.lang.ClassNotFoundException: Didn't find class "*****Activity" on path: /data/app/*******.apk的错误,在android开发中,我也遇到了这个问题,纠结了两天,终于解决了,结合我自己加上网上的找到的,现提供给大家。


1。Manifest文件中注册的Activity的名称,有没有写错,包名有没有搞错,有些网友,可能只写一个类名,前面用点号代替,但是这个类不在默认的包内,所以报这个错,那么只要写上类的全名,即可。


2。有些android,需要一些第三方的包,直接将其引入,在以前是可以的,但是在最新的adt中不行,必须在程序中新建一个libs文件夹,将第三方的jar文件copy到libs文件夹中,才行,很多人因为这样才报错,特别是以前的项目,默认并没有这个libs文件夹,但是新版本的adt,默认就建了libs这个文件夹。


3。有一点也很重要,在Java Build Path面板下的Order and Export中,一定要把你引入的jar文件,勾上,否则,跟没引用一样,切记。


一般也就是以前的原因了,如果大家有看不明白的,或者有什么其他原因的,请跟我留言,共同分享,共同进步!

 22\android.os.NetworkOnMainThreadException异常如何解决

在做android开发 大家也会经常莫名其妙遇到各种问题,今天遇到这个问题也很奇怪,项目一直采用的是android sdk2.2开发

上一个app没有出现如题的问题,但这个版本却出现了,后来在网上看有说添加代码


[java] view plaincopy
  1. <span style="font-size:18px;">           详见StrictMode文档  
  2.             StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()  
  3.                     .detectDiskReads()  
  4.                     .detectDiskWrites()  
  5.                     .detectNetwork()   // or .detectAll() for all detectable problems  
  6.                     .penaltyLog()  
  7.                     .build());  
  8.             StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()  
  9.                     .detectLeakedSqlLiteObjects()  
  10.                     .detectLeakedClosableObjects()  
  11.                     .penaltyLog()  
  12.                     .penaltyDeath()  
  13.                     .build());</span>  

这样也可以解决问题,但sdk就不能采用2.2了

还有种解决办法就是在AndroidManifest.xml 里面进行配置

最近之所以出现这样问题是我在里面这样写的

[html] view plaincopy
  1. <span style="font-size:18px;">   <uses-sdk  
  2.         android:minSdkVersion="3"  
  3.         android:targetSdkVersion="14" /></span>  
出现了问题

后来改为

[html] view plaincopy
  1. <span style="font-size:18px;">   <uses-sdk  
  2.         android:minSdkVersion="3"  
  3.         android:targetSdkVersion="8" /></span>  

这样就可以了!
 
baidu地图相关 1、运行程序出现如下错误
  05-02 17:09:31.019: D/BMapApiEngine_v1_3_0(3703): BMapApiEngine_v1_3_0 library not found!
05-02 17:09:31.019: D/BMapApiEngine_v1_3_0(3703): Couldn't load BMapApiEngine_v1_3_0 from loader dalvik.system.PathClassLoader[dexPath=/data/app/com.surfing.conference-
 解决过程:
1、下载了一个BMapApiEngine_v1_3_0放在libs/armeabi文件夹下,在运行程序,报同样的错误;

解决办法:
1、在工程目录下新建一个jars文件夹,把libs文件夹下的所有jar包,拷贝到jars目录下;
2、在工程属性中,移除的jar文件,重新加入jars文件下的jar文件;
运行工程,问题解决。
 Android在初始化时弹出popwindow的方法Android中在onCreate()时弹出popwindow,很多人都有过类似的需求吧,但是直接在onCreate()中调用popwindow的showAtLocation()方法是会报异常的,原因是此时activity还没有初始化完毕,网上也有一些解决方法,但一般都是通过延时一小段时间再弹出实现的,代码不够健壮。其实可以通过不断的检测当前activity的状态,一旦初始化完毕立即调用popwindow的showAtLocation()方法显示。详细代码如下: 
/************************************************************************ * * 该类用来在初始化的时候弹出一个popwindow,用到的而已文件如下,特别要注意的是其中的  * android:minHeight="1dp" 和android:minWidth="1dp"属性。初始化时弹出popwindow的关键是 * 要等待整个activity初始化完毕后再调用showAtLocation()方法,否则会出异常。 * 实现方式就是不停的检测acitvity是否初始化完毕,一旦完毕就调用 * showAtLocation() 方法显示popwindow。 * * 以下为布局文件: *<?xml version="1.0" encoding="utf-8"?> *<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" *    android:id="@+id/main" *    android:layout_width="fill_parent" *    android:layout_height="fill_parent" *    android:minHeight="1dp" *    android:minWidth="1dp" *    android:orientation="vertical" > *</LinearLayout> * * 作者:石兴 * 完成时间:2012/3/10 * 版本 :1.0 * ************************************************************************/
package cn.sd.sx.initpopw;
import android.app.Activity;import android.graphics.Color;import android.os.Bundle;import android.os.Handler;import android.view.Gravity;import android.view.View;import android.view.ViewGroup.LayoutParams;import android.widget.LinearLayout;import android.widget.PopupWindow;import android.widget.TextView;import cn.sd.sx.popw.R;
public class PopWActivity extends Activity {private PopupWindow mPopupWindow;private Handler mHandler;// 检测时间间隔private int detchTime = 5;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        mHandler = new Handler();        // 显示popWindow        showPopWindow();    }
private void showPopWindow()    {    LinearLayout view = new LinearLayout(this);    LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT,    LayoutParams.FILL_PARENT);    TextView txt1 = new TextView(this);    txt1.setLayoutParams(params);    txt1.setGravity(Gravity.CENTER);    txt1.setText("txt1");    txt1.setBackgroundColor(Color.RED);    view.addView(txt1);    mPopupWindow = new PopupWindow(view, 300,300);    mPopupWindow.setOutsideTouchable(true);        /*****************以下代码用来循环检测activity是否初始化完毕***************/    Runnable showPopWindowRunnable = new Runnable() {@Overridepublic void run() {// 得到activity中的根元素View view = findViewById(R.id.main);// 如何根元素的width和height大于0说明activity已经初始化完毕if( view != null && view.getWidth() > 0 && view.getHeight() > 0) {// 显示popwindow   mPopupWindow.showAtLocation(PopWActivity.this.findViewById(R.id.main),   Gravity.CENTER, 0, 0);   // 停止检测mHandler.removeCallbacks(this);} else {// 如果activity没有初始化完毕则等待5毫秒再次检测mHandler.postDelayed(this, detchTime);}}};// 开始检测mHandler.post(showPopWindowRunnable); /******************以上代码用来循环检测activity是否初始化完毕*************/    }}

Android如何将Activity以Dialog的形式显示 :
1、AndroidManifest.xml 文件中,申明 activity 的主题使用自定义对话框样式。
<activity android:name=".SensorGetValueActivity"
                android:label="@string/activity_custom_dialog"
                android:theme="@style/Theme.CustomDialog">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.SAMPLE_CODE" />
            </intent-filter>
</activity>

2、res/values/styles.xml 样式文件中定义一个对话框主题样式,这里继承了 android:style/Theme.Dialog 主题,

并且窗口样式 android:windowBackground 引用了 @drawable/filled_box

<style name="Theme.CustomDialog" parent="android:style/Theme.Dialog">
    <item name="android:windowBackground">@drawable/filled_box</item>
</style>

3、res/drawable/filled_box.xml 定义了 Shape 类型的 drawable(抽象的可画区域),最终是通过这个来实现新对话框的样式。
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#f0600000"/>
    <stroke android:width="3dp" color="#ffff8080"/>
    <corners android:radius="3dp" />
    <padding android:left="10dp" android:top="10dp"
        android:right="10dp" android:bottom="10dp" />
</shape>