我正在使用android-priority-jobqueue并且我使用改造来对我的rest api进行同步调用但是我不确定如何处理像401 Unauthorized错误这样的错误,我发回json说明错误.在进行异步调用时很简单,但我正在调整我的应用程序作为职位经理.下面是一个简单的尝试捕获IO异常,但401的422等?这该怎么做?
try {
PostService postService = ServiceGenerator.createService(PostService.class);
final Call<Post> call = postService.addPost(post);
Post newPost = call.execute().body();
// omitted code here
} catch (IOException e) {
// handle error
}
Run Code Online (Sandbox Code Playgroud)
编辑
使用改装响应对象是我的关键,返回改装响应对象允许我
Response<Post> response = call.execute();
if (response.isSuccessful()) {
// request successful (status code 200, 201)
Post result = response.body();
// publish the post added event
EventBus.getDefault().post(new PostAddedEvent(result));
} else {
// request not successful (like 400,401,403 etc and 5xx)
renderApiError(response);
}
Run Code Online (Sandbox Code Playgroud) 我的Android应用程序具有一个Activity的注册流设置,我将这些步骤作为片段加载到活动布局中.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
tools:context="com.example.android.ui.RegisterActivity">
<LinearLayout
android:id="@+id/register_container"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"></LinearLayout>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
现在每个片段类实现在RegisterActivity中实现的公共接口,以便我知道加载下一步片段并将新片段添加到backstack
mFragmentTransaction.addToBackStack(mStepOne.TAG);
Run Code Online (Sandbox Code Playgroud)
现在一切正常,通过4个步骤,我可以导航回步骤,同时保留每个片段中的输入数据,如果它保持在相同的方向(portait)
但是一旦我改变方向,片段视图就会消失
如果我达到第3步,我仍然可以点击后退按钮,它将返回显示通过查看后端改变监听器而在那里的片段
mFragmentManager.addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
if(mFragmentManager.getBackStackEntryCount() > 0) {
Log.d("BACK STACK", "TAG (name): " + mFragmentManager.getBackStackEntryAt( (mFragmentManager.getBackStackEntryCount() - 1)).getName());
}
}
});
Run Code Online (Sandbox Code Playgroud)
保留片段的计数和标签,但不保留视图.RegisterActivity onCreateView将术语片段加载到视图中,当浏览步骤时,它仍然在视图中.
mFragmentManager = getSupportFragmentManager();
mFragmentTransaction = mFragmentManager.beginTransaction();
mTerms = new RegisterFragmentTerms();
mFragmentTransaction.add(R.id.register_container, mTerms);
mFragmentTransaction.commit();
Run Code Online (Sandbox Code Playgroud)
在我看来,视图被加载到RegisterActivity之上,并在方向更改时被清除.有可能解决我正在尝试做的事情吗?或者我实施错了吗?这是我的第一个Android应用程序:)
干杯
android android-appcompat android-fragments android-orientation
我正在学习 Typescript,并且已按照教程逐字使用它和express api 应用程序,但出现以下错误:
D:\Development\Node\Ed\TypeScript\src\app.ts:5
const app: Application = express();
^
TypeError: express_1.default is not a function
at Object.<anonymous> (D:\Development\Node\Ed\TypeScript\src\app.ts:5:33)
at Module._compile (internal/modules/cjs/loader.js:689:30)
at Module.m._compile (D:\Development\Node\Ed\TypeScript\node_modules\ts-node\src\index.ts:814:23)
at Module._extensions..js (internal/modules/cjs/loader.js:700:10)
at Object.require.extensions.(anonymous function) [as .ts] (D:\Development\Node\Ed\TypeScript\node_modules\ts-node\src\index.ts:817:12)
at Module.load (internal/modules/cjs/loader.js:599:32)
at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
at Function.Module._load (internal/modules/cjs/loader.js:530:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
at main (D:\Development\Node\Ed\TypeScript\node_modules\ts-node\src\bin.ts:226:14)
Run Code Online (Sandbox Code Playgroud)
我不知道如何修复,希望得到任何指示
应用程序.ts 文件:
import express, { Application, Request, Response, NextFunction } from 'express';
const app: Application = express();
app.get('/', (req: Request, res: Response, next: NextFunction) => {
res.send('hello');
});
app.listen(5000, …Run Code Online (Sandbox Code Playgroud) 我正在尝试查询包含对象数组的 Mysql json 列。我想要在对象中满足条件的数组的长度
JSON 数组示例:
[
{"userId": 100, "type": 1, "status": 1},
{"userId": 101, "type": 2, "status": 1},
]
Run Code Online (Sandbox Code Playgroud)
当前查询:
SELECT IFNULL(JSON_LENGTH(json_users), 0) AS my_count, post_id
FROM posts WHERE post_id = 6421028173277829027
AND json_contains(json_users, '{"type" : 1, "status": 1}');
Run Code Online (Sandbox Code Playgroud)
这将返回以下所需的
+------------+---------------------+
| my_count | post_id |
+------------+---------------------+
| 1 | 6421028173277829027 |
+------------+---------------------+
Run Code Online (Sandbox Code Playgroud)
但是,如果我将查询 where param 'type' 更改为 3
SELECT IFNULL(JSON_LENGTH(json_users), 0) AS my_count, post_id
FROM posts WHERE post_id = 6421028173277829027
AND json_contains(json_users, '{"type" : 3, "status": 1}');
Run Code Online (Sandbox Code Playgroud)
我得到一个空集。但我试图得到以下内容: …
我是离子框架的新手,并试图在侧面菜单页面上使用选项卡组件实现正常工作,但是页面之间的导航动画与左右滑动动画声明不起作用.
例如,存在保持侧菜单代码的基本状态(app)
.state('app', {
url: '/app',
abstract: true,
templateUrl: "templates/menu.html",
controller: "appController"
})
Run Code Online (Sandbox Code Playgroud)
并将其加载到
<body>
<ion-nav-view animation="slide-left-right"></ion-nav-view>
...
Run Code Online (Sandbox Code Playgroud)
侧面菜单页面加载了父级(app.pageOne,app.pageTwo等)
登录和注册页面在根目录下加载,因此不需要包含侧面菜单(登录,注册等)
我创建了一个标签模板,用于侧边菜单页面,其中包含标签的另一个基本状态
.state('app.tabs', {
url: '/tab',
abstract: true,
views: {
'menuContent' :{
templateUrl: "templates/tabs.html"
}
}
})
Run Code Online (Sandbox Code Playgroud)
并在侧面菜单视图中加载
<ion-nav-view name="menuContent" animation="slide-left-right"></ion-nav-view>
Run Code Online (Sandbox Code Playgroud)
现在,如果我有一个页面'app.pageOne'并导航到'app.pageTwo',幻灯片动画将按预期工作.
但是,如果我在标签页'app.tabs.home'并点击链接转到'app.pageTwo',导航栏不会更新,也不会有任何动画过渡.
我知道它看起来像是一个父母的孩子问题,但我无法解决它,任何想法?
国家如下,例如
login
register
app ____page1
|____page2
|____Tabs
|____Home
|____Contact etc
Run Code Online (Sandbox Code Playgroud)
page1动画到page2工作正常home2到page2没有动画(它只是直接加载)
希望更有意义.
我正在用node.js创建一个简单的Rest Api,并且我用jwt令牌保护它,我已经设置了护照和passport-jwt来验证哪个工作正常,如果jwt令牌有错误或者它不存在,护照将发送401和正文"未经授权".我知道如何更改路由的错误,以通过执行以下操作发回我想要的自定义错误消息;
router.route('/test')
.put(function(req, res, next) {
passport.authenticate('jwt', { session: false }, function(err, user, info) {
if (err) { return next(err); }
if (!user) { return res.send("Custom Unauthorised").end(); }
return res.send("Test Route Accessed").end();
})(req, res, next);
});
Run Code Online (Sandbox Code Playgroud)
我有大约20条路线,我将它们命名为以下类似的路线;
router.route('/books/:id/authors').get(passport.authenticate('jwt', { session: false }), myRoutes.books.authors);
Run Code Online (Sandbox Code Playgroud)
现在您将注意到我将资源特定的路由存储在他们自己的文件中(即myRoutes.books),所以我的问题是,有没有办法让自定义回调作为中间件,不需要路由文件的重大重组?
干杯
我已经宣布了如下地图,
private Map<String, String> mUnsavedFields = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)
如果我添加以下条目;
mUnsavedFields.put("username", "Batman");
Run Code Online (Sandbox Code Playgroud)
它按预期工作,但当我在循环中获取"用户名"键的值时,
Iterator it = mUnsavedFields.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pair = (Map.Entry)it.next();
Timber.d("Key(%s), Value(%S)", pair.getKey(), pair.getValue());
it.remove(); // avoids a ConcurrentModificationException
}
Run Code Online (Sandbox Code Playgroud)
它返回"BATMAN"全部大写.为什么会发生这种情况?如何保留其中的确切格式?
android ×2
express ×2
node.js ×2
angularjs ×1
hashmap ×1
java ×1
json ×1
jwt ×1
mysql ×1
passport.js ×1
retrofit2 ×1
synchronous ×1
typescript ×1