我正在开发一个使用JSON进行服务器通信的Android应用程序,当我尝试解析我的json文件时,我遇到了一个奇怪的问题.
这是我服务器的json
{
"street2": null,
"province": null,
"street1": null,
"postalCode": null,
"country": null,
"city": null
}
Run Code Online (Sandbox Code Playgroud)
我通过调用String city = address.optString("city", "")我的地址Json-object 获得City的价值.对于这种情况,我希望city是空的(这就是optString的用途不是吗?)但事实上它包含字符串"null".因此,当String包含文本时,进一步的null-或isEmpty-checks将返回false.如果我调用address.isNull("city")它返回true,这是正确的.只是optString失败了.
我在Google或Stackoverflow上找不到任何关于此问题的内容.我真的不明白它是如何发生的,因为我认为optString会完全按照我的预期行事.谁知道这里出了什么问题?
我开始使用谷歌播放服务的地理围栏API.我想我理解了一般概念,但我无法确定地理围栏是否存在限制.我将地理列表列表提供给位置客户端,然后处理其余的.但是我可以将多少地理围栏传递给位置客户端?我想要多少?
我正在使用zxing生成不同类型的条形码(EAN,2of5和DataMatrix).生成一般工作正常.我目前唯一的问题是zxing只生成一个14x14像素的位图,这个位图太小了.但只有在使用DataMatrix时!EAN13,2of5/ITF和QR码与相同的代码完美配合.
我的代码:
BitMatrix bitMatrix = new DataMatrixWriter().encode(message, BarcodeFormat.DATA_MATRIX, 1080, 1080, null);
int height = bitMatrix.getHeight(); //height is always 14, it doesn't matter what value I pass to the encoder
Run Code Online (Sandbox Code Playgroud)
你可以想象这在像nexus 5这样的1080p屏幕上看起来很糟糕.我有什么问题吗?我是否必须为DataMatrix做一些特殊设置?
谷歌和Stackoverflow无法帮助我,因为我找不到任何使用DataMatrix的例子

更新 这是我将bitmatrix转换为位图的方法
int width = bitMatrix.getWidth();
int height = bitMatrix.getHeight();
int[] pixels = new int[width * height];
// All are 0, or black, by default
for (int y = 0; y < height; y++) {
int offset = y * width;
for (int x = 0; x < …Run Code Online (Sandbox Code Playgroud) 我正在开发一个有一些活动的应用程序.一个活动开始下一个活动.要分享一些值,我正在使用一个名为MyApplication 的Application的自定义实现(我在谈论android.app.Application).
众所周知,如果需要更多空间,Android系统会杀死一个应用程序.但这会导致一个问题:
奇怪的是,系统会破坏我的应用程序,但它似乎保留了Activity.我真的不明白为什么会这样,因为应用程序似乎没有生命周期.
我想拥有的:
当MyApplication(整个应用程序,不仅是活动)被杀死时,我希望最后的活动也被杀死.因此,当我重新打开App时,它会启动manifest.xml提供的主要活动.
或者
MyApplication中的值是持久的,如果应用程序被销毁,不会丢失.(我说的是一些对象,所以我认为共享偏好不起作用).
我不想使用服务绑定我的活动,但有没有类似的方法告诉系统我上次使用的活动依赖于应用程序上下文?
我希望你明白我的问题是什么,有人可以帮我解决这个问题.
我正在使用zxing生成EAN13条形码.使用此代码时,一切正常:
new EAN13Writer().encode(eanValue, BarcodeFormat.EAN_13, requestedWidth, requestedHeight);
Run Code Online (Sandbox Code Playgroud)
结果:

现在,客户希望拥有像这样的铅,分离器和拖车:

(图片来源)
据我所知,zxing的代码(见这里)我上面使用的代码不能比其他代码更长.但是我发现在EAN13Writer 中有两个编码方法,看起来,第二个编码函数正是我想要做的.但问题是这个函数不会返回一个bitmatrix而是一个布尔数组.(编辑:没有功能没有实现我想做的事)
任何人都可以告诉我如何实现第二种条码风格?
我有一个ListView,它应该有四种不同类型的项目.我搜索它,找到了不同的解决方案,这是可能的,并试图像其他人一样做我的东西.我创建了不同的ViewHolders(每种类型一个).当ListView第一次出现时,一切都很好.但是当我开始滚动时,我得到一个classCastException.原因很明显:
holder = (FeedViewHolder) convertView.getTag();
Run Code Online (Sandbox Code Playgroud)
我的适配器试图通过从convertView获取标记来获取ViewHolder,如果它不是null.但是这个ViewHolder似乎是上一个项目的ViewHolder,因此无法进行渲染.
我搜索StackOverflow和Google,但所有示例似乎都有效,因为他们使用相同或非常相同的ViewHolders来处理不同的项目.但我的对象确实彼此不同,需要不同的ViewHolders.任何人都可以帮我解决这个问题吗?
我面临着一个我以前从未见过的奇怪问题.我有一个以毫秒为单位的日期,并希望将其显示为可读日期.这是我的代码:
if (validUntil == 0) {
return activity.getResources().getString(R.string.forever);
} else {
Date startDate = new Date(validFrom);
Date endDate = new Date(validUntil);
if (startDate.compareTo(endDate) < 0) {
String date = sdf.format(startDate) + " - " + sdf.format(endDate);
return date;
} else if (startDate.compareTo(endDate) == 0) {
return activity.getResources().getString(R.string.forever);
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我只想创建一个显示时间跨度的字符串.当我调试到我的代码时,日期对象包含正确的值,同时sdf.format(...)给我一个无效的日期.
例:
startdate 以毫秒为单位: 1375017555000startdate 对象包含: Sun Jul 28 15:19:15 CEST 2013sdf.format(startDate) 收益: 28.19.2013我得到了结束日期的结果.
我究竟做错了什么?
我的共享偏好有一个非常奇怪的问题。我使用它们来存储用户 ID、不同的设置等等。如果用户单击了我的菜单中的一个项目(我正在使用Menu-Drawer),我正在使用一个切换片段的活动。
每次登录后,我都会存储用户配置文件。这工作完美。执行此操作后,我可以重新启动应用程序,从内存中杀死它,我什至可以重新启动我的设备并且我的值仍然存储。但是当我切换片段时,例如我在主视图中并单击菜单中的“关于应用程序”,一切都消失了。我的价值观是空的。
它变得更奇怪的地方:如果我已经在主视图中时通过选择主项来强制活动重新加载片段,它仍然被存储。只有当我用不同类型的片段替换它时,一切都会丢失。
我不知道为什么应用程序会这样。所有这些都在具有相同上下文的相同活动中。我总是使用 getActivity 来获取片段中的上下文。
这是我存储它的代码的简化片段。
public static void storeUserProfile(Context context, LoginEvent event, String userId, String emailAddress, String passwordHash) {
SharedPreferences userPrefs = context.getSharedPreferences(AppConfig.USER_PREFS, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = userPrefs.edit();
editor.clear();
editor.putString("username", event.userName);
editor.putString("id", userId);
editor.putString("email", emailAddress);
editor.commit();
}
Run Code Online (Sandbox Code Playgroud)
这就是我切换片段的方式:
HomeFeedFragment fragment = new HomeFeedFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, fragment);
ft.commit();
Run Code Online (Sandbox Code Playgroud) android ×7
java ×3
barcode ×2
zxing ×2
adapter ×1
datamatrix ×1
geofencing ×1
json ×1
listview ×1