如何在类中成功回调时调用toast消息

3iL*_*3iL 1 java android

我正在使用okhttp库处理POST API.一切都工作正常,除了我无法找到一种方法来显示一个简单的吐司消息成功回调.如何向用户调用toast消息,以便他知道在成功和失败回调中是否在服务器上发布了数据?

PS下面的代码属于不属于活动类的不同类.

这是我的代码:

public DataSource(Context context) {
    this.mContext = context;
    mDbHelper = new DBHelper(mContext);
    mDatabase = mDbHelper.getWritableDatabase();
}



    post(URL, jsonData, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.i("FAILED", "onFailure: Failed to upload data to server");
                //here I want to show toast message
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.isSuccessful()) {

                    Log.i("SUCCESSFUL", "onSuccess: data uploaded");

                    //here I want to show toast message

                } else {
                    Log.i("UN SUCCESSFUL", "onFailure: Failed to upload data to server");
                    //here I want to show toast message
                }
            }
       });
Run Code Online (Sandbox Code Playgroud)

小智 7

每个应用程序都有自己的特殊线程来运行UI对象,例如View对象; 这个线程称为UI线程.只有在UI线程上运行的对象才能访问该线程上的其他对象.由于您在线程池中的线程上运行的任务未在UI线程上运行,因此它们无权访问UI对象.要将数据从后台线程移动到UI线程,请使用在UI线程上运行的Handler,或者可以使用Android实现,如此处所示.

- 情况1

 MyActivity.this.runOnUiThread(new Runnable() {
            @Override
            void run() {
               Toast.makeText(MyActivity.this,
                    "message", Toast.LENGTH_LONG).show();
            });
Run Code Online (Sandbox Code Playgroud)

- 案例2

new Handler(Looper.getMainLooper()).post(new Runnable() {
    @Override
    public void run() {
       Toast.makeText(MyActivity.this,
                    "message", Toast.LENGTH_LONG).show();
    }
});
Run Code Online (Sandbox Code Playgroud)

如果它是主线程你会直接使用它像

Toast.makeText(MyActivity.this,
                    "message", Toast.LENGTH_LONG).show();
Run Code Online (Sandbox Code Playgroud)