Android 如何将改造后的数据存储到sqlite数据库
我已使用改装从服务器检索数据 现在我正在尝试使用sqlite数据库进行存储。 但程序未在BaseApter类和MainFragment中运行get错误Android 如何将改造后的数据存储到sqlite数据库,android,sqlite,retrofit,sql-insert,Android,Sqlite,Retrofit,Sql Insert,我已使用改装从服务器检索数据 现在我正在尝试使用sqlite数据库进行存储。 但程序未在BaseApter类和MainFragment中运行get错误 FATAL EXCEPTION: main Process: com.example.s2r1.appointment, PID: 6560
FATAL EXCEPTION: main
Process: com.example.s2r1.appointment, PID: 6560
java.lang.NullPointerException
at com.example.s2r1.appointment.ApointmentAdapter.getCount(ApointmentAdapter.java:42)
at android.widget.ListView.setAdapter(ListView.java:480)
at com.example.s2r1.appointment.StatusFragment.onCreateView(StatusFragment.java:65)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2080)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1108)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1290)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:801)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1677)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:536)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5241)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:818)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
at dalvik.system.NativeStart.main(Native Method)
我的模特课帖子
FATAL EXCEPTION: main
Process: com.example.s2r1.appointment, PID: 6560
java.lang.NullPointerException
at com.example.s2r1.appointment.ApointmentAdapter.getCount(ApointmentAdapter.java:42)
at android.widget.ListView.setAdapter(ListView.java:480)
at com.example.s2r1.appointment.StatusFragment.onCreateView(StatusFragment.java:65)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2080)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1108)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1290)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:801)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1677)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:536)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5241)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:818)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
at dalvik.system.NativeStart.main(Native Method)
在那门课上我设置了getter和setter
public class Post {
@SerializedName("id")
@Expose
private int id;
@SerializedName("name")
@Expose
private String name;
@SerializedName("age")
@Expose
private String age;
@SerializedName("city")
@Expose
private String city;
@SerializedName("mob")
@Expose
private String mob;
我的界面
public interface ApiInterface {
@GET("fetch.php")
Call<List<Post>> getContacts();
}
要在其中存储数据的数据库类
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "ApointmentDb.db";
public static final String TABLE_NAME = "ApointList";
public static final String TAG_ID = "id";
public static final String TAG_NAME = "name";
public static final String TAG_AGE = "age";
public static final String TAG_CITY = "city";
public static final String TAG_MOB = "mob";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
String createTable = "CREATE TABLE " + TABLE_NAME + "" +
"("
+ TAG_ID + " id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"
+ TAG_NAME + " TEXT,"
+ TAG_AGE + " TEXT,"
+ TAG_CITY + " TEXT, "
+ TAG_MOB + " TEXT)";
db.execSQL(createTable);
}
@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
db.execSQL("DROP IF TABLE EXISTS" + TABLE_NAME);
}
public void addData(Post post) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(TAG_ID, post.getId());
contentValues.put(TAG_NAME, post.getName());
contentValues.put(TAG_AGE, post.getName());
contentValues.put(TAG_CITY, post.getName());
contentValues.put(TAG_MOB, post.getName());
db.insert(TABLE_NAME, null, contentValues);
db.close();
}
和适配器类
public class ApointmentAdapter extends BaseAdapter {
Context mContext;
private List<Post> mContact;
public ApointmentAdapter(List<Post> mContact, Context mContext) {
this.mContact = mContact;
this.mContext = mContext;
}
public class ViewHolder {
public TextView tvId;
public TextView tvName;
public TextView tvAge;
public TextView tvCity;
public TextView tvMob;
}
@Override
public int getCount() {
return mContact.size();
}
@Override
public Object getItem(int position) {
return mContact.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public void addPost(Post post) {
mContact.add(post);
notifyDataSetChanged();
}
@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {
View vi = convertView;
ViewHolder holder;
if (convertView == null) {
LayoutInflater inflater;
inflater = (LayoutInflater) mContext.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
vi = inflater.inflate(R.layout.status_item_layout, null);
holder = new ViewHolder();
holder.tvId = (TextView) vi.findViewById(R.id.tv_status_id);
holder.tvName = (TextView) vi.findViewById(R.id.tv_status_name);
holder.tvAge = (TextView) vi.findViewById(R.id.tv_status_age);
holder.tvCity = (TextView) vi.findViewById(R.id.tv_status_city);
holder.tvMob = (TextView) vi.findViewById(R.id.tv_status_mob);
vi.setTag(holder);
} else
holder = (ViewHolder) vi.getTag();
// now set your text view here like
holder.tvId.setText(String.valueOf(mContact.get(position).getId()));
holder.tvName.setText(mContact.get(position).getName());
holder.tvAge.setText(mContact.get(position).getAge());
holder.tvCity.setText(mContact.get(position).getCity());
holder.tvMob.setText(mContact.get(position).getMob());
// return your view
return vi;
}
}
在主课上
listView.setAdapter(adapter);
我哪里做错了
Logcat
FATAL EXCEPTION: main
Process: com.example.s2r1.appointment, PID: 6560
java.lang.NullPointerException
at com.example.s2r1.appointment.ApointmentAdapter.getCount(ApointmentAdapter.java:42)
at android.widget.ListView.setAdapter(ListView.java:480)
at com.example.s2r1.appointment.StatusFragment.onCreateView(StatusFragment.java:65)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2080)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1108)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1290)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:801)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1677)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:536)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5241)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:818)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
at dalvik.system.NativeStart.main(Native Method)
首先,您需要发布错误日志,但有一件事我注意到,在将联系人列表传递给适配器之前,您在哪里初始化联系人列表?是的,首先,我直接将数据返回到我的listview,但现在我想将其存储到db中,而不将其添加到listview中。您尚未初始化数组列表@AhmedBasyouny是正确的。。。当您尝试setAdapter@SayedRizwanHashmi在片段中获取上下文时,使用getContex();因为getActivity有时会返回null谢谢@akshay_shahane
FATAL EXCEPTION: main
Process: com.example.s2r1.appointment, PID: 6560
java.lang.NullPointerException
at com.example.s2r1.appointment.ApointmentAdapter.getCount(ApointmentAdapter.java:42)
at android.widget.ListView.setAdapter(ListView.java:480)
at com.example.s2r1.appointment.StatusFragment.onCreateView(StatusFragment.java:65)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2080)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1108)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1290)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:801)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1677)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:536)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5241)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:818)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
at dalvik.system.NativeStart.main(Native Method)