Reputation: 1115
In my App, I have two activities Login and Signup along with Main Activity. I have used fragments to get Tabs with swipe gesture. I am getting Nullpointerexception. Please help me.
My code is here..
MainActivity:
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public class MainActivity extends FragmentActivity implements
ActionBar.TabListener {
private ViewPager viewPager;
private TabsPagerAdapter mAdapter;
private ActionBar actionBar;
// Tab titles
private String[] tabs = { "Login", "Login with Facebook", "Registration" };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Initilization
viewPager = (ViewPager) findViewById(R.id.pager);
actionBar = getActionBar();
mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(mAdapter);
actionBar.setHomeButtonEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// Adding Tabs
for (String tab_name : tabs) {
actionBar.addTab(actionBar.newTab().setText(tab_name)
.setTabListener(this));
}
/**
* on swiping the viewpager make respective tab selected
* */
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// on changing the page
// make respected tab selected
actionBar.setSelectedNavigationItem(position);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// on tab selected
// show respected fragment view
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
}
}
LoginActivity:
public class LoginActivity extends Fragment {
// Your Facebook APP ID
private static String APP_ID = "270865596396516";
// Instance of Facebook Class
private Facebook facebook = new Facebook(APP_ID);
@SuppressWarnings("unused")
private AsyncFacebookRunner mAsyncRunner;
String FILENAME = "AndroidSSO_data";
public SharedPreferences mPrefs;
Button login, signup, login_facebook, forgot, button_getprofile;;
EditText uname, pwd;
String name, password;
ConnectivityManager mConnectivityMgr;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.login, container, false);
login = (Button) getActivity().findViewById(R.id.login_btn);
login_facebook = (Button) getActivity().findViewById(R.id.facebook_btn);
button_getprofile = (Button) getActivity().findViewById(
R.id.btn_get_profile);
forgot = (Button) getActivity().findViewById(R.id.text_forgot);
uname = (EditText) getActivity().findViewById(R.id.user_et);
pwd = (EditText) getActivity().findViewById(R.id.pwd_et);
login_facebook.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Log.d("Image Button", "button Clicked");
loginToFacebook();
}
});
// by reference from andfroidhive...
/*
* button_getprofile.setOnClickListener(new OnClickListener() {
*
* @Override public void onClick(View v) { // TODO Auto-generated method
* stub getProfileInformation();
*
* } });
*/
login.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if ((uname.length() >= 4) && (pwd.length() > 0)) {
name = uname.getText().toString().trim();
password = pwd.getText().toString().trim();
callWebService();
} else {
if ((uname.length() < 12)) {
uname.setError("enter valid username");
} else if ((pwd.length() <= 0)) {
pwd.setError("enter valid password");
}
}
}
});
return rootView;
}
public void loginToFacebook() {
mPrefs = getActivity().getPreferences(Context.MODE_PRIVATE);
String access_token = mPrefs.getString("access_token", null);
long expires = mPrefs.getLong("access_expires", 0);
if (access_token != null) {
facebook.setAccessToken(access_token);
login_facebook.setVisibility(View.INVISIBLE);
button_getprofile.setVisibility(View.VISIBLE);
Log.d("FB Sessions", "" + facebook.isSessionValid());
}
if (expires != 0) {
facebook.setAccessExpires(expires);
}
if (!facebook.isSessionValid()) {
facebook.authorize(getActivity(), new String[] { "email",
"publish_stream" }, new DialogListener() {
@Override
public void onCancel() {
// Function to handle cancel event
}
@Override
public void onComplete(Bundle values) {
// Function to handle complete event
// Edit Preferences and update facebook acess_token
SharedPreferences.Editor editor = mPrefs.edit();
editor.putString("access_token", facebook.getAccessToken());
editor.putLong("access_expires",
facebook.getAccessExpires());
editor.commit();
// Making Login button invisible
login_facebook.setVisibility(View.INVISIBLE);
button_getprofile.setVisibility(View.VISIBLE);
}
@Override
public void onError(DialogError error) {
// Function to handle error
}
@Override
public void onFacebookError(FacebookError fberror) {
// Function to handle Facebook errors
}
});
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
facebook.authorizeCallback(requestCode, resultCode, data);
}
/*
* @SuppressWarnings("deprecation") public void getProfileInformation() {
* mAsyncRunner.request("me", new RequestListener() {
*
* @Override public void onComplete(String response, Object state) {
* Log.d("Profile", response); String json = response; try { // Facebook
* Profile JSON data JSONObject profile = new JSONObject(json);
*
* // getting name of the user final String name =
* profile.getString("name");
*
* // getting email of the user final String email =
* profile.getString("email");
*
* Toast.makeText(getApplicationContext(), "Name: " + name + "\nEmail: " +
* email, Toast.LENGTH_LONG).show();
*
* runOnUiThread(new Runnable() {
*
* @Override public void run() { Toast.makeText(getApplicationContext(),
* "Name: " + name + "\nEmail: " + email, Toast.LENGTH_LONG).show(); }
*
* });
*
* } catch (JSONException e) { Toast.makeText(getApplicationContext(),
* "...." + e, Toast.LENGTH_LONG).show(); e.printStackTrace(); } }
*
* @Override public void onIOException(IOException e, Object state) { }
*
* @Override public void onFileNotFoundException(FileNotFoundException e,
* Object state) { }
*
* @Override public void onMalformedURLException(MalformedURLException e,
* Object state) { }
*
* @Override public void onFacebookError(FacebookError e, Object state) { }
* }); }
*/
// database authentication...from SQLite database....
public void callWebService() {
try {
SQLiteDatabase database = getActivity().openOrCreateDatabase(
"studentDB", 0, null);
Cursor c = database.query("login", null, null, null, null, null,
null);
while (c.moveToNext()) {
String c1 = c.getString(0);
String c2 = c.getString(1);
if (c1.equals(name)) {
if (c2.equals(password)) {
Toast.makeText(LoginActivity.this.getActivity(),
"" + c1 + " Welcome to Smarteach..",
Toast.LENGTH_SHORT).show();
Intent intent = new Intent(getActivity(),
SignupActivity.class);
startActivity(intent);
} else {
Toast.makeText(LoginActivity.this.getActivity(),
"Incorrect Password", Toast.LENGTH_SHORT)
.show();
}
} else {
Toast.makeText(LoginActivity.this.getActivity(),
"Incorrect Username", Toast.LENGTH_SHORT).show();
}
}
database.close();
} catch (Exception e) {
Log.d("Login class", e.toString());
Toast.makeText(LoginActivity.this.getActivity(),
"No records found with these credentials",
Toast.LENGTH_SHORT).show();
}
}
}
Signup Activity:
public class SignupActivity extends Fragment {
EditText email, pswd, cnfrm, mobile;
Button register, cancel;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.registration, container,
false);
email = (EditText) getActivity().findViewById(R.id.ed_email);
pswd = (EditText) getActivity().findViewById(R.id.ed_pswd);
cnfrm = (EditText) getActivity().findViewById(R.id.ed_cnfrm);
mobile = (EditText) getActivity().findViewById(R.id.ed_mobile);
register = (Button) getActivity().findViewById(R.id.btn_reg);
cancel = (Button) getActivity().findViewById(R.id.btn_can);
register.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
String mail = email.getText().toString();
String password = pswd.getText().toString();
String confirmpswd = cnfrm.getText().toString();
String phonenumber = mobile.getText().toString();
if (mail.matches("[a-zA-Z0-9._-]+@[a-z]+.[a-z]+")
&& mail.length() > 0) {
if (password.equals(confirmpswd)) {
if (phonenumber.length() > 0) {
// creating a database and storing the credentials
// into it...
try {
SQLiteDatabase database = getActivity()
.openOrCreateDatabase("studentDB", 0,
null);
// String create =
// "create table if not exists student(emai varchar(20),password varchar(20),mobile varchar(20));";
String create1 = "create table if not exists login(emailid varchar(28),pass varchar(20))";
database.execSQL(create1);
// database.execSQL(create);
// String insert =
// "insert into student values('"+mail+"','"+password+"','"+phonenumber+"');";
String insert1 = "insert into login values('"
+ mail + "','" + password + "')";
// database.execSQL(insert);
database.execSQL(insert1);
database.close();
/*
* startActivity(new
* Intent(SignupActivity.this.getActivity(),
* AnimatedSliding.class));
*/
// startActivity(new Intent(Registration.this,
// Login.class));
} catch (Exception e) {
Toast.makeText(
SignupActivity.this.getActivity(),
e.toString(), Toast.LENGTH_SHORT)
.show();
}
Toast.makeText(
getActivity().getApplicationContext(),
"your account successfully created...",
Toast.LENGTH_LONG).show();
} else {
mobile.setError("enter min 10 digits..");
}
} else if (pswd.length() < 4) {
pswd.setError("enter min 4 digits");
cnfrm.setError("enter correct password..");
}
} else {
email.setError("enter valid email ID..");
}
}
});
cancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
getActivity().finish();
}
});
return rootView;
}
}
Logcat:
01-27 13:10:36.361: D/AndroidRuntime(1033): Shutting down VM
01-27 13:10:36.371: W/dalvikvm(1033): threadid=1: thread exiting with uncaught exception (group=0x409961f8)
01-27 13:10:36.381: E/AndroidRuntime(1033): FATAL EXCEPTION: main
01-27 13:10:36.381: E/AndroidRuntime(1033): java.lang.NullPointerException
01-27 13:10:36.381: E/AndroidRuntime(1033): at info.androidhive.tabsswipe.LoginActivity.onCreateView(LoginActivity.java:61)
01-27 13:10:36.381: E/AndroidRuntime(1033): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1478)
01-27 13:10:36.381: E/AndroidRuntime(1033): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927)
01-27 13:10:36.381: E/AndroidRuntime(1033): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
01-27 13:10:36.381: E/AndroidRuntime(1033): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
01-27 13:10:36.381: E/AndroidRuntime(1033): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460)
01-27 13:10:36.381: E/AndroidRuntime(1033): at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472)
01-27 13:10:36.381: E/AndroidRuntime(1033): at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
01-27 13:10:36.381: E/AndroidRuntime(1033): at android.support.v4.view.ViewPager.populate(ViewPager.java:1068)
01-27 13:10:36.381: E/AndroidRuntime(1033): at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
01-27 13:10:36.381: E/AndroidRuntime(1033): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436)
01-27 13:10:36.381: E/AndroidRuntime(1033): at android.view.View.measure(View.java:12603)
01-27 13:10:36.381: E/AndroidRuntime(1033): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4677)
01-27 13:10:36.381: E/AndroidRuntime(1033): at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
01-27 13:10:36.381: E/AndroidRuntime(1033): at android.view.View.measure(View.java:12603)
01-27 13:10:36.381: E/AndroidRuntime(1033): at android.widget.LinearLayout.measureVertical(LinearLayout.java:812)
01-27 13:10:36.381: E/AndroidRuntime(1033): at android.widget.LinearLayout.onMeasure(LinearLayout.java:553)
01-27 13:10:36.381: E/AndroidRuntime(1033): at android.view.View.measure(View.java:12603)
01-27 13:10:36.381: E/AndroidRuntime(1033): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4677)
01-27 13:10:36.381: E/AndroidRuntime(1033): at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
01-27 13:10:36.381: E/AndroidRuntime(1033): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2072)
01-27 13:10:36.381: E/AndroidRuntime(1033): at android.view.View.measure(View.java:12603)
01-27 13:10:36.381: E/AndroidRuntime(1033): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1044)
01-27 13:10:36.381: E/AndroidRuntime(1033): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2418)
01-27 13:10:36.381: E/AndroidRuntime(1033): at android.os.Handler.dispatchMessage(Handler.java:99)
01-27 13:10:36.381: E/AndroidRuntime(1033): at android.os.Looper.loop(Looper.java:137)
01-27 13:10:36.381: E/AndroidRuntime(1033): at android.app.ActivityThread.main(ActivityThread.java:4340)
01-27 13:10:36.381: E/AndroidRuntime(1033): at java.lang.reflect.Method.invokeNative(Native Method)
01-27 13:10:36.381: E/AndroidRuntime(1033): at java.lang.reflect.Method.invoke(Method.java:511)
01-27 13:10:36.381: E/AndroidRuntime(1033): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
01-27 13:10:36.381: E/AndroidRuntime(1033): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
01-27 13:10:36.381: E/AndroidRuntime(1033): at dalvik.system.NativeStart.main(Native Method)
01-27 13:13:52.910: D/AndroidRuntime(1080): Shutting down VM
01-27 13:13:52.910: W/dalvikvm(1080): threadid=1: thread exiting with uncaught exception (group=0x409961f8)
01-27 13:13:52.920: E/AndroidRuntime(1080): FATAL EXCEPTION: main
01-27 13:13:52.920: E/AndroidRuntime(1080): java.lang.NullPointerException
01-27 13:13:52.920: E/AndroidRuntime(1080): at info.androidhive.tabsswipe.LoginActivity.onCreateView(LoginActivity.java:61)
01-27 13:13:52.920: E/AndroidRuntime(1080): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1478)
01-27 13:13:52.920: E/AndroidRuntime(1080): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927)
01-27 13:13:52.920: E/AndroidRuntime(1080): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
01-27 13:13:52.920: E/AndroidRuntime(1080): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
01-27 13:13:52.920: E/AndroidRuntime(1080): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460)
01-27 13:13:52.920: E/AndroidRuntime(1080): at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472)
01-27 13:13:52.920: E/AndroidRuntime(1080): at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
01-27 13:13:52.920: E/AndroidRuntime(1080): at android.support.v4.view.ViewPager.populate(ViewPager.java:1068)
01-27 13:13:52.920: E/AndroidRuntime(1080): at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
01-27 13:13:52.920: E/AndroidRuntime(1080): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436)
01-27 13:13:52.920: E/AndroidRuntime(1080): at android.view.View.measure(View.java:12603)
01-27 13:13:52.920: E/AndroidRuntime(1080): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4677)
01-27 13:13:52.920: E/AndroidRuntime(1080): at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
01-27 13:13:52.920: E/AndroidRuntime(1080): at android.view.View.measure(View.java:12603)
01-27 13:13:52.920: E/AndroidRuntime(1080): at android.widget.LinearLayout.measureVertical(LinearLayout.java:812)
01-27 13:13:52.920: E/AndroidRuntime(1080): at android.widget.LinearLayout.onMeasure(LinearLayout.java:553)
01-27 13:13:52.920: E/AndroidRuntime(1080): at android.view.View.measure(View.java:12603)
01-27 13:13:52.920: E/AndroidRuntime(1080): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4677)
01-27 13:13:52.920: E/AndroidRuntime(1080): at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
01-27 13:13:52.920: E/AndroidRuntime(1080): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2072)
01-27 13:13:52.920: E/AndroidRuntime(1080): at android.view.View.measure(View.java:12603)
01-27 13:13:52.920: E/AndroidRuntime(1080): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1044)
01-27 13:13:52.920: E/AndroidRuntime(1080): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2418)
01-27 13:13:52.920: E/AndroidRuntime(1080): at android.os.Handler.dispatchMessage(Handler.java:99)
01-27 13:13:52.920: E/AndroidRuntime(1080): at android.os.Looper.loop(Looper.java:137)
01-27 13:13:52.920: E/AndroidRuntime(1080): at android.app.ActivityThread.main(ActivityThread.java:4340)
01-27 13:13:52.920: E/AndroidRuntime(1080): at java.lang.reflect.Method.invokeNative(Native Method)
01-27 13:13:52.920: E/AndroidRuntime(1080): at java.lang.reflect.Method.invoke(Method.java:511)
01-27 13:13:52.920: E/AndroidRuntime(1080): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
01-27 13:13:52.920: E/AndroidRuntime(1080): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
01-27 13:13:52.920: E/AndroidRuntime(1080): at dalvik.system.NativeStart.main(Native Method)
01-27 13:18:52.971: I/Process(1080): Sending signal. PID: 1080 SIG: 9
Upvotes: 1
Views: 1084
Reputation: 2621
1. Replace all the getActivity()
in your LoginActivitys onCreateView(...)
with rootView
2. Make sure your defined layout elements are in the same xml
Upvotes: 1
Reputation: 2143
In OnCreateView()
replace all getActivity()
to rootView
, for example:
login = (Button) rootView.findViewById(R.id.login_btn);
Upvotes: 1
Reputation: 17401
change:
login = (Button) getActivity().findViewById(R.id.login_btn);
login_facebook = (Button) getActivity().findViewById(R.id.facebook_btn);
button_getprofile = (Button) getActivity().findViewById(
R.id.btn_get_profile);
forgot = (Button) getActivity().findViewById(R.id.text_forgot);
uname = (EditText) getActivity().findViewById(R.id.user_et);
pwd = (EditText) getActivity().findViewById(R.id.pwd_et);
to:
login = (Button) rootView.findViewById(R.id.login_btn);
login_facebook = (Button) rootView.findViewById(R.id.facebook_btn);
button_getprofile = (Button) rootView.findViewById(
R.id.btn_get_profile);
forgot = (Button) rootView.findViewById(R.id.text_forgot);
uname = (EditText) rootView.findViewById(R.id.user_et);
pwd = (EditText) rootView.findViewById(R.id.pwd_et);
The thing is until onCreateView returns a view, this fragment is not attached to the activity.
So getActivity().findViewById wont be able to find the view. So you can simply find the view from rootView. Or put this code in onAttach
event in fragment.
Upvotes: 1