小编use*_*024的帖子

63
推荐指数
4
解决办法
8万
查看次数

Espresso - 如何在执行某项操作后检查某项活动是否已启动?

以下是我的Espresso测试用例之一.

    public void testLoginAttempt() {
        Espresso.onView(ViewMatchers.withId(R.id.username)).perform(ViewActions.clearText()).perform(ViewActions.typeText("nonexistinguser@krossover.com"));
        Espresso.onView(ViewMatchers.withId(R.id.username)).perform(ViewActions.clearText()).perform(ViewActions.typeText("invalidpassword"));

        Espresso.onView(ViewMatchers.withId(R.id.login_button)).perform(ViewActions.click());
        // AFTER CLICKING THE BUTTON, A NEW ACTIVITY WILL POP UP.
        // Clicking launches a new activity that shows the text entered above. You don't need to do
        // anything special to handle the activity transitions. Espresso takes care of waiting for the
        // new activity to be resumed and its view hierarchy to be laid out.
        Espresso.onView(ViewMatchers.withId(R.id.action_logout))
                .check(ViewAssertions.matches(not(ViewMatchers.isDisplayed())));

    }
Run Code Online (Sandbox Code Playgroud)

目前我所做的是检查新活动(R.id.action_logout)中的视图是否可见.如果可见,我将假设活动成功打开.但它似乎没有像我预期的那样工作.有没有更好的方法来检查是否成功启动了新活动而不是检查该活动中的视图是否可见?谢谢

android android-activity android-espresso

56
推荐指数
6
解决办法
4万
查看次数

Android Activity生命周期和锁定/解锁设备

我刚刚发现,当设备启用锁定屏幕时,会发生以下情况.对于此活动,在清单中设置android:screenOrientation ="landscape".然后我用手机以纵向模式执行以下操作.

  1. 用户打开一个活动.
  2. 调用onCreated()
  3. onStart()被调用
  4. onResume()被调用
  5. 用户LOCKS设备4.5 onPause被调用()
  6. onDestroy()被调用
  7. onCreate()被调用
  8. onStart()被调用
  9. onResume()被调用8.5 onPause被调用()
  10. 用户解锁设备
  11. onResume()被调用
  12. onDestroy()被调用
  13. onCreate()被调用
  14. onStart()被调用
  15. onResume()被调用.

好吧,我不明白为什么在屏幕关闭后执行6,7,8 ..我也不明白为什么要执行11,12,13,14.当我锁定和解锁设备时,会发生一些奇怪的事情吗?我突然对活动生命周期感到困惑..任何人都可以澄清一下吗?

附上代码和日志消息

package com.example.wf;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d("log", "oncreate");   
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d("log", "onresume");
    };

    @Override
    protected void onStart() {
        super.onStart();
        Log.d("log", "onstart");
    };

    @Override
    protected void onPause() {
        super.onStart();
        Log.d("log", "onpause");
    };

    @Override
    protected void onDestroy() {
        Log.d("log", …
Run Code Online (Sandbox Code Playgroud)

lifecycle android locking unlock android-activity

30
推荐指数
2
解决办法
1万
查看次数

Retrofit 2.0 - 如何获得400 Bad Request错误的响应正文?

因此,当我对我的服务器进行POST API调用时,我收到了一个带有JSON响应的400 Bad Request错误.

{
   ?"userMessage": "Blah",
    "internalMessage": "Bad Request blah blah",
    "errorCode": 1
}
Run Code Online (Sandbox Code Playgroud)

我叫它

Call.enqueue(new Callback<ResponseBody>() {
    @Override
    public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
        //AA
    }

    @Override
    public void onFailure(Call<ResponseBody> call, Throwable t) {
        //BB
    }
}
Run Code Online (Sandbox Code Playgroud)

然而问题是,一旦我得到响应,就会调用onFailure()以便//调用BB.在这里,我无法访问JSON响应.当我记录api请求和响应时,它根本不显示JSON响应.并且Throwable t是IOException.然而,奇怪的是,当我在Postman上进行相同的调用时,它确实返回了400错误代码的预期JSON响应.

所以我的问题是当我收到400 Bad Request错误时如何获得json响应?我应该向okhttpclient添加一些东西吗?

谢谢

android retrofit

26
推荐指数
6
解决办法
4万
查看次数

android - 如何从proguard保持枚举

在我的proguard中,我有以下内容来防止公共枚举被混淆.

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,这是否也将公共枚举货币保存在这样的类中?

public class Foo {
    public enum **Currency** {PENNY, NICKLE, DIME, QUARTER};

    ...
}
Run Code Online (Sandbox Code Playgroud)

如果没有,我必须单独添加什么?

添加以下内容似乎没有帮助.

-keepattributes InnerClasses
Run Code Online (Sandbox Code Playgroud)

有什么建议?谢谢

enums android proguard

10
推荐指数
2
解决办法
9530
查看次数

Android - 我应该继续使用PreferenceActivity吗?

我的应用程序支持2.2到Android版本.问题是,对于"设置"页面,我现在正在使用PreferenceActivity.但是,正如您所知,它的许多方法都已弃用,它们告诉我使用基于片段的设置.但是,我发现如果我切换到使用PreferenceFragment和Fragment Activity,我就不能再支持2.2和2.3了,因为在API级别11以上支持PreferenceFragment.即使我使用支持库,它也不包含PreferenceFragment!我不知道为什么Google没有在支持库中添加PreferenceFragment.

无论如何,我认为我仍然可以使用旧的PreferenceActivity,但如果它说它已被弃用,为什么它不支持其支持库中的替代品呢?

任何建议表示赞赏!

android fragment preference

8
推荐指数
1
解决办法
6498
查看次数

Android - FragmentTabHost给了我"没有标签为null的标签"

我有一个使用TabHost相关联的活动ViewPager.虽然它工作正常,但我决定用它替换它FragmentTabHost.但是,在进行一些更改后,我收到一个呈现异常,其消息如下所示.

W/System.err(21723): java.lang.IllegalStateException: No tab known for tag null
W/System.err (21723):   at android.support.v4.app.FragmentTabHost.doTabChanged(FragmentTabHost.java:326)
W/System.err(21723):    at android.support.v4.app.FragmentTabHost.onAttachedToWindow(FragmentTabHost.java:276)
W/System.err(21723):    at android.view.View.dispatchAttachedToWindow(View.java:12064)
W/System.err(21723):    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2707)
W/System.err(21723):    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2714)
W/System.err(21723):    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2714)
W/System.err(21723):    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2714)
W/System.err(21723):    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2714)
W/System.err(21723):    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2714)
W/System.err(21723):    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2714)
W/System.err(21723):    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2714)
W/System.err(21723):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1339)
W/System.err(21723):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1131)
W/System.err(21723):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4611)
W/System.err(21723):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
W/System.err(21723):    at android.view.Choreographer.doCallbacks(Choreographer.java:555)
Run Code Online (Sandbox Code Playgroud)

