无法在三星 A5 (2016) 上使用 Toast

Posted

技术标签:

【中文标题】无法在三星 A5 (2016) 上使用 Toast【英文标题】:Unable to use Toast on Samsung A5 (2016) 【发布时间】:2019-01-13 12:21:38 【问题描述】:

上次我从事同一个项目时,我能够使用 Toasts。但是今天当我尝试使用 Toast 时没有显示任何内容。我尽力解决了这个问题,但没有成功。

这就是我正在执行的[更新]。

package com.azeem.abubakar.dbm;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;


public class MainActivity extends AppCompatActivity 

    private Button btn_start;

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

        // Initialization
        btn_start = (Button) findViewById(R.id.btn_start);

        //Click Listener for Start Button
        btn_start.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View tView) 

                Log.d("[INFO]", "Just Above Toast!");
                Toast.makeText(MainActivity.this, "Start button Clicked", Toast.LENGTH_SHORT).show();
                Log.d("[INFO]", "Just Below Toast!");

            
        );

    

这是我单击“开始”按钮时 Logcat 显示的内容。

01-13 19:28:36.473 26670-26670/com.azeem.abubakar.dbm D/ViewRootImpl@ede0223[MainActivity]: ViewPostImeInputStage processPointer 0
01-13 19:28:36.474 26670-26670/com.azeem.abubakar.dbm W/System: ClassLoader referenced unknown path: /system/framework/QPerformance.jar
01-13 19:28:36.476 26670-26670/com.azeem.abubakar.dbm E/BoostFramework: BoostFramework() : Exception_1 = java.lang.ClassNotFoundException: Didn't find class "com.qualcomm.qti.Performance" on path: DexPathList[[],nativeLibraryDirectories=[/system/lib, /vendor/lib]]
01-13 19:28:36.538 26670-26670/com.azeem.abubakar.dbm D/ViewRootImpl@ede0223[MainActivity]: ViewPostImeInputStage processPointer 1
01-13 19:28:36.543 26670-26670/com.azeem.abubakar.dbm D/[INFO]: Just Above Toast!
01-13 19:28:36.552 26670-26670/com.azeem.abubakar.dbm D/TextView: setTypeface with style : 0
01-13 19:28:36.560 26670-26670/com.azeem.abubakar.dbm D/[INFO]: Just Below Toast!
01-13 19:28:36.565 26670-26670/com.azeem.abubakar.dbm D/ViewRootImpl@3da3450[Toast]: ThreadedRenderer.create() translucent=true
01-13 19:28:36.571 26670-26670/com.azeem.abubakar.dbm D/InputTransport: Input channel constructed: fd=82
01-13 19:28:36.571 26670-26670/com.azeem.abubakar.dbm D/ViewRootImpl@3da3450[Toast]: setView = android.widget.LinearLayout5b8d649 V.E...... ......I. 0,0-0,0 touchMode=true
01-13 19:28:36.572 26670-26670/com.azeem.abubakar.dbm D/ViewRootImpl@3da3450[Toast]: dispatchAttachedToWindow
01-13 19:28:36.593 26670-26670/com.azeem.abubakar.dbm D/ViewRootImpl@3da3450[Toast]: Relayout returned: oldFrame=[0,0][0,0] newFrame=[277,1596][802,1728] result=0x27 surface=isValid=true -750856192 surfaceGenerationChanged=true
    mHardwareRenderer.initialize() mSurface=isValid=true -750856192 hwInitialized=true
01-13 19:28:36.594 26670-26713/com.azeem.abubakar.dbm D/mali_winsys: EGLint new_window_surface(egl_winsys_display*, void*, EGLSurface, EGLConfig, egl_winsys_surface**, egl_color_buffer_format*, EGLBoolean) returns 0x3000,  [525x132]-format:1
01-13 19:28:36.631 26670-26670/com.azeem.abubakar.dbm D/ViewRootImpl@3da3450[Toast]: MSG_RESIZED_REPORT: frame=Rect(277, 1596 - 802, 1728) ci=Rect(0, 0 - 0, 0) vi=Rect(0, 0 - 0, 0) or=1
01-13 19:28:38.565 26670-26670/com.azeem.abubakar.dbm D/ViewRootImpl@3da3450[Toast]: mHardwareRenderer.destroy()#4
01-13 19:28:38.582 26670-26670/com.azeem.abubakar.dbm D/ViewRootImpl@3da3450[Toast]: dispatchDetachedFromWindow
01-13 19:28:38.591 26670-26670/com.azeem.abubakar.dbm D/InputTransport: Input channel destroyed: fd=82

请帮助我。谢谢。

更新:

通知已在设置中为此应用启用。

但是 Toast 没有显示。我想通了,这可能是与设备相关的问题,如果我错了,请纠正我。我说这是与设备相关的问题的原因是,上次我使用 Toasts 时一切正常,但在我的三星 Galaxy 设备中安装了安全更新后,toast 根本没有显示。

