在短版 - org.apache...MultipartEntity已被弃用,它的升级MultipartEntityBuilder,出现在我们的在线论坛代表性不足.我们来解决这个问题.如何注册回调,因此我的(Android)应用可以在上传文件时显示进度条?
在长版 -这里的"失踪污垢简单的例子"的MultipartEntityBuilder:
public static void postFile(String fileName) throws Exception {
// Based on: https://stackoverflow.com/questions/2017414/post-multipart-request-with-android-sdk
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(SERVER + "uploadFile");
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
builder.addPart("file", new FileBody(new File(fileName)));
builder.addTextBody("userName", userName);
builder.addTextBody("password", password);
builder.addTextBody("macAddress", macAddress);
post.setEntity(builder.build());
HttpResponse response = client.execute(post);
HttpEntity entity = response.getEntity();
// response.getStatusLine(); // CONSIDER Detect server complaints
entity.consumeContent();
client.getConnectionManager().shutdown();
} // FIXME Hook up a progress bar!
Run Code Online (Sandbox Code Playgroud)
我们需要解决这个问题FIXME.(额外的好处是可中断上传.)但是(请纠正我是否我错了),所有在线示例似乎都不尽如人意. …
简而言之,我有一个字段,其中最右边的数字是最重要的.(当然,这个领域来自我们的附属公司的系统,基于他们的主键,所以最左边的数字每个时期只改变一次!)
每个人都知道CSS提供了一个右截断"text-overflow:ellipsis;".如何(没有向服务器添加代码以通过字符串手术准备该字段)我们是否截断LEFT上的字段,并将"..."elipses放在LEFT上?
(CSS3没问题.)
我正在尝试运行此行:
Context context = ApplicationProvider.getApplicationContext();
https://developer.android.com/training/data-storage/room/testing-db#java等示例代码推荐使用。
但我不能导入 ApplicationProvider(我只是喜欢文档从不导入任何东西,假设你的编辑器会正确提示你......)。此行失败,并显示“错误:包 androidx.test.core.app 不存在”:
import androidx.test.core.app.ApplicationProvider;
那么ApplicationProvider去哪儿了?我正在尝试使用当前上下文来创建 Room 数据库:
Context context = ApplicationProvider.getApplicationContext();
db = Room.inMemoryDatabaseBuilder(context, TestDatabase.class).build();
userDao = db.getUserDao();
Run Code Online (Sandbox Code Playgroud) 我有一个 Android 平板电脑和一个旧的 Linux 笔记本,我在那里开发了几个月的程序,没有出现任何故障。
然后我拿到了一个新的 Linux 笔记本,安装了 Android Studio,并尝试插入 Android 平板电脑。平板电脑永远不会出现在目标列表中;它只是说,“未知设备”。当我选择“设备连接疑难解答”时,向导会显示平板电脑的 ID,并带有神秘消息“设备当前处于未知状态”。
关闭并再次打开平板电脑的“USB 调试”选项并不能解决问题。当我拔下并重新插入 USB 时,平板电脑会发出声音,但不会发出请求,询问我是否接受此调试连接。
运行adb devices返回:
$ adb devices
List of devices attached
adb server version (41) doesn't match this client (39); killing...
* daemon started successfully
B007904026445 no permissions (user in plugdev group; are your udev rules wrong?); see [http://developer.android.com/tools/device.html]
Run Code Online (Sandbox Code Playgroud)
有小费吗?
再插拔一次 USB 终于给了我平板电脑上的请求者,请求允许通过这台笔记本进行调试。危机结束。
如何在不滥用 USB 电缆的情况下获得该请求者的实际答案会很好......
这是说明问题的代码:
from PyQt4 import QtGui
app = QtGui.QApplication([])
dialog = QtGui.QDialog()
button = QtGui.QPushButton('I crash')
layout = QtGui.QHBoxLayout()
layout.addWidget(button)
dialog.setLayout(layout)
def crash(): raise Exception('Crash!')
button.clicked.connect(crash)
button.click()
print 'I should not happen'
Run Code Online (Sandbox Code Playgroud)
当我运行它时,PyQt4为我处理错误.我的控制台显示"崩溃!"的堆栈跟踪 在其中,我看到'我不应该发生'.
这没有用,因为我已经交了一个包含许多处理程序的大型应用程序,我需要将所有错误强加到我的脸上(并进入我的 - 自动化测试).每次我运行时,错误都会逃脱我的网络,并且它们需要过多且无用的尝试:除了块,在每个处理程序中,只是为了捕获它们.
换句话说,我希望良好的代码非常好,而糟糕的代码则非常糟糕.没有粉刷.
如果已经提出这个问题,我会道歉,但是当我进行电子搜索时,我自然会让成千上万的新手询问基本的错误处理问题(或者更糟糕的是,我让新手询问如何关闭他们任性的异常!;)
如何覆盖PyQt4的默认错误处理,以便我自己传播或记录错误?请不要回答sys.excepthook,它会捕获PyQt4 无法捕获的错误.
[来自未来的注释,2021 年,在底部添加 - 他们缩短了答案]
下面我有一个具有上述结构的项目。
我可以愉快地在应用程序模块内很好地运行 uni 测试,但在 lib 模块上找到的单元测试不会运行,除非我手动右键单击 lib 模块内的 DummyDataTest.java 并单击 Android studio 内的运行单元测试。
有没有办法通过命令行自动运行位于我的 lib 模块中的单元测试?
现有的命令行 ./gradlew testDebug 仅运行位于应用程序模块内的单元测试。
提前致谢
JUnitTestProject
app [module]
src
main
java
de.ivu.junittest.app
DummyModel.java
...
...
test
java
de.ivu.junittest.app
DummyModelTest.java
...
lib [module]
src
main
java
de.ivu.junittest
DummyData.java
...
...
test
java
de.ivu.junittest.app
DummyDataTest.java
...
Run Code Online (Sandbox Code Playgroud) 我正在将Room数据库写入getFilesDir()文件夹。(将数据库写到可移动SD卡上显然需要进行一些重大研究!)
当我手动运行我的应用程序时,我想写一些记录并将其保留在数据库中,因此不需要继续写它们。运行测试时,我将数据库名称从“ * .dat”切换为“ _test.dat”(以Ruby on Rails或Django的“ environments”系统为例)。测试可以自由删除记录。
当我手动镊子在Android Studio中运行每个测试时,此系统可以工作。但是,当我批量运行in中的所有内容时,将gradlew删除数据库的“ * .dat”版本。这意味着每次我手动测试时,我都必须不断地手动重新填充数据库。
gradlew擦除getFilesDir()文件夹内容的内部是什么?以及如何(不弄清楚如何使用“外部”存储),我会击败它吗?
代码样例可根据要求提供,但全都是通用的东西。切换到getExternalFilesDir()不能解决问题。说要尝试StackOverflow ./gradlew test connectedAndroidTest -x uninstallAndroidTest,但是没有uninstallAndroidTest任务。
最高层build.gradle:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google() …Run Code Online (Sandbox Code Playgroud) Overflowers:我们有一个复杂的Dock小部件,里面有几个复杂的聚合QWidgets.
我需要允许用户将停靠窗口小部件最小化到功能区(作为QToolBar),仅包含最重要的小部件.但是因为这些小部件相当复杂,我宁愿不在代码中重现它们,并且煞费苦心地来回传递它们的自定义值.单击窗口小部件的一个副本应该与单击另一个窗口小部件完全相同.
因此,似乎我想创建一个QDoppelganger小部件,它来回委托输入和呈现事件,以生成另一个控件的功能副本:
class QDoppelganger(QtGui.QWidget):
def __init__(self, dupeMe, parent):
super(QDoppelganger, self).__init__(parent)
self.dupeMe = dupeMe
formerResizer = self.dupeMe.resizeEvent
def resizeMe(qResizeEvent):
self.setFixedSize(self.dupeMe.size())
return formerResizer(qResizeEvent)
self.dupeMe.resizeEvent = resizeMe
formerPainter = self.dupeMe.paintEvent
def paintMe(qPaintEvent):
self.update()
return formerPainter(qPaintEvent)
self.dupeMe.paintEvent = paintMe
def mouseMoveEvent(self, qMouseEvent): return self.dupeMe.mouseMoveEvent(qMouseEvent)
def mousePressEvent(self, qMouseEvent): return self.dupeMe.mousePressEvent(qMouseEvent)
def mouseReleaseEvent(self, qMouseEvent): return self.dupeMe.mouseReleaseEvent(qMouseEvent)
def paintEvent(self, qPaintEvent):
pix = QtGui.QPixmap(self.dupeMe.width(), self.dupeMe.height())
painter = QtGui.QPainter()
painter.begin(pix)
self.dupeMe.render(painter)
painter.end()
qp = QtGui.QPainter()
qp.begin(self)
qp.drawImage(0, 0, pix.toImage())
qp.end()
Run Code Online (Sandbox Code Playgroud)
它的驱动程序代码很简单:
button = QtGui.QPushButton('dupe me')
doppel = QtUtil.QDoppelganger(button, …Run Code Online (Sandbox Code Playgroud) 由于其他人草率的编码习惯,我继承了一个包含数百个警告的大型 Rails 项目,我无法修复这些。
当我运行一个单独的测试套件时,使用ruby test/function/my_controller_test.rb,我得到了一个干净的运行,没有警告。但是当我运行时rake test,Rails 的 rake 任务中的某些东西会打开ruby -w,从而激活 Ruby 的警告系统。如何停用该行?-w如果必须,我将编辑源并删除源,但它在哪里?
答案不是rake -q- 这会关闭 rake 自己的喷出。
一般来说,我来这里是因为ActivityTestRule<>不推荐使用久经考验的,显然我需要使用ActivityScenario<>or ActivityScenarioRule<>。
但是他们打破了“对视图的测试应该像对待对象一样对待视图对象”的规则。例如,我必须“有效地”将所有断言填充到回调中。我无法开始ActivityScenarioRule<>工作,因为无法填充我的数据库并延迟对onCreate().
所以这给我留下了ActivityScenario<>,我可以做到这一点:
// stuff database
ActivityScenario<MainActivity> scenario = ActivityScenario.launch(MainActivity.class);
scenario.onActivity( (ma) -> {
// assertions on ma that pass
onView(withId(R.id.configure_device_button)).perform(click());
// ...
} );
Run Code Online (Sandbox Code Playgroud)
问题是perform(click())挂断,在wait().
我们还在等什么?
当我将视图对象视为对象时,ma.configureDeviceButton.performClick()有效。所以这意味着我现在必须重新编写数百个视图测试中的每一个......
事实证明,我可以ma像这样共享我的 MainActivity 句柄:
activateActivity( (ma) -> {
TestFixtures.ma = ma;
} );
Run Code Online (Sandbox Code Playgroud)
MainActivity 的寿命比它的回调更长。(如果我们不使用 Execute Around 模式,那么为什么要使用回调呢?)
所以我可能不需要重新设计所有东西。每个人仍然需要一个答案,为什么我的书perform(click())挂了,但是......
android ×4
pyqt4 ×2
css ×1
css3 ×1
file-upload ×1
gradlew ×1
http ×1
java ×1
pyqt ×1
qwidget ×1
robolectric ×1
unit-testing ×1