0

这是我的 Asnyc 任务类

class EndpointsAsyncTask extends AsyncTask<Pair<Context, String>, Void, String> {
    private static MyApi myApiService = null;
    private Context context;

    private static final String TAG = "EndpointsAsyncTask";
    private MainActivity activity;

    private ProgressBar mProgressBar;

    private Exception mError = null;

    private JsonGetTaskListener mListener = null;

    InterstitialAd mInterstitialAd;

    public EndpointsAsyncTask setListener(JsonGetTaskListener listener) {
        this.mListener = listener;
        return this;
    }

    public static interface JsonGetTaskListener {
        public void onComplete(String jsonString, Exception e);
    }

    public EndpointsAsyncTask(MainActivity activity,ProgressBar mProgressBar){
        this.activity = activity;
        this.mProgressBar= mProgressBar;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        //   mProgressBar = new ProgressBar(this.activity);

        mInterstitialAd = new InterstitialAd(this.activity);
        mProgressBar.setVisibility(View.VISIBLE);
    }

    @Override
    protected String doInBackground(Pair<Context, String>... params) {
        if(myApiService == null) {  // Only do this once

            // end options for devappserver
            MyApi.Builder builder = new MyApi.Builder(AndroidHttp.newCompatibleTransport(), new AndroidJsonFactory(), null)
                .setRootUrl("https://backendversionone.appspot.com/_ah/api/");
  //      https://endpoint-backend-1056.appspot.com/_ah/api/


            myApiService = builder.build();
        }

        context = params[0].first;
        String name = params[0].second;

        try {
            return myApiService.sayHi(name+"check").execute().getData();
        } catch (IOException e) {
            return e.getMessage();
        }
    }

    @Override
    protected void onPostExecute(String result) {


       // Toast.makeText(context, result, Toast.LENGTH_LONG).show();

       // mProgressBar.setVisibility(View.GONE);
        if (this.mListener != null)
        this.mListener.onComplete(result, mError);

        mProgressBar.setVisibility(View.GONE);

        Intent myIntent = new Intent(context, LibraryMainActivity.class);
        myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
        myIntent.putExtra("joke", result);
        context.startActivity(myIntent);


    }
}

我试图从测试类测试我的异步任务

在下面找到我的课程。公共类 MainActivityTest 扩展 ActivityInstrumentationTestCase2 {

private MainActivity mMainActivity;
private TextView mFirstTestText;

ProgressBar pbar;

String mJsonString = null;
Exception mError = null;
CountDownLatch signal = null;

public MainActivityTest() {
    super(MainActivity.class);
}

@Override
protected void setUp() throws Exception {
    super.setUp();
    mMainActivity = getActivity();

    signal = new CountDownLatch(1);



}

@Override
protected void tearDown() throws Exception {
    super.tearDown();
    signal.countDown();
}
@MediumTest
public void testcheck(){

    Log.d("Testing baby", "Testcheck");
    Log.d("Testing baby","Testcheck");
    Log.d("Testing baby", "Testcheck");
    final Button sendToReceiverButton = (Button)
            mMainActivity.findViewById(R.id.buttontelljoke);



    assertNotNull(sendToReceiverButton);
}
@SmallTest
public void testchecks(){

    Log.d("Testing baby", "Testcheck");
    Log.d("Testing baby","Testcheck");
    Log.d("Testing baby", "Testcheck");
    final Button sendToReceiverButton = (Button)
            mMainActivity.findViewById(R.id.buttontelljoke);

    assertNotNull(sendToReceiverButton);
}
@MediumTest
public void testasyncTaskTest(){

    pbar = (ProgressBar)mMainActivity.findViewById(progressBar1);

    try {

        EndpointsAsyncTask jokeTask = new EndpointsAsyncTask(mMainActivity,pbar);
        jokeTask.setListener(new EndpointsAsyncTask.JsonGetTaskListener() {
            @Override
            public void onComplete(String jsonString, Exception e) {
                mJsonString = jsonString;
                mError = e;
                signal.countDown();
            }
        }).execute((new Pair<Context, String>(getActivity(), "")));
        signal.await();


        assertNotNull(mJsonString);





    } catch (Exception e){
        fail("Timed out");
    }
}


protected Fragment waitForFragment(String tag, int timeout) {
    long endTime = SystemClock.uptimeMillis() + timeout;
    while (SystemClock.uptimeMillis() <= endTime) {

        Fragment fragment = getActivity().getSupportFragmentManager().findFragmentByTag(tag);
        if (fragment != null) {
            return fragment;
        }
    }
    return null;
}

运行测试用例时,此行抛出异常 - 只有创建的线程才能更新异步任务

 jokeTask.setListener(new EndpointsAsyncTask.JsonGetTaskListener() {
            @Override
            public void onComplete(String jsonString, Exception e) {
                mJsonString = jsonString;
                mError = e;
                signal.countDown();
            }
        }).execute((new Pair<Context, String>(getActivity(), "")));
        signal.await();

但是当我的手机被锁定时运行测试,我没有得到异常并且工作正常。

我该如何解决这个问题。

4

1 回答 1

1

不确定是否有帮助,但请尝试致电

 mJsonString = jsonString;
 mError = e;
 signal.countDown();

在 onUiTherad(可运行)

于 2015-09-04T12:10:59.553 回答