我的手机型号是三星 A5(2016)。请查看随附的屏幕截图以获取软件信息。

【问题讨论】:

用 Toast 做了一个原版项目,一切正常。你改变了什么? 在我的项目中我没有改变任何东西。但我确实在我正在使用的三星 Galaxy 设备中安装了安全更新。 你试试我的答案,特别是runOnUiThread? 是的,在 MainActivity 中使用 Toast。感谢您的关心。 您找到任何解决方案或解决方法了吗?我这里也有同样的问题,除了两台三星 A5 之外,所有设备上都显示吐司! 【参考方案1】:

1- 请确认您是否尝试在主线程上显示 Toast?如果不试试这个代码

((MainActivity)context).runOnUiThread(new Runnable() 
    public void run() 
           Toast.makeText(MainActivity.this, "Enter Valid File Name!!", Toast.LENGTH_SHORT).show();

    
);

2- 其次尝试使用 YourActivith.this 而不是 getBaseContext()

3- 有时当键盘打开时 toast 是可见的,但在软键盘后面尝试先关闭键盘然后再查看。

希望有人能帮到你!

【讨论】:

是的,我在 MainActivity 中使用 Toast。 你想在主线程上显示它吗?意味着您无法在后台线程上显示 toast,因此您需要确认。【参考方案2】:

尝试改变这个:

 Toast.makeText(getBaseContext(), "Enter Valid File Name!!", Toast.LENGTH_SHORT).show();

进入:

 Toast.makeText(getApplicationContext(), "Enter Valid File Name!!", Toast.LENGTH_SHORT).show();

【讨论】:

感谢您的回答。我试过了,但 Toast 仍然没有显示。 你能多贴一点代码让我跟踪你的问题吗? 我只是在按钮的 onClick() 侦听器中执行此代码。代码没有问题。应用程序没有崩溃。就在调用 toast 之前和之后,我打印了带有 [INFO] 标签的信息,您可以在上面的 Logcat 中进行验证。 @AbubakarAzeem 让我们试试这个 - 将 getBaseContext 更改为 - Activity.this 是的,我用 Activity.this 更改了它。没有显示在我的设备上【参考方案3】:

尝试改变这个:

getBaseContext()

getApplicationContext()getApplication()thisMainActivity.this(android java page.this)。

例如:

Toast.makeText(getApplicationContext(), "Enter Valid File Name!!", Toast.LENGTH_SHORT).show();

一定要在onTextChanged 方法上使用这个:

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

    EditText edtxt_fileName = findViewById(R.id.edtxt_fileName);
    edtxt_fileName.addTextChangedListener(new TextWatcher() 
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) 

        

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) 
            String fileName = s.toString();
            if (fileName.equals("")) 
                Log.d("[INFO]", "Just Above Toast!");
                Toast.makeText(getApplicationContext(), "Enter Valid File Name!!", Toast.LENGTH_SHORT).show();
                Log.d("[INFO]", "Just Below Toast!");
            
            else   // to show every text change 
                Toast.makeText(getApplicationContext(), "Text: " + fileName, Toast.LENGTH_SHORT).show();   
            
        

        @Override
        public void afterTextChanged(Editable s) 

        
    );

【讨论】:

感谢您的回答。我替换了 getBaseContext() 但 Toast 仍然没有显示。 更新了我的答案,@AbubakarAzeem 请再次检查我的答案,如果此答案或任何答案解决了您的问题,请考虑通过单击复选标记接受它。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。 是的,我明白@guy 我应该标记正确的答案。但是我的问题没有解决,我已经尝试了所有建议。请查看我的帖子,我已经更新了。代码没有问题,Toast 正在其他设备上运行。感谢您的关心。 我检查了我设备上的代码,它正在工作。可能是更新,对不起兄弟。【参考方案4】:

尝试getApplicationContext() 而不是getBaseContext()。转到此链接以查找在何处使用哪个上下文。difference and when to use getApplication(), getApplicationContext(), getBaseContext() and someClass.this

【讨论】:

感谢您的回答。我试过了,但不能在我的设备上工作【参考方案5】:

尝试在 oncreate 中初始化上下文并在显示可能有效的代码时传递该上下文

【讨论】:

以上是关于无法在三星 A5 (2016) 上使用 Toast的主要内容,如果未能解决你的问题,请参考以下文章

三星A3A5A7G7J5J7S6系列等新机型的部分手机解锁 ROOT刷机

在三星 Galaxy Tab 3 上调用了闹钟,但在 LeEco Le2 上没有调用

HTML5 视频无法在三星 S8、三星浏览器上播放

Camera2 API 自动对焦与三星 S5

无法在三星 Galaxy Tab 2 和 Note 上获取位置

在 j2me 中无法打开三星手机上的相机