2016-08-24 11 views
0

Я хочу показать toast сообщение, но getContext() в Toast.makeText((getContext()," Message" , Toat.LENGTH_LONG.show())) дает ошибкуgetContext(), getApplicationContext(), getBaseContext не работает в Android

не удается разрешить метод.

Проблема заключается в том, что в каком класс я хочу показать Toast сообщений не MainActivity класса. Это класс AsyncTask. Могу ли я показать сообщение Toast в других классах (кроме MainActivity класса), как вышеупомянутая проблема?

импорт android.os.AsyncTask; import android.widget.Toast;

public class myClass extends AsyncTask<String, String, String> { 

public myClass(double a, double b,Context context) { 
    this.a = a; 
    this.b=b; 
    this.context = context; 
} 


protected String doInBackground(String... params) { 
     return null; 
    } 

    protected void onPostExecute(String result) { 
       Toast.makeText((getApplicationContext(), "Message", Toast.LENGTH_LONG).show(); 

    } 
} 

Редактировать Я сделал конструктор (смотри выше кода), но в MainActivity классе я звоню таким образом myClassObj = new myClass(a, b,this); но дает ошибку

myClas() в MyClass не может быть применен to: Ожидаемые значения Параметры Аргументы a: double a b: double b context: android.content.Context this (anonymous ... view.View.OnClickListener)

Edit3

import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 
import android.view.Menu; 
import android.view.MenuItem; 

public class MainActivity extends AppCompatActivity { 

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

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       double age = 16; 
       double number = 33; 
       Object = new myClass(age,number,this); 
      } 
     }); 
    } 


} 

SecondClass.

import android.content.Context; 
    import android.os.AsyncTask; 
    import android.widget.Toast; 

    public class myClass extends AsyncTask<String, String, String> { 

     Context context; 
     double a; 
     double b; 
     public myClass(double a, double b,Context context) { 
      this.a = a; 
      this.b=b; 
      this.context = context; 
     } 


     protected String doInBackground(String... params) { 
      return null; 
     } 

     protected void onPostExecute(String result) { 
      Toast.makeText((context), "Message", Toast.LENGTH_LONG).show(); 
     } 
    } 
+0

пожалуйста, покажите 'AsyncTask' код –

+0

если вы пытаетесь показать тост в doInBackground() метод, то вы can't.Move свой тост либо предварительно или postExecute() –

+0

@VivekMishra Да, я показываю его в 'onPostExecute()'. Но такая же ошибка. – user6750923

ответ

2

Когда вы используете this, он относится к охватывающему классу. В вашем случае это View.OnClickListener. Но вам нужно передать контекст своей деятельности.

Таким образом, вы должны назвать это таким образом,

Object = new myClass(age,number, MainActivity.this); 
+0

@K. WTH. Android так запутан. – user6750923

+1

@ user6750923, это чистый JAVA .. это относится к классу в wic он называется. Если вы создаете анонимный класс и внутри него, если u передает это, это относится к этому анонимному классу – DJphy

0

Вы можете использовать ApplicationClass.getinstance(). GetApplicationContext();

+0

Что такое 'ApplicationClass'? – user6750923

0

Редактировать 3

ли это в вашем MainActivity:

Object = new myClass(age,number,MainActivity.this); 

И сделать это в MyClass

Toast.makeText(context, "Message", Toast.LENGTH_LONG).show(); 

Edit 2

class MyClass extends AsyncTask<Void, Void, Void> { 

    int SPLASH_SHOW_TIME=3000; 

    Context context; 

     public MyClass(Context context) { 
     this.context = context; 
    } 
@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 
} 

@Override 
protected Void doInBackground(Void... arg0) { 
    try { 
     Thread.sleep(SPLASH_SHOW_TIME); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

@Override 
protected void onPostExecute(Void result) { 
    super.onPostExecute(result); 
    Toast.makeText(context, "Created a server socket",Toast.LENGTH_LONG).show(); 

} 

} 
+0

Как насчет класса «MainActivity», где я отправляю «контекст»? – user6750923

+0

, где бы вы ни захотели использовать этот класс, сделайте этот класс как контекст –

 Смежные вопросы

  • Нет связанных вопросов^_^