android开发中出现的错误集(不断更新)


最后更新:2013-01-16html

23.在使用AndroidHttpClient时有以下错误:java

01-16 22:18:39.222: E/AndroidHttpClient(26745): java.lang.IllegalStateException: AndroidHttpClient created and never closed

 这个主要是由于没有调用AndroidHttpClient的close()方法。它的close()方法以下:android

/**
	 * Release resources associated with this client.  You must call this,
	 * or significant resources (sockets and memory) may be leaked.
	 */
	public void close() {
		if (mLeakedException != null) {
			getConnectionManager().shutdown();
			mLeakedException = null;
		}
	}

在咱们的使用中在finally语句块中调用其close方法便可。web

finally {
	if(httpClient != null) {
	    httpClient.close();
	}
}

     

最后更新:2012-11-12sql

23,在使用一个FrameLayout做为容器时,将一个Frament实例动态添加进布局时,出现以下错误提示:shell

The specified child already has a parent. You must call removeView() on the child's parent first.

解决办法就是: windows

网络

@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		Log.i(DIALOG_FRAGMENT, "====(3)onCreateView========>");
		View view = inflater.inflate(R.layout.auth, container, false);
		initViews(view);
		return view;
	}

中,使用,注意带参数falseapp

View view = inflater.inflate(R.layout.auth, container, false);
eclipse

22.android:filterTouchesWhenObscured

 view所在窗口被其它可见窗口遮住时,是否过滤触摸事件。

 结果由于有些应用会在界面的上面加一层,致使软件不可滑动。因此。


最后更新 2012-04-28

 

21.接下面的错误:

05-10 16:16:23.830: W/dalvikvm(15086): threadid=1: thread exiting with uncaught exception (group=0x40a4b1f8)
05-10 16:16:23.860: E/AndroidRuntime(15086): FATAL EXCEPTION: main
05-10 16:16:23.860: E/AndroidRuntime(15086): java.lang.IllegalStateException: Activity has been destroyed
05-10 16:16:23.860: E/AndroidRuntime(15086): 	at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1314)
05-10 16:16:23.860: E/AndroidRuntime(15086): 	at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:541)
05-10 16:16:23.860: E/AndroidRuntime(15086): 	at android.support.v4.app.BackStackRecord.commitAllowingStateLoss(BackStackRecord.java:529)
05-10 16:16:23.860: E/AndroidRuntime(15086): 	at cn.ditouch.client.activity.BaseFragmentActivity.removeFragmentDialog(BaseFragmentActivity.java:129)
05-10 16:16:23.860: E/AndroidRuntime(15086): 	at cn.ditouch.client.activity.BaseFragmentActivity.removeFragmentDialog(BaseFragmentActivity.java:114)
05-10 16:16:23.860: E/AndroidRuntime(15086): 	at cn.ditouch.client.guilin.DiTouchClientActivity.access$1(DiTouchClientActivity.java:1)
05-10 16:16:23.860: E/AndroidRuntime(15086): 	at cn.ditouch.client.guilin.DiTouchClientActivity$ConnectServerTask.onPostExecute(DiTouchClientActivity.java:299)
05-10 16:16:23.860: E/AndroidRuntime(15086): 	at cn.ditouch.client.guilin.DiTouchClientActivity$ConnectServerTask.onPostExecute(DiTouchClientActivity.java:1)
05-10 16:16:23.860: E/AndroidRuntime(15086): 	at android.os.AsyncTask.finish(AsyncTask.java:602)
05-10 16:16:23.860: E/AndroidRuntime(15086): 	at android.os.AsyncTask.access$600(AsyncTask.java:156)
05-10 16:16:23.860: E/AndroidRuntime(15086): 	at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615)
05-10 16:16:23.860: E/AndroidRuntime(15086): 	at android.os.Handler.dispatchMessage(Handler.java:99)
05-10 16:16:23.860: E/AndroidRuntime(15086): 	at android.os.Looper.loop(Looper.java:137)
05-10 16:16:23.860: E/AndroidRuntime(15086): 	at android.app.ActivityThread.main(ActivityThread.java:4424)
05-10 16:16:23.860: E/AndroidRuntime(15086): 	at java.lang.reflect.Method.invokeNative(Native Method)
05-10 16:16:23.860: E/AndroidRuntime(15086): 	at java.lang.reflect.Method.invoke(Method.java:511)
05-10 16:16:23.860: E/AndroidRuntime(15086): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
05-10 16:16:23.860: E/AndroidRuntime(15086): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
05-10 16:16:23.860: E/AndroidRuntime(15086): 	at dalvik.system.NativeStart.main(Native Method)

 在此有说是由于FragmentManager本身是在onCreate中初始化的因此要把fragment的操做放到后面去:

http://stackoverflow.com/questions/6938368/why-do-i-get-illegalstateexceptions-every-time-i-start-an-activity-that-uses-sup

 

20. 在debug带有android.support.v4的包时,结果出现下面的错误:

  05-10 15:47:09.850: E/AndroidRuntime(12744): java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState

比较完整的stack以下:

05-10 15:47:06.470: W/dalvikvm(12744): threadid=1: thread exiting with uncaught exception (group=0x40a4b1f8)
05-10 15:47:09.850: E/AndroidRuntime(12744): FATAL EXCEPTION: main
05-10 15:47:09.850: E/AndroidRuntime(12744): java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
05-10 15:47:09.850: E/AndroidRuntime(12744): 	at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1299)
05-10 15:47:09.850: E/AndroidRuntime(12744): 	at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1310)
05-10 15:47:09.850: E/AndroidRuntime(12744): 	at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:541)
05-10 15:47:09.850: E/AndroidRuntime(12744): 	at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:525)
05-10 15:47:09.850: E/AndroidRuntime(12744): 	at android.support.v4.app.DialogFragment.show(DialogFragment.java:123)

在此处有人也一个有点相似问题:

http://stackoverflow.com/questions/7575921/illegalstateexception-can-not-perform-this-action-after-onsaveinstancestate-h

我看到上面有提到onSaveInstanceState(),因而就重写了下这个.像上面说的不能调用super.我调用了,并且竟然就tmd没有错误提示了..

 

19.05-10 16:08:43.190: E/AndroidRuntime(14243): java.lang.IllegalStateException: addToBackStack() called after commit()

  

18.在使用android.support.v7.widget.GridLayout时出错:

  参考:http://stackoverflow.com/questions/10133078/assistance-please-setting-up-android-support-package-v7-for-eclipse-gridlayou

  其中有两个重要的特色:1.要将android-support-v7做为一个库引用项目.

而后使用全名.而后,仍是要将android-support-v7做为一个库项目,来处理,命名空间等待.

17.  android.database.sqlite.SQLiteException: unable to close due to unfinalised statements

  这个我本身的是在一个网络出现异常,因此没有按顺序执行close(),解决办法是添加finally语句并执行close()语句.

(2012-04-23)

16.04-23 14:50:08.344: E/AndroidRuntime(28034): Caused by: java.lang.IllegalStateException: Fragment cn.ditouch.client.activity.EditMenuxFragment did not create a view.

在使用Fragment中出现上面的错误,我是照着Google Android的文档来作的.

错误的缘由是我将FrameLayout当作了fragment想固然了...

15. android.util.AndroidRuntimeException: requestFeature() must be called before adding content

在为AlertDialog中使用自定义布局时,在Builder中调用 了create()后不当心在使用了setContentView()

事实上也不该该在使用setConentView了.由于若是先设置了这个会与后面添加产生冲突..

14.android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application

原来及解决办法:

致使报这个错是在于new AlertDialog.Builder(mcontext),虽然这里的参数是AlertDialog.Builder(Context context)但咱们不能使用getApplicationContext()得到的Context,而必须使用Activity,由于只有一个Activity才能添加一个窗体。 

Thanks to :http://blog.csdn.net/Vincent_czz/article/details/5777725

13. 在使用AlertDialog中,使用了以下代码.

return new AlertDialog.Builder(this)
					.setTitle("提醒!")
					.setMessage(args.getString("MESSAGE"))
					.setCancelable(false)

  可是,实际使用我发现,若是我是在Activity中托管使用这个的话,在整个Acitivty生命周期中只建立一次,因此,args.getString()就只能获得第一次获得内容.

解决办法是使用onPrepareDialog(),如今知道为何要这样子设计了.

@Override
	protected void onPrepareDialog(int id, Dialog dialog, Bundle args) {
		AlertDialog aDialog = (AlertDialog) dialog;
		switch (id) {
		case DIALOG_FIRE_ALL_ORDER:
			aDialog.setMessage(args.getCharSequence("MESSAGE"));
			break;
		case DIALOG_DELETE_ORDER_NON_FIRED:
			aDialog.setMessage(args.getString("DISH_NAME"));
		default:
			break;
		}
	}

