我正在尝试为我的Android应用程序编写一个Instrumentation Test.
我遇到了一些奇怪的线程问题,我似乎无法找到解决方案.
我的原始测试:
@RunWith(AndroidJUnit4.class)
public class WorkOrderDetailsTest {
@Rule
public ActivityTestRule<WorkOrderDetails> activityRule = new ActivityTestRule<>(WorkOrderDetails.class);
@Test
public void loadWorkOrder_displaysCorrectly() throws Exception {
final WorkOrderDetails activity = activityRule.getActivity();
WorkOrder workOrder = new WorkOrder();
activity.updateDetails(workOrder);
//Verify customer info is displayed
onView(withId(R.id.customer_name))
.check(matches(withText("John Smith")));
}
}
Run Code Online (Sandbox Code Playgroud)
这导致了一个
android.view.ViewRootImpl $ CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能触及其视图.
...
com.kwtree.kwtree.workorder.WorkOrderDetails.updateDetails(WorkOrderDetails.java:155)
这个updateDetails()方法唯一能做的就是一些setText()调用.
经过一番研究后,似乎在我的测试中添加一个UiThreadTestRule和android.support.test.annotation.UiThreadTest注释可以解决问题.
@UiThreadTest:
@RunWith(AndroidJUnit4.class)
public class WorkOrderDetailsTest {
//Note: This is new
@Rule
public UiThreadTestRule uiThreadTestRule = new UiThreadTestRule();
@Rule
public ActivityTestRule<WorkOrderDetails> …Run Code Online (Sandbox Code Playgroud) 我正在使用parse.com的Android API并添加了Facebook/Twitter登录支持.这工作正常.
棘手的部分似乎正在退出.
如果我使用Twitter登录我的应用程序:
ParseTwitterUtils.logIn(UserLoginActivity.this, twitterLoginCallback);
Run Code Online (Sandbox Code Playgroud)
或使用Facebook:
ParseFacebookUtils.logInWithReadPermissionsInBackground(UserLoginActivity.this, null, facebookLoginCallback);
Run Code Online (Sandbox Code Playgroud)
我在网络对话框中提示输入我的Twitter凭据,然后允许或拒绝访问我的应用程序.一旦我允许它,我能够成功登录,并且我可以访问我的屏幕名称.一切都很好!
当我尝试登录了我的ParseUser的,我确实会退出.但是,如果我再次单击Facebook或Twitter登录按钮,我会预先验证为我之前的帐户,我无法切换帐户.
我试过了:
我的登录逻辑简单地开始:
ParseUser.logOut();
Run Code Online (Sandbox Code Playgroud)
Parse.enableLocalDatastore(this);按照我的Application建议打电话:https://stackoverflow.com/a/26338326/494356null
ParseTwitterUtils.getTwitter().setAuthToken(null);
ParseTwitterUtils.getTwitter().setAuthTokenSecret(null);使用Facebook SDK注销功能:
AccessToken.setCurrentAccessToken(null);
Profile.setCurrentProfile(null);
LoginManager.getInstance().logOut();
曾经有一Session.closeAndClearTokenInformation()所建议的在这里.但是Facebook已经弃用了Session类,它不再在SDK中了.
我真的很感激任何答案或建议.即使你只能回答推特或Facebook,但两者都不能回答,我仍然希望听到它.
我正在使用Unity构建一个Android应用程序,它正在顺利进行.但是,我有一个奇怪的问题,有关屏幕超时和锁屏没有显示.
应该发生什么
怎么了
笔记
我怀疑这是由于在屏幕超时时Unity不放弃的唤醒锁定引起的.这会导致应用程序保持焦点,锁屏永远不会"加载".这是一个非常严重的问题.
有谁知道有任何方法来解决这个问题?
注意:我已经在一周前的Unity Answers上问过这个问题,但还没有得到任何回复.我想也许我在这里有更好的运气.
我正在尝试在我的.NET应用程序中下载.torrent文件(不是torrent本身的内容).
使用以下代码适用于其他文件,但不适用于.torrent.生成的文件比通过浏览器下载文件小约1-3kb.在torrent客户端打开它时,它说洪流已损坏.
WebClient web = new WebClient();
web.Headers.Add("Content-Type", "application/x-bittorrent");
web.DownloadFile("http://kat.ph/torrents/linux-mint-12-gnome-mate-dvd-64-bit-t6008958/", "test.torrent");
Run Code Online (Sandbox Code Playgroud)
在浏览器中打开URL会导致文件正确下载.
有关为什么会发生这种情况的任何想法?是否有正确下载文件的WebClient有什么好的替代方案?
编辑:我和WebClient一样尝试了这个,它导致了同样的事情:
private void DownloadFile(string url, string file)
{
byte[] result;
byte[] buffer = new byte[4096];
WebRequest wr = WebRequest.Create(url);
wr.ContentType = "application/x-bittorrent";
using (WebResponse response = wr.GetResponse())
{
using (Stream responseStream = response.GetResponseStream())
{
using (MemoryStream memoryStream = new MemoryStream())
{
int count = 0;
do
{
count = responseStream.Read(buffer, 0, buffer.Length);
memoryStream.Write(buffer, 0, count);
} while (count != 0);
result = memoryStream.ToArray();
using (BinaryWriter writer = …Run Code Online (Sandbox Code Playgroud)