Android TabbedFragment中的SqliteOpenHelper获取stackOverFlow错误和TransactionTooLargeException
我正试图在Android的TabbedFragment中使用一个数据库(从SqliteOpenHelper扩展而来)。但我有一个StackOverFlow错误和一个TransactionTooLarge异常,这是我的日志:Android TabbedFragment中的SqliteOpenHelper获取stackOverFlow错误和TransactionTooLargeException,android,fragment,sqliteopenhelper,Android,Fragment,Sqliteopenhelper,我正试图在Android的TabbedFragment中使用一个数据库(从SqliteOpenHelper扩展而来)。但我有一个StackOverFlow错误和一个TransactionTooLarge异常,这是我的日志: `--------- beginning of crash com.wen.databaseinfragment E/AndroidRuntime: FATAL EXCEPTION: main Process: com.wen.databaseinfragment,
`--------- beginning of crash
com.wen.databaseinfragment E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.wen.databaseinfragment, PID: 6566
java.lang.StackOverflowError: stack size 8MB
at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5901)
at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java
com.wen.databaseinfragment D/Error: ERR: exClass=java.lang.StackOverflowError
com.wen.databaseinfragment D/Error: ERR: exMsg=stack size 8MB
com.wen.databaseinfragment D/Error: ERR: file=ViewGroup.java
com.wen.databaseinfragment D/Error: ERR: class=android.view.ViewGroup
com.wen.databaseinfragment D/Error: ERR: method=jumpDrawablesToCurrentState line=5901
D/Error: ERR: stack=java.lang.StackOverflowError: stack size 8MB
at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5901)
at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5905)
at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewG
D/Error: ERR: TOTAL BYTES WRITTEN: 13245704
E/JavaBinder: !!! FAILED BINDER TRANSACTION !!!
E/AndroidRuntime: Error reporting crash
android.os.TransactionTooLargeException
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(Binder.java:496)
at android.app.ActivityManagerProxy.handleApplicationCrash(ActivityManagerNative.java:4164)
at com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException(RuntimeInit.java:89)
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)'
`
这是我的片段类:
public class dataBaseFragment extends Fragment {
private static final String TAG = "DataBaseFragment";
private TextView tv;
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v= inflater.inflate(R.layout.data_base_fragment,container,true);
Database db= new Database(getActivity().getApplicationContext());
SQLiteDatabase dbWrite= db.getWritableDatabase();
tv= (TextView) v.findViewById(R.id.tv);
tv.setText("Ciaoooooooo");
Log.d(TAG, "onCreateView: ");
ContentValues cv= new ContentValues();
cv.put("name","pippo");
cv.put("sex","maschio");
dbWrite.insert("user",null,cv);
cv= new ContentValues();
cv.put("name","tizia");
cv.put("sex","femmina");
dbWrite.insert("user",null,cv);
db.close();
SQLiteDatabase dbRead = db.getReadableDatabase();
Cursor cursor= dbRead.query("user",new String[]{"name","sex"},"name=?",new String[]{"pippo"},null,null,null);
while(cursor.moveToNext())
{
String name= cursor.getString(cursor.getColumnIndex("name"));
String sex =cursor.getString(cursor.getColumnIndex("sex"));
Log.d(TAG,String.format("name=%s, sex=%s",name,sex ));
}
return v;
}
}
这是我的Sqlite Openhelper类:
public class Database extends SQLiteOpenHelper {
public Database(Context context) {
super(context, "db", null,1);
}
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE user(" +
"_id INTEGER PRIMARY KEY AUTOINCREMENT," +
"name TEXT DEFAULT \"\"," +
"sex TEXT DEFAULT \"\")");
}
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
如果不附加充气视图,会发生什么情况:
View v= inflater.inflate(R.layout.data_base_fragment,container,false);
您不应该自己将片段的视图附加到容器,尽管这可能不是唯一的问题(引发的异常将是
IllegalStateException
)只是一个建议,在您完成工作后关闭光标。非常感谢。你的意思是什么?当调用inflate
时,最后一个参数(attachToRoot
)应该是false
,否则你会得到容器(附加充气视图),而不是我用充气器尝试的充气视图。充气(R.layout.data\u base\u fragment,container,false);它现在正在工作,我在更改后重建项目。非常感谢你。祝你圣诞快乐