android,异步任务类中的Toast如何获得Context?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android,异步任务类中的Toast如何获得Context?相关的知识,希望对你有一定的参考价值。

MainActivity.java
new Async().execute()

Async.java
Toast.makeText(这里怎么取得上下文对象让其在MainActivity中显示出来,"内容",1).show();

参考技术A AsyncTask主要用来更新UI线程,比较耗时的操作可以在AsyncTask中使用。

AsyncTask是个抽象类,使用时需要继承这个类,然后调用execute()方法。注意继承时需要

设定三个泛型Params,Progress和Result的类型,如AsyncTask<Void,Inetger,Void>:

Params是指调用execute()方法时传入的参数类型和doInBackgound()的参数类型

Progress是指更新进度时传递的参数类型,即publishProgress()和onProgressUpdate()的参数类型

Result是指doInBackground()的返回值类型
上面的说明涉及到几个方法:

1.doInBackgound() 这个方法是继承AsyncTask必须要实现的,运行于后台,耗时的操作可以在这里做

2.publishProgress() 更新进度,给onProgressUpdate()传递进度参数

3.onProgressUpdate() 在publishProgress()调用完被调用,更新进度
参考技术B getActivity();追问

不行啊。

Async.java

protected void onPostExecute(String result)
…………
Toast.makeText(getActivity(), result, 1).show();

追答

那就用handle 发

参考技术C 这里直接传入MainActivity.class试试看。追问

不行,
The method makeText(Context, CharSequence, int) in the type Toast is not applicable for the arguments (Class, String, int)

追答

getApplicationContext()试试看。

追问

不行的

本回答被提问者采纳
参考技术D 同样的问题。。题主解决了吗

在要在后台(异步)任务类(Java/Android)中访问的类方法中设置变量

【中文标题】在要在后台(异步)任务类(Java/Android)中访问的类方法中设置变量【英文标题】:Set a variable in a class method to be accessed in a background (async) task class (Java/Android) 【发布时间】:2017-04-16 13:57:53 【问题描述】:

我正在尝试设置一个变量 'election_id' 从上一课获得额外的意图。我需要使用 id 将其解析为 PHP URL 以检索一些 JSON。我想要做的是将一个变量设置为与前一个类中分配的选举 ID 相同,以便在后台任务中使用:

public class AdminFinishCandidateActivity extends AppCompatActivity 

String json_string;
String json_string_result;

String election_id;


@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_admin_finish_candidate);

    System.out.println("creating");

    Bundle electionData = getIntent().getExtras();
    if (electionData==null) 
        return;
    

    election_id = electionData.getString("electionId");





public void getJson(View view)

    new BackgroundTask().execute();




class BackgroundTask extends AsyncTask<Void,Void,String> 



    String json_url="http://192.168.56.1/dan/db/getjson.php?election_id=" + election_id;


// code to retrieve JSON
    


目前,在我的 onCreate 方法中分配了election_id,但是我知道我无法从我定义 String json_url 的 BackgroundTask 类中的此方法访问它。我该如何做才能在这个类中调用election_id 变量?检索意图附加内容的方法在此类中不起作用。当我使用 JSON 代码运行代码时,没有检索到任何内容。谢谢。

【问题讨论】:

【参考方案1】:

您可以将字符串传递给 AsyncTask,如下所示:

public class BackgroundTask extends AsyncTask<String,Void,String>

    @Override
    protected String doInBackground(String... params) 
    String json_url="http://192.168.56.1/dan/db/getjson.php?election_id=" + params[0];

      //perform network operation and return response
      return response;
    

    @Override
    protected void onPostExecute(String res)
      //Batman Rocks
    

现在执行如下任务:

new BackgroundTask().execute(election_id);

【讨论】:

以上是关于android,异步任务类中的Toast如何获得Context?的主要内容,如果未能解决你的问题,请参考以下文章

AsycnTask

Fragment 如何从使用 http 和异步任务获取数据的 MainActivity 类中获取数据?

在要在后台(异步)任务类(Java/Android)中访问的类方法中设置变量

如何在异步任务中更新进度栏

如何通过连接在我的 toast 中显示模型类中的 tvItem?

Android中的自定义最大异步任务