我写下面的代码,但在运行应用程序时显示强制关闭错误。
数据库帮助程序代码:
public boolean checkFavPost(String title) {
// 1. get reference to writable DB
SQLiteDatabase db = this.getWritableDatabase();
// 2. set cursor for read row
Cursor cursor = db.rawQuery("SELECT * FROM " + FavContract.favInfo.TABLE_NAME + " WHERE " +
FavContract.favInfo.FAV_TBL_PTitle + " = ?", new String[]{title});
boolean exists = (cursor.getCount() > 0);
db.close();
return exists;
}
活动代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.post_show_page);
bindActivity();
// Initialize
context = PostShow_page.this;
favDB = new FavHelper(context);
postShow_favPost = (ShineButton) mToolbar.findViewById(R.id.post_FavImage);
post_cover = (ImageView) findViewById(R.id.postShow_cover_image);
postShow_title = (TextView) findViewById(R.id.postShow_title);
postShow_title2 = (TextView) findViewById(R.id.postShow_titleBig);
//postShow_content = (TextView) findViewById(R.id.postShow_content_text);
postShow_dateTime = (TextView) findViewById(R.id.postShow_man_date_text);
postShow_author = (TextView) findViewById(R.id.postShow_man_author_text);
postShow_category = (TextView) findViewById(R.id.postShow_man_category_text);
title_sliding = (TextView) findViewById(R.id.post_sliding_title);
comment_Recyclerview = (RecyclerView) findViewById(R.id.comment_recyclerView);
post_content_web = (WebView) findViewById(R.id.postShow_content_web);
mLayoutManager = new LinearLayoutManager(this);
mAdaper = new CommentAdapter2(context, models);
//Give Data
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
postID = bundle.getInt("postID");
title = bundle.getString("title");
image = bundle.getString("image");
content = bundle.getString("content");
dateTime = bundle.getString("dateTime");
author = bundle.getString("author");
category = bundle.getString("category");
categoryID = bundle.getString("categoryID");
}
Intent intent = getIntent();
String action = intent.getAction();
Uri data = intent.getData();
mAppBarLayout.addOnOffsetChangedListener(this);
// Setup comment RecyclerView
comment_Recyclerview.setLayoutManager(mLayoutManager);
comment_Recyclerview.setHasFixedSize(true);
postShow_favPost.init(this);
postShow_favPost.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/* if (postShow_favPost.isChecked()) {
/// Add to Database
favDB.insertFAV(context, title, image, content, dateTime, author, category);
} else {
TastyToast.makeText(context, "برای حذفش به علاقه مندی ها برو", TastyToast.LENGTH_LONG, TastyToast.WARNING);
}*/
if (postFavState == 0) {
/// Add to Database
favDB.insertFAV(context, title, image, content, dateTime, author, category);
postFavState++;
} else {
postShow_favPost.setBtnColor(ContextCompat.getColor(context, R.color.favColorON));
postShow_favPost.setBtnFillColor(ContextCompat.getColor(context, R.color.favColorON));
TastyToast.makeText(context, "برای حذفش به علاقه مندی ها برو", TastyToast.LENGTH_LONG, TastyToast.WARNING);
}
}
});
if (favDB.checkFavPost(title)) {
postShow_favPost.setBtnColor(ContextCompat.getColor(context, R.color.favColorON));
postShow_favPost.setBtnFillColor(ContextCompat.getColor(context, R.color.favColorOFF));
} else {
postShow_favPost.setBtnColor(ContextCompat.getColor(context, R.color.favColorOFF));
postShow_favPost.setBtnFillColor(ContextCompat.getColor(context, R.color.favColorON));
}
//mToolbar.inflateMenu(R.menu.post_menu);
mToolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_share:
break;
}
return true;
}
});
startAlphaAnimation(mTitle, 0, View.INVISIBLE);
// Set Data into views
if (title != null) {
postShow_title.setText(title);
postShow_title2.setText(title);
title_sliding.setText(getResources().getString(R.string.comment_title) + " " + title);
}
loadPostProgressDialog.createAndShow(this);
if (image != null) {
Glide.with(this)
.load(image)
.placeholder(R.drawable.post_image)
.listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target,
boolean isFromMemoryCache, boolean isFirstResource) {
loadPostProgressDialog.dissmis();
return false;
}
})
.into(post_cover);
}
if (content != null) {
//postShow_content.setText(Html.fromHtml(content));
post_content_web.getSettings().setJavaScriptEnabled(true);
WebSettings settings = post_content_web.getSettings();
settings.setDefaultTextEncodingName("utf-8");
post_content_web.loadData(content, "text/html; charset=utf-8", "utf-8");
}
if (dateTime != null) {
postShow_dateTime.setText(dateTime);
}
if (author != null) {
postShow_author.setText(author);
}
if (category != null) {
postShow_category.setText(category);
}
post_cover.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
BlurBehind.getInstance().execute(PostShow_page.this, new OnBlurCompleteListener() {
@Override
public void onBlurComplete() {
startActivity(new Intent(PostShow_page.this, DialogImage_page.class)
.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
.putExtra("imageCover", image));
}
});
}
});
postShow_category.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (categoryID != null) {
startActivity(new Intent(PostShow_page.this, Category_page.class)
.putExtra("categoryID", categoryID)
.putExtra("categoryTitle", category));
}
}
});
//Sliding Up
slideHandleButton = (ImageView) findViewById(R.id.image_sliding);
slidingDrawer = (SlidingDrawer) findViewById(R.id.SlidingDrawer);
slidingDrawer.setOnDrawerOpenListener(new SlidingDrawer.OnDrawerOpenListener() {
@Override
public void onDrawerOpened() {
slideHandleButton.setImageResource(R.drawable.ic_down_arrow_sliding);
title_sliding.setText(getResources().getString(R.string.comment_title) + " " + title);
// Load Comment data
bindData();
}
});
slidingDrawer.setOnDrawerCloseListener(new SlidingDrawer.OnDrawerCloseListener() {
@Override
public void onDrawerClosed() {
slideHandleButton.setImageResource(R.drawable.ic_up_arrow_sliding);
title_sliding.setText(getResources().getString(R.string.comment_title) + " " + title);
}
});
}
private void bindActivity() {
mToolbar = (Toolbar) findViewById(R.id.postShow_toolbar);
mTitle = (TextView) findViewById(R.id.postShow_title);
mTitleContainer = (LinearLayout) findViewById(R.id.postShow_linearlayout_title);
mAppBarLayout = (AppBarLayout) findViewById(R.id.postShow_appBar);
}
private void bindData() {
// Setup Connect
Retrofit_ApiInterface apiInterface = Retrofit_ApiClient.getClient().create(Retrofit_ApiInterface.class);
Call<R_CatModelResponse> call = apiInterface.getCatResponse(postID);
Log.d("PostID", "Post : " + postID);
call.enqueue(new Callback<R_CatModelResponse>() {
@Override
public void onResponse(Call<R_CatModelResponse> call, Response<R_CatModelResponse> response) {
if (response != null) {
models.addAll(response.body().getCat_posts().get(0).getComments());
mAdaper.notifyDataSetChanged();
Toast.makeText(PostShow_page.this, "GoTo Adapter", Toast.LENGTH_SHORT).show();
comment_Recyclerview.setAdapter(mAdaper);
}
}
@Override
public void onFailure(Call<R_CatModelResponse> call, Throwable t) {
Toast.makeText(PostShow_page.this, "Failed", Toast.LENGTH_SHORT).show();
}
});
}
显示此代码的错误:
if (favDB.checkFavPost(title)) {
postShow_favPost.setBtnColor(ContextCompat.getColor(context, R.color.favColorON));
postShow_favPost.setBtnFillColor(ContextCompat.getColor(context, R.color.favColorOFF));
} else {
postShow_favPost.setBtnColor(ContextCompat.getColor(context, R.color.favColorOFF));
postShow_favPost.setBtnFillColor(ContextCompat.getColor(context, R.color.favColorON));
}
强制关闭错误:
致命的例外:主要 过程:com.tellfa.colony,PID:21513 java.lang.RuntimeException:无法启动活动 ComponentInfo {com.tellfa.colony / com.tellfa.colony.Activities.PostShow_page}: java.lang.IllegalArgumentException:索引1处的绑定值为null 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2331) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2391) 在android.app.ActivityThread.access $ 800(ActivityThread.java:151) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1309) 在android.os.Handler.dispatchMessage(Handler.java:102) 在android.os.Looper.loop(Looper.java:135) 在android.app.ActivityThread.main(ActivityThread.java:5349) at java.lang.reflect.Method.invoke(Native Method) 在java.lang.reflect.Method.invoke(Method.java:372) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:908) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703) 引起:java.lang.IllegalArgumentException:索引1处的绑定值为null 在android.database.sqlite.SQLiteProgram.bindString(SQLiteProgram.java:164) 在android.database.sqlite.SQLiteProgram.bindAllArgsAsStrings(SQLiteProgram.java:200) 在android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47) 在android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1426) 在android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1365) 在com.tellfa.colony.DBhelper.FavHelper.checkFavPost(FavHelper.java:141) 在com.tellfa.colony.Activities.PostShow_page.onCreate(PostShow_page.java:179) 在android.app.Activity.performCreate(Activity.java:6020) 在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2284) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2391) 在android.app.ActivityThread.access $ 800(ActivityThread.java:151) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1309) 在android.os.Handler.dispatchMessage(Handler.java:102) 在android.os.Looper.loop(Looper.java:135) 在android.app.ActivityThread.main(ActivityThread.java:5349) at java.lang.reflect.Method.invoke(Native Method) 在java.lang.reflect.Method.invoke(Method.java:372)
如何解决此错误?
答案 0 :(得分:1)
好的,首先是第一件事:这是您的应用崩溃的主要原因:
java.lang.IllegalArgumentException: the bind value at index 1 is null
这是来自PreparedStatement的错误绑定参数。 title
checkFavPost
被传递到null
的可能性 public boolean checkFavPost(String title) {
if (title == null) return false;
// 1. get reference to writable DB
SQLiteDatabase db = this.getWritableDatabase();
// 2. set cursor for read row
Cursor cursor = db.rawQuery("SELECT * FROM " + FavContract.favInfo.TABLE_NAME + " WHERE " +
FavContract.favInfo.FAV_TBL_PTitle + " = ?", new String[]{title});
boolean exists = (cursor.getCount() > 0);
db.close();
return exists;
}
。你必须为此做好准备。
所以,要修复它,请执行以下操作:
{{1}}