2016-10-13 8 views
0

Я пишу ниже, но при запуске приложения покажите мне Force Close Ошибка.
Невозможно начать деятельность: значение привязки по индексу 1 равно null

вспомогательные базы данных кодов:

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)); 
} 

Force Close ошибка:

FATAL ИСКЛЮЧЕНИЕ: главный процесса: com.tellfa.colony, PID: 21513 java.lang.RuntimeException: Невозможно запустить активность ComponentInfo {com.tellfa.colony/ком. tellfa.colony.Activities.PostShow_page}: java.lang.IllegalArgumentException: значение связывают с индексом 1 является нулевым на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2331) в android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2391) at 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) at android.app.ActivityThread.main (ActivityThread.java:5349) at java.lang.reflect.Method.invoke (собственный метод) at java.lang.reflect.Method.invoke (Method.java:372) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:908) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:703) Вызвано: java.lang.IllegalArgumentException : значение привязки в индексе 1 имеет значение null в android.database.sqlite.SQLiteProgram.bindString (SQLiteProgram.java:16 4) в 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) at com.tellfa.colony.DBhelper.FavHelper.checkFavPost (FavHelper.java:141) at 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. приложение .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) на java.lang.reflect.Method.invoke (Native Method) в java.lang.reflect.Method.invoke (Method.java:372)

Как я могу исправить эту ошибку?

+0

Можете ли вы показать нам крушении в трассировки стека? –

+0

@HadiSatrio, см. Мое сообщение об обновлении. –

+0

Вы не можете передать нулевое значение для привязки строки. Вам нужно использовать метод setNull (или bindNull, не помню имя) – AxelH

ответ

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; 
    } 
+0

'это обычно вызванный неправильным SQLite-запросом', на самом деле это из-за неправильного параметра привязки PreparedStatement. Документ сообщает вам, что вы не можете передать значение Null, для этого существует 'bindNull (int). – AxelH

+0

Я стою исправлены. Редактирование моего ответа. :) –

+0

Кроме того, return false - плохая идея, это ошибка или просто потому, что запрос не возвращает строки? Выбросьте исключение, такое как NullParameterException или что-то, говорящее вызывающему, что есть проблема с параметром – AxelH

 Смежные вопросы

  • Нет связанных вопросов^_^