我正在尝试在连接处理程序类
中实现toastpublic class server implements Runnable {
private static final String TAG = "myLogs";
.....
public void run()
{
.....
while (true) {
try {
client = server.accept();
// here i want to show message, when client is connected
Toast.makeText(getApplicationContext(), "msg msg", Toast.LENGTH_SHORT).show();
Log.d(TAG, "client connected....");
但我在makeText和getApplicationContext()上遇到错误; 他们有下划线..
答案 0 :(得分:1)
您无法在runnable中获取getApplicationContext(),只能在活动或服务中获取。 要在可运行的应用程序上下文中,您应该将活动的上下文传递给runnable。
但在您的情况下,您希望在活动上下文中显示祝酒词。为此,传递活动对象并调用runOnUIThread方法。将您的活动作为toast的上下文:
public class Server implements Runnable {
private static final String TAG = "myLogs";
private Activity myActivity;
public Server(final Activity activity) {
this.myActivity = activity;
}
.....
public void run()
{
.....
while (true) {
try {
client = server.accept();
// here i want to show message, when client is connected
myActivity.runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(myActivity, "msg msg", Toast.LENGTH_SHORT).show();
Log.d(TAG, "client connected....");
}
});
这里也有描述: Android: Toast in a thread
答案 1 :(得分:0)
参见解释here
也许您应该使用构造函数或其他东西传递Activity上下文,但是您不能使用applicationcontext来烘烤。
答案 2 :(得分:0)
我认为你的getApplicationContext()方法可能返回NULL。我想这是因为你正在从一个线程运行toast,这将脱离UI线程。
您需要从应用程序中具有UI上下文的某个位置调用此方法(意味着系统可以获取UI线程的句柄 - 或者需要显示Toast的位置)。
尝试在创建Toast之前获取应用程序上下文(可能使用此语法):
Context ctx =getApplicationContext();
然后,在尝试显示吐司之前确保它不是NULL。
如果它实际上是NULL,则需要传递上下文(在具有上下文的地方使用该方法,并将其作为参数传递给您的线程)
答案 3 :(得分:0)
使用classname.this
肯定有效
答案 4 :(得分:0)
首先检查你是否正确导入(我认为它是导入android.widget.Toast;或者你可以使用import android.widget。*;来确定)。然后尝试使用它而不是getApplicationContext()或activityname.this。
答案 5 :(得分:0)
试试这个。
上下文上下文; context = this;
Toast.makeText(context,“msg msg”,Toast.LENGTH_SHORT).show();
或
Toast.makeText(ClassName.this,“msg msg”,Toast.LENGTH_SHORT).show();
或
Toast.makeText(this.getApplicationContext(),“msg msg”,Toast.LENGTH_SHORT).show();