【问题标题】:How to call a method from MainActivity which takes views as parameters, from a class which extends JobService?如何从扩展 JobService 的类中调用将视图作为参数的 MainActivity 方法?
【发布时间】:2020-03-22 21:40:43
【问题描述】:

我想执行 MainActivity 中的这个方法...

public void checkNow(View view) {
        new Thread(() -> {

            //codes...

            EditText getSite = findViewById(R.id.site);
            site = getSite.getText().toString();

            //codes...

            Toast.makeText(this, "Connecting...", Toast.LENGTH_SHORT).show();

            new MovieAsyncTask().execute(movie, url, site);

        }).run();
    }

...来自以下课程

public class MovieUpdatesService extends JobService {

    private static final String TAG = "MovieUpdatesService";
    private boolean jobCancelled = false;

    @Override
    public boolean onStartJob(JobParameters params) {
        Log.d(TAG, "Job started");
        doBackgroundWork(params);
        return true;
    }

    public void doBackgroundWork(final JobParameters params) {
        if (jobCancelled)
            return;

        //call checkNow() method here

        Log.d(TAG, "Job finished");
        jobFinished(params, false);
    }

    @Override
    public boolean onStopJob(JobParameters params) {
        Log.d(TAG, "Job cancelled before completion");
        jobCancelled = true;
        return true;
    }
}

我想致电checkNow(View view),但我不知道如何从此类访问这些视图。 我尝试使用interface,但我不明白如何使它适用于我的情况。 我是 android 新手,所以如果可能的话,我正在寻找一个简单的解决方案

【问题讨论】:

  • 为了更好地理解您的问题,您想从服务本身获取视图 (textview) 及其内容吗?
  • @tomerpacific 我想从服务类调用checkNow(View view),但我不知道如何访问这些视图
  • 我不会从服务访问视图。由于视图与活动有关,我会将它们留在那里。从服务中调用它们的触发器是什么?您是否考虑过只更新服务的成员变量?
  • @tomerpacific 我该怎么做?
  • 我的回答对你有帮助吗?

标签: java android android-activity view jobservice


【解决方案1】:

要让您的服务保存文本视图的值,您可以添加一个成员变量。然后你可以为这个字符串公开一个 setter 方法。

public class MovieUpdatesService extends JobService {

private static final String TAG = "MovieUpdatesService";
private boolean jobCancelled = false;
private String siteDetails = "";  <----

//Use this method from the Activity
public void setSiteDetails(String _siteDetails) {
  siteDetails = _siteDetails
}

@Override
public boolean onStartJob(JobParameters params) {
    Log.d(TAG, "Job started");
    doBackgroundWork(params);
    return true;
}

public void doBackgroundWork(final JobParameters params) {
    if (jobCancelled)
        return;

    //use siteDetails here

    Log.d(TAG, "Job finished");
    jobFinished(params, false);
}

@Override
public boolean onStopJob(JobParameters params) {
    Log.d(TAG, "Job cancelled before completion");
    jobCancelled = true;
    return true;
  }
}

【讨论】:

  • 抱歉回复晚了。我在这个网站上不活跃。我没有完全使用您的答案,但它让我想到了将方法分成几部分并解决问题。那谢谢啦! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-26
  • 1970-01-01
  • 2013-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多