如何制作 parse.com 注销按钮以将我带到另一个让我登录或注册的活动?
Posted
技术标签:
【中文标题】如何制作 parse.com 注销按钮以将我带到另一个让我登录或注册的活动?【英文标题】:How to make a parse.com log out button to take me to another activity which lets me either log in or sign up? 【发布时间】:2015-02-12 11:40:17 【问题描述】:我有一个让我注册或简单登录的活动,当用户登录时,显示四个片段,可以通过可滚动选项卡导航,最后一个片段有一个注销按钮,我需要那个注销按钮可用于 1) 直接从 parse.com 注销和 2) 让用户进入他们可以注册或登录的活动。
这是我目前的代码
这是登录或注册活动
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.signup_or_login);
// Log in button click handler
((Button) findViewById(R.id.login)).setOnClickListener(new View.OnClickListener()
public void onClick(View v)
// Starts an intent of the log in activity
startActivity(new Intent(SignUpOrLogInActivity.this, LoginActivity.class));
);
// Sign up button click handler
((Button) findViewById(R.id.signup)).setOnClickListener(new View.OnClickListener()
public void onClick(View v)
// Starts an intent for the sign up activity
startActivity(new Intent(SignUpOrLogInActivity.this, SignUpActivity.class));
);
这是退出按钮所在的设置片段
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState)
return inflater.inflate(R.layout.setup_fragment,container,false);
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
logout = (Button) getView().findViewById(R.id.logout_button);
// Logout Button Click Listener
logout.setOnClickListener(new OnClickListener()
public void onClick(View view)
// Logout current user
ParseUser.logOut();
startActivity(new Intent(getActivity(), SignUpOrLogInActivity.class));
);
问题是 1)当我运行应用程序时,它首先从可滚动选项卡(片段)开始,而不是在登录或注册活动和 2)当我转到日志的设置片段时退出按钮位于应用程序崩溃并显示一条消息“不幸的是您的应用程序已停止。
这里是清单
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:name=".ParseStarter">
<activity
android:screenOrientation="portrait"
android:name=".MainActivity"
android:label="@string/app_name" >
</activity>
<activity android:name=".DispatchActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".LoginActivity" />
<activity android:name=".SignUpActivity" />
<activity android:name=".SignUpOrLogInActivity" />
</application>
这里是 LOGCAT
Process: com.sebasdeldihotmail.mediocre, PID: 1863
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
at com.sebasdeldihotmail.mediocre.Setup.onCreate(Setup.java:35)
at android.support.v4.app.Fragment.performCreate(Fragment.java:1763)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:913)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1126)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1489)
at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:486)
at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1073)
at android.support.v4.view.ViewPager.populate(ViewPager.java:919)
at android.support.v4.view.ViewPager$3.run(ViewPager.java:249)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
at android.view.Choreographer.doCallbacks(Choreographer.java:580)
at android.view.Choreographer.doFrame(Choreographer.java:549)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
12-14 00:26:52.791 1863-1863/com.sebasdeldihotmail.mediocre I/Process﹕ Sending signal. PID: 1863 SIG: 9
这里是调度活动类
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState)
return inflater.inflate(R.layout.setup_fragment,container,false);
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
logout = (Button) getView().findViewById(R.id.logout_button);
// Logout Button Click Listener
logout.setOnClickListener(new OnClickListener()
public void onClick(View view)
// Logout current user
ParseUser.logOut();
startActivity(new Intent(getActivity(), SignUpOrLogInActivity.class));
);
感谢您抽出宝贵时间阅读本文,非常感谢。
【问题讨论】:
您有一个活动“SignUpOrLogInActivity”,其中包含两个按钮“登录”和“注册”,在登录或注册后控制转到另一个包含四个标签栏的活动。最后一个有注销按钮。再次单击此按钮后,控件将转到“SignUpOrLogInActivity”此活动...我是对的....现在您可以发布 logcat ... 是的,先生,您是对的!这正是我想做的! 请发布您的 logcat“完整错误消息” 什么是 DispatchActivity ?是标签容器活动...? DispatchActivity 是我创建的一个类,用于查看是否有登录用户,让我放代码:) 【参考方案1】:对于问题 1:你在清单文件中写了这个
<activity android:name=".DispatchActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".LoginActivity" />
<activity android:name=".SignUpActivity" />
<activity android:name=".SignUpOrLogInActivity" />
现在改一下
<activity android:name=".SignUpOrLogInActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".LoginActivity" />
<activity android:name=".SignUpActivity" />
对于问题 2:
现在看看你的注销按钮对象......它实际上是空的......你在onCreateView
..中膨胀了一个布局。所以你需要创建一个与这个视图相关联的按钮对象..所以在onCreateView()
方法中这样做
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState)
View root = inflater.inflate(R.layout.setup_fragment,container,false);
Button logout = (Button)root.findViewById(R.id.logout_button);
logout.setOnClickListener(new OnClickListener()
public void onClick(View view)
// Logout current user
ParseUser.logOut();
startActivity(new Intent((ParentActivity)getActivity(), SignUpOrLogInActivity.class));
);
return root;
希望它有效...如果遇到任何问题..只需发表评论...谢谢
【讨论】:
那么在这种情况下我应该为 onCreateView 方法返回什么?以上是关于如何制作 parse.com 注销按钮以将我带到另一个让我登录或注册的活动?的主要内容,如果未能解决你的问题,请参考以下文章