1

У меня большая проблема, пожалуйста, помогите мне пожалуйста.Эмулятор не дает ошибки, но устройство дает java.lang.NullPointerException on putExtra()

У меня есть ActionBar с вкладками и 3 фрагментами.

В onCreateView методе у меня есть это:

MainActivity.java

... 

@Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
      View rootView = null; 
      TextView textView; 
      final Intent intent = new Intent(getActivity(),ResultActivity.class); 


      if(getArguments().getInt(ARG_SECTION_NUMBER) == 1){ 
       rootView = inflater.inflate(R.layout.fragment_main, container, false); 



       Button btn = (Button) rootView.findViewById(R.id.procura_ingredientes); 
       final EditText ing_1 = (EditText) rootView.findViewById(R.id.ingredient_1); 
       final EditText ing_2 = (EditText) rootView.findViewById(R.id.ingredient_2); 


       btn.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
         intent.putExtra(MOD_SEARCH,1); 

         String ingredient_1 = ing_1.getText().toString(); 
         String ingredient_2 = ing_2.getText().toString(); 

         if(ingredient_1.length() <= 0) ingredient_1 = ""; 
         if(ingredient_2.length() <= 0) ingredient_2 = ""; 

         intent.putExtra("ingredient_1",ingredient_1); 
         intent.putExtra("ingredient_2",ingredient_2); 

         startActivity(intent); 

        } 
       }); 


      }else if(getArguments().getInt(ARG_SECTION_NUMBER) == 2){ 
       rootView = inflater.inflate(R.layout.fragment_two, container, false); 
       GridView gridview = (GridView) rootView.findViewById(R.id.gridview); 
       final ImageAdapter imageAdapter = new ImageAdapter(getActivity()); 
       gridview.setAdapter(imageAdapter); 

       gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 

         //Toast.makeText(getActivity()," " + position, Toast.LENGTH_SHORT).show(); 

         long cat = imageAdapter.getItemId(position); 
         if(cat <= 0) cat = 1; 
         intent.putExtra(MOD_SEARCH,2); 
         intent.putExtra("cat_id",cat); 
         startActivity(intent); 

        } 
       }); 



      }else if(getArguments().getInt(ARG_SECTION_NUMBER) == 3) { 
       rootView = inflater.inflate(R.layout.fragment_three, container, false); 

       final EditText editText = (EditText) rootView.findViewById(R.id.recipe_search_term); 
       Button button = (Button) rootView.findViewById(R.id.submit_recipe_search); 

       button.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 

         int cont = editText.getText().toString().length(); 
         if (cont < 2) { 
          AlertDialog.Builder dialog = new AlertDialog.Builder(getActivity()); 
          dialog.setTitle("Atenção"); 
          dialog.setMessage("O nome da receita precisa ter mais de " + cont + " letras "); 

          dialog.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
           public void onClick(DialogInterface dialog, int id) { 
            dialog.dismiss(); 
           } 
          }); 
          dialog.show(); 
         } else { 
         intent.putExtra(MOD_SEARCH,0); 
         String recipe = editText.getText().toString(); 
         if(recipe.length() <= 0) recipe = ""; 
         intent.putExtra("recipe_name",recipe); 
         startActivity(intent); 
         } 
        } 
       }); 
      } 
      return rootView; 
      /* textView.setText(Integer.toString(getArguments().getInt(ARG_SECTION_NUMBER)));*/ 

     } 
    } 

Если вы посмотрите вы видите

if(getArguments().getInt(ARG_SECTION_NUMBER) == 1){ 

}else if(getArguments().getInt(ARG_SECTION_NUMBER) == 2){ 

else 

это управлять тем, что вкладка пользователя находятся, все идут то же ResultActivity, но пропускает другие ExtraStrings,

intent.putExtra(MOD_SEARCH,0); 
intent.putExtra(MOD_SEARCH,1); 
intent.putExtra(MOD_SEARCH,2); 

MOD_SEARCH контролирует, какой результат был выполнен.

ResultActivity.java

public static final String MOD_SEARCH = null; 
mode = getIntent().getIntExtra(MOD_SEARCH,0); 

    if(mode == 0){ .. 
    }else if(mode == 1) .. 
    }else if(mode == 2) .. 

Так, в эмуляторе она отлично работает все, когда я нажимаю на в каждом фрагменте он показывает мне правильную информацию.

После публикации приложения в Google Play несколько дней назад, и я получаю эту ошибку:

java.lang.NullPointerException 
at android.content.Intent.putExtra(Intent.java:5558) 
at com.iondev.cozinhaparasolteiros.MainActivity$PlaceholderFragment$2.onItemClick(MainActivity.java:256) 

и

java.lang.NullPointerException 
at android.content.Intent.putExtra(Intent.java:5325) 
at com.iondev.cozinhaparasolteiros.MainActivity$PlaceholderFragment$1.onClick(MainActivity.java:226) 

Я не понимаю, потому что в эмуляторе она работает без ошибок и устройств имеет ошибку, я не знаю, что не так, пожалуйста, у кого-то есть предложение, нужен ремонт, потому что в магазине.

+0

Что такое строка 226 'MainActivity.java'? – Raghunandan

+1

is intent.putExtra (MOD_SEARCH, 2); Большое спасибо, мне нужно объявить об этом. – overallduka

ответ

2

Заменить этот

public static final String MOD_SEARCH = null; 

для этого

public static String MOD_SEARCH = ""; 

Я думаю, что ваша проблема связана со словом «final», поскольку инициализация переменной «null», будучи «окончательной», не сможет изменить ее значение позже, поэтому присвоить Intent значение Null.

Я надеюсь, что вы служите.

Извините за мой низкий уровень владения английским языком.

1

Вы не инициализирован Намерение где-либо в коде, потому что он дает NullPointerException здесь ..

intent.putExtra(MOD_SEARCH,2); 
intent.putExtra("cat_id",cat); 

принять его как местные и initilize где вы хотите ..

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