12.在ListView的适配器中出现:java.lang.IndexOutOfBoundsException: Invalid index 32, size is 23

缘由是我在getView()中使用了.

mCheckBoxList.add(position, holder.check);

解决办法是,使用:mCheckBoxList.add(mCheckBoxList.size(), holder.check);

11.NetworkOnMainThreadException

 当我把targetSdkVersion设置为11时,我原来在UI线程执行网络操做的代码

就会出现上面的异常,解决办法是使用AsyncTask来网络操做.或者使用其余的网络库如Volley,

10. close() was never explicitly called on database

04-12 17:19:34.020: E/SQLiteDatabase(2743): close() was never explicitly called on database '/data/data/xx.db'

这个在我使用完SQLiteOpenHelper的子类对象以后调用close()方法没有报这个错了.

  Thanks to :http://stackoverflow.com/questions/4464892/android-error-close-was-never-explicitly-called-on-database

9.在使用SQLiteOpenHelper时出现这样一个错误:Can't upgrade read-only database from version 0 to 1

04-12 16:59:11.230: E/AndroidRuntime(2119): android.database.sqlite.SQLiteException: Can't upgrade read-only database from version 0 to 1: /data/data/databases/xx.db

从输出的log中我发现如今这个错误的时候,同时前面会有一个sql语法错误.

解决办法是根据提示,仔细检查sql语句看是否有错误.

8.在UI线程中开了一个线程来初始化一个ViewFlipper.

致使下面的错误 :

04-10 14:08:36.356: E/AndroidRuntime(26716): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.


解决办法使用post方法将操做post过去 :

ToastUtils.showLong(this, "正在加载楼层数据...");
		new Thread(new Runnable() {
			@Override
			public void run() {
				for (String floorId : FLOOR_NUMS) {
					final List<Table> tables = TableDao.findByFloorId(floorId);
					mFloorFlipper.post(new Runnable() {
						@Override
						public void run() {
							buildFloorView(tables);
						}
					});
				}
			}
		}).start();

7.在使用LayoutInflater.inflate()时常常被第地个参数给搞定了.我是在适配器上使用的:

public View getView(int position, View convertView, ViewGroup parent) {
	if (convertView != null)return convertView;
        View view = mInflater.inflate(R.layout.menu_item, parent);

错误信息以下:

04-02 02:49:06.322: E/AndroidRuntime(494): java.lang.UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView

应该改为下面这样 :mInflater.inflate(R.layout.menu_item,parent,false);由于咱们须要使用parent来帮助构造LayoutParams,但不是要添加进parent

6.在使用SharedPreferences的时候,使用了getPreferences().可是这个是只供本Acitivity使用的.

若是在本应用的其它activity中共享这些设置,就要使用getSharedPreferences();

 

5.第四个错误说到,要在每个ListView中的项中实现,手势滑动判断,删除功能.可是若是没有设置背景图片或者背景色的时候,当手滑动区域超过一个ListView的项时,就会出现ListView项背景反色,非常让人讨厌,一开始我觉得是由于,ListView项,得到了焦点的缘由,就尝试在项中的GestureOverlayView中及在其中的TextView的onTouch方法中若是MotionEvent的action为down的话,就返回true,这个系统就不会处理高亮反色了,可是其实不是这样的,究竟是怎么样的呢?

目前还不清楚,个人解决办法是在GestureOverlayView中设置一张背景图片.就OK了.就算这个ListView中各个项高亮反色了.

也不会影响.

错误设置代码以下,处理高亮仍是不要这样用了-在这样的场景下:

private static class IgnoreTouchListener implements View.OnTouchListener {
		@Override
		public boolean onTouch(View v, MotionEvent event) {
			Log.i(TAG, "Ignore touch" + v.getClass() + "," + event.getAction());
			switch (event.getAction()) {
			case MotionEvent.ACTION_DOWN:
				return true;
			default:
				break;
			}
			return false;
		}
	}

4. 如今的一个须要是要在一个ListView的项中滑动时,就表示删除其中一个项.

开始用GestureDetector可是,弄了好久仍是没有反应.因此做罢,关键在一个项中,我喜欢滑动的时候可以有像用笔画线同样的效果.

ListView中的项对应布局文件以下 :(名为:orderlist_item.xml)

<?xml version="1.0" encoding="utf-8"?>
<android.gesture.GestureOverlayView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/gestures"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:eventsInterceptionEnabled="true"
    android:background="@drawable/bg_current_order_item"
    android:orientation="vertical">
        <TextView 
               android:id="@+id/order_list_item_text"
               android:layout_width="wrap_content" 
               android:layout_height="wrap_content" 
               android:padding="5dp"
               android:text="TextView01"
               android:textAppearance="?android:attr/textAppearanceLarge"  
               android:layout_centerHorizontal="false" 
               >
         </TextView>
</android.gesture.GestureOverlayView>

开始尝试:这样:

GestureOverlayView gestures = (GestureOverlayView)findViewById(R.id.gestures);

gestures.addOnGesturePerformedListener(this);

可是这样会报空指针错误,就是取不到gestures.可是我帮android的示例项目也是这样的.android资源中文章:

docs/resources/articles/gestures.

后来我想了一下,在android中的示例项目 中,这是一惟一的一个文件,可是在个人使用场景中这样的一个文件在ListView中重复使用了,想起来这样的一个ID也会在上面存在多个.因而用R.id.gestures是找不到了,就算用R.layout.orderlist_item也找不到.

因而我就在本身实现的BaseAdapter中的View来处理这样的逻辑了:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
       View view = null;
	if (convertView == null) {
		view = mInflater.inflate(R.layout.orderlist_item, null);
		TextView textView = (TextView) view
						.findViewById(R.id.order_list_item_text);
		Map<String, Object> map = (Map<String, Object>) mData
						.get(position);
		String itemText = (String) map.get(ITEM_TEXT);
		textView.setText(itemText);
		view.setTag(mData.get(position));
		GestureOverlayView gestures = (GestureOverlayView) view;
		gestures.addOnGesturePerformedListener(ClientStationActivity.this);

	}
	return view;
}

