无法启动活动:索引1处的绑定值为空

时间:2016-10-13 09:02:52

标签: android android-database

我写下面的代码,但在运行应用程序时显示强制关闭错误。

数据库帮助程序代码:

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)

如何解决此错误?

1 个答案:

答案 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}}