我正在分析一个相当可怕的遗留数据库/代码库,尝试通过将查询组合到连接中来减少服务器负载(包括通常调用超过一百万个单独查询的电子邮件警报cron作业).
SELECT * FROM
class_alerts_holding ah
INNER JOIN class_listings l ON l.id = ah.lid
INNER JOIN class_users u ON u.id = ah.uid
LEFT JOIN class_prodimages pi ON pi.pid = ah.lid
Run Code Online (Sandbox Code Playgroud)
吐出120列......
aid | id | lid | uid | oid | catName | searchtext | alertfreq | listType | id | owner | title | section | shortDescription | description | featured | price | display | hitcount | dateadded | expiration | url | notified | searchcount | repliedcount …Run Code Online (Sandbox Code Playgroud) 我观看了Google I/O REST演讲并阅读了幻灯片:http://www.google.com/events/io/2010/sessions/developing-RESTful-android-apps.html
关于如何很好地处理远程服务器引发的更新错误,我仍然有点不清楚.我已经实现了自己的ContentProvider和SyncAdapter.考虑这种情况:
通过REST调用更新用户的联系人详细信息:
我的问题是,SyncAdapter向我的ContentProvider发出信号的最佳方式是,这个更改需要从应用程序的本地数据库中退出,并向我的Activity发出更新请求失败的信号(并传递返回的错误消息)从服务器)?
我的活动需要在等待结果时显示进度微调器,并知道请求是成功还是失败.
为了使用来自服务器的内容更新本地应用程序数据库,SyncAdapter模式对我来说非常有意义,而且我的工作正常.但是对于从应用程序到服务器的更新,我似乎无法找到处理上述方案的好方法.
另一件事......;)
假设我调用ContentResolver.notifyChange(uri,null,true); 来自我的ContentProvider的update()方法.true以及android:supportsUploading="true"将导致我的SyncAdapter的onPerformSync()被调用.太棒了,但是在onPerformSync()中,如何判断我应该同步哪个URI?每次收到Sync请求时,我都不想简单地刷新整个数据库.但是你甚至无法将Bundle传递给notifyChangeCall()以传递给onPerformSync().
我在onPerformSync()上看到的所有例子都非常简单,并没有使用自定义的ContentProvider,那里有任何现实世界的例子吗?而且文档有点像燕窝.先生,维吉尔·多布扬斯基(Virgil Dobjanschi),你没有划桨就把我留在了小溪里.
rest android sync android-contentprovider android-syncadapter
我的SyncAdapter遇到了一些奇怪的行为.
我第一次安装我的应用程序(使用adb卸载后),它会启动并创建一个帐户.根据某些语句的顺序(见下文),我的SyncAdapter onPerformSync()永远不会被调用; 我在"帐户和同步"下的帐户显示"同步进行中"图标无限期地旋转.如果我取消选中我应用帐户旁边的同步复选框,然后重新检查它,我的onPerformSync()会立即被调用.
这导致我的SyncAdapter永远不会被调用."正在进行同步"图标永远旋转,除非我取消选中,然后重新检查同步复选框:
final Account account = new Account(mUsername, getString(R.string.ACCOUNT_TYPE));
mAccountManager.addAccountExplicitly(account, mPassword, null);
ContentResolver.setSyncAutomatically(account, getString(R.string.CONTENT_AUTHORITY), true);
ContentResolver.setIsSyncable(account, getString(R.string.CONTENT_AUTHORITY), 1);
Run Code Online (Sandbox Code Playgroud)
通过对相同语句的这种排序,一切都很完美:
final Account account = new Account(mUsername, getString(R.string.ACCOUNT_TYPE));
ContentResolver.setSyncAutomatically(account, getString(R.string.CONTENT_AUTHORITY), true);
ContentResolver.setIsSyncable(account, getString(R.string.CONTENT_AUTHORITY), 1);
mAccountManager.addAccountExplicitly(account, mPassword, null);
Run Code Online (Sandbox Code Playgroud)
我的猜测是我将SyncManager置于某种不一致的状态,因为它在创建帐户时立即触发了同步请求,而我正在改变它的配置.但是(几乎没有连贯的)文档没有提到任何随时调用这些函数的问题.
对于其他与SyncAdapter斗争的人而言,我发现除非你打电话,否则contentResolver.requestSync()永远不会触发你.SyncAdapter.onPerformSync()ContentResolver.setIsSyncable(account, getString(R.string.CONTENT_AUTHORITY), 1);
有人可以解释这种行为吗?围绕账户和同步的文档至少可以说是不清楚的.
我在2.1仿真器上得到了这种行为,针对2.1 SDK进行了编译.
我在FrameLayout中有几个视图.我已经编写了一个转换,其中每个视图都应用了自定义动画类.在此过渡期间,我需要将z顺序底部的视图置于前面.我这样做:
public static void putBackAtFront(ViewGroup v)
{
v.getChildAt(0).bringToFront();
refreshEverything(v);
}
Run Code Online (Sandbox Code Playgroud)
这是从我的自定义动画的applyTransformation()中调用的.
即
public class PivotAnimation extends Animation {
private View view;
...
@Override
protected void applyTransformation(float interpolatedTime, Transformation t)
{
...
if(interpolatedTime >= 1.f && isAtBack(view))
{
putBackAtFront(view);
}
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
refreshEverything()调用父FrameLayout及其所有子节点上的invalidate()和requestLayout().
除了在调用putBackAtFront()时,一切都工作正常,现在位于底部的视图在立即重新出现之前消失为单帧,导致明显的闪烁.我也试过没有调用refreshEverything(),它没有任何区别.
我的目标是API级别7.
我已经将 ZXing 1.7 的 /android 项目设置为我的主 Android 应用程序项目引用的库。作为快速测试/概念证明,我使用了 CaptureActivity,其方式与此处描述的方式相同: http: //damianflannery.wordpress.com/2011/06/13/integrate-zxing-barcod ...
大多数情况下,一切运行良好,我可以启动 CaptureActivity 并在启动它的活动中接收扫描的数据。然而,我得到了一些非常奇怪的行为,我认为这可能与我的项目和 /android ZXing 项目之间的资源 ID 冲突有关。这需要一些解释,所以请耐心等待......
我使用以下代码启动 CaptureActivity:
Button scanBtn = (Button)findViewById(R.id.mainmenu_btn_scan);
scanBtn.setOnClickListener(
new View.OnClickListener()
{
public void onClick(View v)
{
Intent i = new Intent("com.google.zxing.client.android.SCAN");
i.putExtra("SCAN_MODE", "QR_CODE_MODE");
startActivityForResult(i, SCAN_CODE);
}
});
Run Code Online (Sandbox Code Playgroud)
mainmenu_btn_scan在menu.xml中定义:
<LinearLayout android:id="@+id/mainmenu_view" style="@style/MainMenu" xmlns:android="http://schemas.android.com/apk/res/android">
...
<Button android:id="@+id/mainmenu_btn_scan"
android:drawableTop="@drawable/btn_scan_drawable"
style="@style/MainMenuButton"
android:text="Scan"/>
...
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
btn_scan_drawable.xml 位于 /drawable 中,是一个可绘制选择器:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/scan_btn_pressed" android:state_focused="true" android:state_pressed="true" />
...
</selector>
Run Code Online (Sandbox Code Playgroud)
奇怪的问题是这样的:当我以横向方向握住手机 并启动 CaptureActivity 时,我看到 scan_btn_pressed 图像在显示屏上拉伸,并且它的另一个副本也在“在取景器矩形文本内放置条形码”中拉伸。 …
下面的代码是我尝试将mMyView发送到mPivotParent的子集的前面或后面,因此它将呈现在其他人的顶部或后面.隐藏视图将不会在我的情况就足够了.
mPivotParent是一个FrameLayout.
查看mPivotParent.mChildren显示我的代码"工作",因为正确设置了顺序.但它对z顺序没有影响.不仅如此,重新定位代码被调用的次数越多,帧速率就会越来越慢.总共有4个孩子,并且mPivotParent.mChildrenCount按预期保持在4 个孩子.
我的目标是API级别7.
@Override
public boolean onTouchEvent(MotionEvent event) {
Display display = getWindowManager().getDefaultDisplay();
float x = event.getRawX();
float sWidth = (int)display.getWidth();
float xLerpFromCenter = ((x / sWidth) - .5f) * 2.f; // [-1, 1]
mRotateAnimation.mfLerp = xLerpFromCenter;
if(xLerpFromCenter < -0.2f && mPivotParent.getChildAt(0) != mMyView)
{
mPivotParent.removeView(mMyView);
mPivotParent.addView(mMyView, 0);
refreshEverything();
}
else if(xLerpFromCenter > 0.2f && mPivotParent.getChildAt(0) == mMyView)
{
mPivotParent.removeView(mMyView);
mPivotParent.addView(mMyView, mPivotParent.getChildCount() - 1);
refreshEverything();
}
return super.onTouchEvent(event);
}
private void refreshEverything() …Run Code Online (Sandbox Code Playgroud) 请参阅下图以了解我正在尝试做什么.从提供的图像中可以明显看出.看起来这应该很简单.
问题是,为什么平铺的中间部分偏移了每个列表条目的不一致数量?
product_list.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="fill_parent">
<ListView android:id="@+id/android:list"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:divider="@drawable/product_list_divider"
android:background="@drawable/main_background_bitmap"/>
<TextView android:id="@+id/android:empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="No results."/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
product_list_divider.xml
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<bitmap
android:src="@drawable/shelf_middle"
android:tileMode="repeat"/>
</item>
<item>
<bitmap
android:src="@drawable/shelf_left"
android:gravity="left"/>
</item>
<item>
<bitmap
android:src="@drawable/shelf_right"
android:gravity="right"/>
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

这个错误意味着什么以及为什么我不能使用大括号初始化列表来初始化这个结构?不幸的是,结构是自动生成的。
\n// Contains no functionality, purely documentative.\nstruct NativeTable {};\n\n...\n\nstruct TableKeyT : public flatbuffers::NativeTable {\n typedef TableKey TableType;\n std::string exp{};\n std::string type{};\n std::string ext{};\n};\n\n...\n\nTableKeyT key { std::string(sym), std::string(ex), std::string("") };\nRun Code Online (Sandbox Code Playgroud)\n[build] ../../../src/io/socket.cpp:102:39: error: initializer for \xe2\x80\x98flatbuffers::NativeTable\xe2\x80\x99 must be brace-enclosed\n[build] 102 | TableKeyT key { std::string(sym), std::string(ex), std::string("") };\n[build] | ^~~\nRun Code Online (Sandbox Code Playgroud)\n 我正在三星 Galaxy Note 3上进行测试,根据文档,其分辨率为 1080 x 1920 像素(约 386 ppi 像素密度)。我想弄清楚dp 中的屏幕宽度是多少,以便我可以正确应用并检查新的尺寸限定符。
我用一把好的 ole 尺子测量了屏幕宽度(纵向)= 71mm = 2.8 英寸 1080 / 2.8 = 386 ppi。太好了,这符合规定的密度。
我正在尝试计算屏幕的宽度是多少 dp 单位。
dp = px / (dpi / 160) 从这里
= 1080 / (386 / 160) = 1080 / 2.4125 = 447.7 dp
所以如果我这样做:
<TextView
android:id="@+id/density_test"
android:layout_width="447dp"
android:layout_height="wrap_content"
android:background="#ffff0000"
android:text="DENSITY TEST 447dp" />
Run Code Online (Sandbox Code Playgroud)
那么在我的 Galaxy Note 3 上,这个视图应该几乎与屏幕宽度一样。但事实并非如此,它更广泛。
因此,我将上面的视图设置为layout_width="300dp",用标尺测量了它的宽度,并根据此测试推断出实际屏幕宽度(以 dp 为单位): …