其中处理在主Activity中实现的OnGesturePerforedListener接口,其中处理方法 以下 :

@Override
	public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
		ArrayList<Prediction> predictions = mLibrary.recognize(gesture);
		if (predictions.size() < 1)
			return;
		if (predictions.get(0).score < 0.27)
			return;
		String action = predictions.get(0).name;
		Log.i(TAG, "action:" + action + "," + predictions.get(0).score);
		Map<String, Object> map = (Map<String, Object>) overlay.getTag();
		String itemText = (String) map.get(ITEM_TEXT);
		// TODO 完成删除
	}

上面的代码有一个要注意的地方就是.经过实际的手势来判断看你认为的一个比较正确的手势的score得分是多少.

 

3.

不能在android项目中运行Java程序.

有时候想运行测试一下一个简单的Java方法,可是呢今天发现了这样一个问题:

而后我就想通了.

报告错误以下 :

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (classFileParser.cpp:3494), pid=2260, tid=2492
#  Error: ShouldNotReachHere()
#
# JRE version: 6.0_31-b05
# Java VM: Java HotSpot(TM) Client VM (20.6-b01 mixed mode windows-x86 )
# An error report file with more information is saved as:
# E:\workspace\demo\hs_err_pid2260.log
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
#

 

1.

03-17 04:14:51.044: E/AndroidRuntime(390): java.lang.IllegalStateException: Circular dependencies cannot exist in RelativeLayout

 说的是在RelativeLayout循环引用了吧。我相对你,你又相对我。哈哈。 

2.

03-17 08:27:04.605: E/AndroidRuntime(610): java.lang.RuntimeException: Unable to start activity ComponentInfo{}: android.content.res.Resources$NotFoundException: String resource ID #0x7f060004

事实上我看到我项目的R文件上有这么一句:

        public static final int new_table=0x7f060004;

而我引用资源的代码以下:

private static final int[] LABELS = new int[] { R.string.new_table,
			R.string.find_bill, R.string.change_waiter,
			R.string.reconnect_server, R.string.exit_system };
getString(LABELS[i])

上网暂时没有查找到什么有用的,由于别人出现这个错误是由于在setText()的时候直接用了int型的值。

我呢?哎。


而后我在回学校路上一直在想,而后我想,忽然,我想起了android查找资源的的解析方法.

由于我开始开发时只提供了values-zh的字符串值,而没有提供values下的默认字符串值.

由于模拟器默认的语言环境是英文的,因此就不会去查找values-zh下的字符串资源.

因此才会致使上面的错误.

而后只要在values中添加对应的字符串资源就OK了.

 但愿个人这个错误,能给你们在遇到这个错误时,提供一些解决问题的启示.

 在android的参考文档  guide/topics/resources/providing-resources.html 能够了解更多.

相关文章
相关标签/搜索