基本上我所做的是创建一个名为IconSwipeyTabsView扩展FragmentTabHost并在主要活动或片段中使用的类.我对Google和StackOverflow进行了大量研究,但没有一个给我一个明确的答案.仅供参考,这些是两个核心文件的网址.

如果有人能帮助我,我真的很感激.谢谢!

android fragment android-tabhost

7
推荐指数
1
解决办法
6573
查看次数

Android AsyncTask - 为什么不执行doInBackground()?

我有一个包含以下方法的嵌套片段:

public void onSave() {
    if (getActivity() == null || view == null) return;
    if (file != null && file.exists()) {
        new AsyncTask<Void, Void, Void>() {
            @Override
            protected void onPreExecute() {
                Log.d("log", "onPreExecute of save ex");
            }

            @Override
            protected Void doInBackground(Void... params) {

                Log.d("log", "doInBackground of save ex");
                //DO SOMETHING
                return null;
            }

            protected void onPostExecute(Void result) {
                BaseFragment fragment = new LocalListFragment();
                ((LocalLauncherFragment)(LocalEditFragment.this.getParentFragment())).setFragment(fragment);
                Log.d("log", "end of save ex");
            };
        }.execute();
    } else {
        showAlert();
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果我第一次调用此方法,它将执行直到onPostExecute().但是,如果我转到其他片段并重新打开此片段(通过创建一个新的片段对象并替换它),则只执行onPreExecute().为什么这个asyncTask对象第二次没有很好地执行?

如果我使用executeOnExecutor()那么它会在第二次正常工作.但为什么不执行()工作?AsyncTask的生活是否与片段或其他东西联系在一起?

提前致谢!

android fragment android-asynctask

6
推荐指数
1
解决办法
9184
查看次数

Android中的活动之间的对象共享

嗨,我有一个关于在整个应用程序中传递对象的问题.假设我想在整个应用程序中拥有一个大的自定义对象.多个活动和服务将使用此对象.我最初做的是这个.

首先,我创建了一个Application类并定义了一个singleton对象.

public class FooApplication extends Application {
    public static SharedObj obj;
    ...
}
Run Code Online (Sandbox Code Playgroud)

其次,在一个活动中我设置了这个对象的值

public class FooActivity extends Activity {
    OnCreate() {
        FooApplication.obj = SharedObj.getInstance();
    }
}
Run Code Online (Sandbox Code Playgroud)

第三,在另一个活动中,我访问了这个对象

public class BarActivity extends Activity {
    OnCreate() {
        SharedObj useThis = FooApplication.obj;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,这有什么问题?它似乎工作正常,但我发现有时这个单例对象的值由于某种原因被设置为null.我这样分享这个对象而不是让它变得可分的主要原因是这样做对我来说有点贵,我做的事情看起来很容易.有缺点吗?

经过一些研究,我发现还有另一种方法可以在整个应用程序中共享一个对象.

首先,在app类中定义

public class FooApplication extends Application {
    public SharedObj obj = new SharedObj();
    ...
}
Run Code Online (Sandbox Code Playgroud)

其次,在这样的活动中初始化

public class FooActivity extends Activity {
    OnCreate() {
        FooApplication fooApp = (FooApplication)getApplicationContext();
        fooApp.obj = new SharedObj();
    }
}
Run Code Online (Sandbox Code Playgroud)

第三,在另一个活动中,我访问了这个对象 …

singleton android sharing applicationcontext

6
推荐指数
1
解决办法
4374
查看次数

将ViewPager与Fragments一起使用时,会在滑动时销毁碎片

我的应用程序有一个ViewPager,其适配器返回三个片段.每个Fragment都会在onCreateView中从Web加载一个数据列表.所以让我们称这些片段为A,B,C.

一旦打开包含viewPager的活动,就会加载片段A和B. 但现在只有A可见.因此,如果我向右滑动,则B可见,并且C在场景后面加载.如果我再次向右滑动,则可以看到C. 问题是,片段A的onDestroyView()被调用,所有加载的数据都消失了!因此,如果我回到片段A,则再次调用A的onCreateView(),并再次从Web加载A的数据.

与Fragment一起使用时,它是ViewPager的默认行为吗?是否有可能将片段活着(通过不调用onDestroyView()),即使它不可见?

谢谢

android fragment android-viewpager

5
推荐指数
1
解决办法
2183
查看次数