我有一个与服务器通信的应用程序.当用户登录到应用程序时,在服务器上创建身份验证令牌并将其存储在SharedPreferences应用程序中,并且每当应用程序从Web服务请求数据时,验证身份验证令牌.
我的问题是,将身份验证令牌存储在SharedPreferences?中是否安全?我问,因为具有root权限的用户可以访问首选项,提取令牌并使用它.
无论如何,在这方面有更多的安全吗?
所以我有一个登录活动这个活动膨胀一个login.xml布局,其中有一个USER_NAME和PASSWORD EditText Views,当我输入用户名和密码并单击登录按钮时,我开始一个新的活动.
新的Activity有一个Logout按钮,它基本上只是启动上一个Activity,如下所示:
Intent loginIntent = new Intent(getActivity(), Login.class);
loginIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
getActivity().startActivity(loginIntent);
Run Code Online (Sandbox Code Playgroud)
根据Android Documentation,该标志执行以下操作:
http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP
如果已设置,并且正在启动的活动已在当前任务中运行,则不会启动该活动的新实例,而是将关闭其上的所有其他活动,并将此Intent传递给(现在开启) top)旧活动作为新的意图.
问题是,在我注销后,用户名和密码仍然出现在EditText视图中,是否有一个破坏Login活动的Flag并且只是启动一个新的或者是否有办法在我注销时重置字段?哪种方法更好?
我有一个带有10个选项的导航抽屉选项#5 shoudl有另外7个可扩展/可折叠的选项(如子菜单)
如何创建一个"可折叠的导航项目"就像是描述在这里?
我正在尝试从Android http://developer.android.com/design/patterns/navigation-drawer.html#ImpactOnNav导入使用新"导航抽屉"所需的类
DrawerLayout:http: //developer.android.com/reference/android/support/v4/widget/DrawerLayout.html
ActionBarDrawerToggle:http: //developer.android.com/reference/android/support/v4/app/ActionBarDrawerToggle.html
导入android.support.v4.widget.DrawerLayout无法解析导入android.support.v4.app.ActionBarDrawerToggle无法解析
我已将库更新到最新版本,但仍然无法识别这些类.
所以我有以下设置:
前端:AngularJS App
后端:使用Identity Server的WebApi来验证客户端
在我的后端,我创建了一个新的内存客户端,如下所示:
new Client
{
Enabled = true,
ClientId = "myapp.mycompany",
ClientUri = "https://myapp.mycompany.com",
ClientName = "My Client",
Flow = Flows.Implicit,
AllowAccessToAllScopes = true,
IdentityTokenLifetime = 300,
AccessTokenLifetime = 3600,
RequireConsent = false,
RedirectUris = new List<string>
{
"https://myapp.mycompany.com/assets/idSrv/callback.html",
"https://myapp.mycompany.com/assets/idSrv/silentrefreshframe.html"
},
PostLogoutRedirectUris = new List<string>
{
"https://myapp.mycompany.com/index.html"
}
},
Run Code Online (Sandbox Code Playgroud)
在我的前端,我有以下代码声明客户端,我使用oidc-token-manager.js客户端
var authority = 'https://sts.mycompany.com/identity';
return {
baseUri: protocol,
tokenConfig: {
'client_id': 'myapp.mycompany',
'authority': authority,
'redirect_uri': 'https://myapp.mycompany.com/assets/idSrv/callback.html',
'post_logout_redirect_uri': 'https://myapp.mycompany.com/index.html',
'response_type': 'id_token token',
'scope': 'openid profile roleScope webApiScope', …Run Code Online (Sandbox Code Playgroud) 所以我要说我有以下片段:
Fragment1 Fragment2 DialogFragment Fragment3 Fragment4
让我们说我转到下面的片段,每个fragmetn被添加到后栈:
Fragment1 -> Fragment2 -> DialogFragment -> Fragment3 -> Fragment4
Run Code Online (Sandbox Code Playgroud)
如果我单击BACK按钮,这通常应该转到Fragment3,而是显示DialogFragment.
以下是我使用的片段交易:
Fragment1 - > Fragment2
FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction();
ft.replace(R.id.mainContentHolder, new Fragment2(), "Fragment2");
ft.addToBackStack(null);
ft.commit();
Run Code Online (Sandbox Code Playgroud)
Fragment2 - > DialogFragment
FragmentTransaction ft2 = getFragmentManager().beginTransaction();
ft2.setCustomAnimations(R.anim.flipp_in,R.anim.flipp_static);
ft2.add(R.id.mainContentHolder, new DialogFragment(), "DialogFragment");
ft2.addToBackStack(null);
ft2.commit();
ft2.hide(Fragment1.this);
Run Code Online (Sandbox Code Playgroud)
DialogFragment - > Fragment3
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.mainContentHolder, new Fragment3(), "Fragment3");
ft.addToBackStack(null);
ft.commit();
Run Code Online (Sandbox Code Playgroud)
Fragment3 - > Fragment4
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.mainContentHolder, new Fragment4(), "Fragment4");
ft.addToBackStack(null);
ft.commit(); …Run Code Online (Sandbox Code Playgroud) 对于 sweetAlert2 我注意到没有“高度”属性但有一个“宽度”属性,有没有办法将对话框的高度设置为 80%?
谢谢
如果我通过单击主页将应用程序置于后台。
然后转到系统设置->显示->字体大小->并从(普通)更改为(巨大)
然后点击我的应用将其放回前台
我收到以下错误消息:
FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity{ActivityThread.java)
Run Code Online (Sandbox Code Playgroud)
有人知道什么可能导致此错误吗?
这是与该错误有关的整个Logcat:
08-01 14:16:44.555: E/AndroidRuntime(3979): FATAL EXCEPTION: main
08-01 14:16:44.555: E/AndroidRuntime(3979): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp/com.myapp.MainActivity}: java.lang.NullPointerException
08-01 14:16:44.555: E/AndroidRuntime(3979): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
08-01 14:16:44.555: E/AndroidRuntime(3979): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
08-01 14:16:44.555: E/AndroidRuntime(3979): at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3576)
08-01 14:16:44.555: E/AndroidRuntime(3979): at android.app.ActivityThread.access$800(ActivityThread.java:140)
08-01 14:16:44.555: E/AndroidRuntime(3979): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1243)
08-01 14:16:44.555: E/AndroidRuntime(3979): at android.os.Handler.dispatchMessage(Handler.java:99)
08-01 14:16:44.555: E/AndroidRuntime(3979): at android.os.Looper.loop(Looper.java:137)
08-01 14:16:44.555: E/AndroidRuntime(3979): at android.app.ActivityThread.main(ActivityThread.java:4921)
08-01 14:16:44.555: E/AndroidRuntime(3979): at java.lang.reflect.Method.invokeNative(Native Method) …Run Code Online (Sandbox Code Playgroud) 反正知道a Fragment已完成加载整个内容Fragment吗?
我问的原因是因为在onResume我将应用程序放在后台的状态下我Fragment通过执行一个重新加载AsyncTask但我只想重新加载Fragment那个只在Fragment尚未完成加载时才放入后台布局的全部内容(图像,形状,数据等......)
无论如何要知道是否Fragment已满载?
所以我有以下条件
sessions = sessions.Where(y => y.session.SESSION_DIVISION.Any(x => x.DIVISION.ToUpper().Contains(SearchContent)) ||
y.session.ROOM.ToUpper().Contains(SearchContent) ||
y.session.COURSE.ToUpper().Contains(SearchContent));
Run Code Online (Sandbox Code Playgroud)
我想根据一个字符串是否为空将其分成多行,例如:
if (!String.IsNullOrEmpty(Division)) {
sessions = sessions.Where(y => y.session.SESSION_DIVISION.Any(x => x.DIVISION.ToUpper().Contains(SearchContent)));
}
if (!String.IsNullOrEmpty(Room)) {
// this shoudl be OR
sessions = sessions.Where(y => y.session.ROOM.ToUpper().Contains(SearchContent));
}
if (!String.IsNullOrEmpty(course)) {
// this shoudl be OR
sessions = sessions.Where(y => y.session.COURSE.ToUpper().Contains(SearchContent));
}
Run Code Online (Sandbox Code Playgroud)
如果您发现我想添加多个OR条件,则根据Room,course和Division字符串是否为空来拆分。
android ×7
.net ×2
drawer ×2
javascript ×2
navigation ×2
angular ×1
angularjs ×1
back-stack ×1
background ×1
c# ×1
flags ×1
font-size ×1
java ×1
layout ×1
linq ×1
loading ×1
onresume ×1
settings ×1
sql ×1
sweetalert ×1
token ×1
typescript ×1
web-services ×1
where-clause ×1