بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
خطای NullPointerException در دستور insert (حل شد)
برنامه زیر تو خط مربوط به دستور insert خطای NullPointerException میدهد لطفا راهنمایی کنید
فایل xml برنامه
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.hamidi.firetdb2.MainActivity" >
<Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="Insert" />
</RelativeLayout>
package com.hamidi.firetdb2;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
private Dbhandler data;
private Button insert;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
data=new Dbhandler(this);
insert=(Button) findViewById(R.id.btn1);
insert.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
data.open();
data.insertinto("hassan","abc","hhgh");
data.close();
}
});
}
}
بالایی فایل اکتیویتی اصلی برنامه است
این یکی فایل کلاس ایجاد دیتا بیس است Makedatabase
package com.hamidi.firetdb2;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class Makedatabase extends SQLiteOpenHelper{
public static final String dbname="dbname";
public static final String tblname="tblname";
public static final String id="id";
public static final String username="username";
public static final String password="pasword";
public static final String name="name";
public static final String query="CREATE TABLE "+tblname+"( "+id+" INTEGER PRIMARY KEY AUTOINCREMENT, "+username+" TEXT , "+password+" TEXT , "+name+" TEXT );";
public Makedatabase(Context context) {
super(context, dbname, null, 1);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(query);
}
@Override
public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXIST "+tblname);
onCreate(db);
}
}
اینحا هم فایل کار روی دیتا بیس است Dbhandler که در دستور insert خطا میدهد
package com.hamidi.firetdb2;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class Dbhandler {
private Makedatabase mydb;
private SQLiteDatabase database;
public Dbhandler(Context context){
mydb=new Makedatabase(context);
}
public void open(){
mydb.getWritableDatabase();
}
public void close(){
mydb.close();
}
public String display(int row,int col){
Cursor cu=database.query(Makedatabase.tblname, null, null, null, null, null, null);
cu.moveToPosition(row);
String name=cu.getString(col);
cu.close();
return name;
}
public void insertinto(String name,String username,String password){
ContentValues content=new ContentValues();
content.put(Makedatabase.name, name);
content.put(Makedatabase.username, username);
content.put(Makedatabase.password, password);
database.insert(Makedatabase.tblname,null,content);
}
}
برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال
hhgh4269
10 سال پیش
+1
0
مشکلم را پیدا کردم در واقع ریشه مشکل در متد open هست که انجا یادم رفته بود شی database را ست کنم شیوه صحیح به صورت زیر است
public void open(){
//mydb.getWritableDatabase(); error
database=mydb.getWritableDatabase(); // ok
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .