среда, 24 февраля 2016 г., 11:38:12 UTC+3 пользователь Evgeniy Egorov 
написал:
>
> Help! No idea how to fix crash. StackOverflow didnt help me. I can not 
> reproduce this crash on emulator or my smartphone but 10% of users have 
> this crash every day regularly. I use Crashelitics.
>
> I have:
> Activity contains ViewPager with three Fragments. Activity contains a 
> button FloatingActionButton. Fragment contains EditText. User tap on button 
> from Activity. Inside onClick of this FloatingActionButton I try to get 
> text from EditText which inside Fragment. Then I have NullPointerExaption 
> because of returned EditText is NULL.
>
>
> public class ADatabase extends AppCompatActivity implements 
> OnFragmentInteractionListener {
>
>     *// fragments insive Activity*
>     final FDbTables fDbTables = FDbTables.newInstance();
>     final FDbQuery fDbQuery = FDbQuery.newInstance();
>     final FDbStoredQueries fDbStoredQuries = FDbStoredQueries.newInstance();
>     /**
>      * The {@link ViewPager} that will host the section contents.
>      */
>     ViewPager mViewPager;
>     // three buttons
>     private FloatingActionButton fabTFS;
>
>     private FloatingActionButton fabRun; // <-- user tap this button
>     private FloatingActionButton fabRefreshDB;
>
> public FloatingActionButton getFabRun() {
>     return fabRun;
> }
>
>
> @Override
> protected void onCreate(Bundle savedInstanceState) {
>     super.onCreate(savedInstanceState);
>     setContentView(R.layout.activity_database);
>    
>     FragmentTransaction transaction =  
> getSupportFragmentManager().beginTransaction();
>     // Create the adapter that will return a fragment for each of the three
>     // primary sections of the activity.
>     mSectionsPagerAdapter = new 
> SectionsPagerAdapter(getSupportFragmentManager());
>
>     // Set up the ViewPager with the sections adapter.
>     mViewPager = (ViewPager) findViewById(R.id.container);
>     mViewPager.setAdapter(mSectionsPagerAdapter);
>     // Commit the transaction
>     transaction.commit();
>
>     tvDbHeader = (TextView) findViewById(R.id.tvDbHeader);
>     tvDbTablesCnt = (TextView) findViewById(R.id.tvDbTablesCnt);
>
>
>     TabLayout tabLayout = (TabLayout) findViewById(R.id.tabanim_tabs);
>     tabLayout.setupWithViewPager(mViewPager);
>
>     fabRun = (FloatingActionButton) findViewById(R.id.fabRun);
>
>     fabRun.setEnabled(false);
>
>
>     ...
>
>
> }
>
>
>
> public void run(final View view) {
>     final String sql = fDbQuery.getEtSql().getText().toString(); // <-- here 
> NPE. because fDbQuery.getEtSql() sometimes is NULL. WHY???
>     ...
> }
>
>
> /**
>  * A {@link FragmentPagerAdapter} that returns a fragment corresponding to
>  * one of the sections/tabs/pages.
>  */
> public class SectionsPagerAdapter extends FragmentPagerAdapter {
>
>
>     @Override
>     public Fragment getItem(int position) {
>         // getItem is called to instantiate the fragment for the given page.
>         // Return a PlaceholderFragment (defined as a static inner class 
> below).
>         if (position == 0)            return fDbTables;
>         if (position == 1)            return fDbQuery;
>         if (position == 2)            return fDbStoredQuries;
>         throw new IllegalArgumentException("Must be only three fragments. But 
> position=" + position + ". Check fragments.");
>     }
>
>     @Override
>     public int getCount() { return 3; }
>
>     @Override
>     public CharSequence getPageTitle(int position) {
>         switch (position) {
>             case 0:                return getString(R.string.Tables);
>             case 1:                return getString(R.string.SQL_query);
>             case 2:                return getString(R.string.Saved_queries);
>         }
>         return null;
>     }
> }
>
> }
>
>
>
> public class FDbQuery extends Fragment {
>
> public static FDbQuery newInstance() {
>     FDbQuery fragment = new FDbQuery();
>     Bundle args = new Bundle();
>     fragment.setArguments(args);
>     return fragment;
> }
>
>
>
>     private EditText etSql; // I need text from this View
>
>     public EditText getEtSql() {
>         return etSql;
>
>     }
>
> @Override
> public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle 
> savedInstanceState) {
>     // Inflate the layout for this fragment
>     View view = inflater.inflate(R.layout.fragment_fdb_query, container, 
> false);
>     return view;
> }
>
>
>     @Override
>     public void onResume() { // here could be onCreateView or onViewCreated 
> but useless
>         super.onResume();
>
>         etSql = (EditText) getView().findViewById(R.id.etSql);
>
>         ((ADatabase) getActivity()).getFabRun().setEnabled(true);
>
>     }
>
> }
>
>
>
> I can not understand. Why some users have the crash? What is wrong?
>

-- 
You received this message because you are subscribed to the Google Groups 
"Android Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/android-developers.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/android-developers/8f4088ad-b087-4103-9f63-a510eeb6cea4%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to