安卓在来自不同Java类文件的活动中祝酒
我有2个.java
文件:AnswerActivity.java
public class AnswerActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_answer);
new JSONTask().execute("https://example.com/api.php");
}
}
和JSONTask.java
public class JSONTask extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
//--- some code cut here ---//
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
Intent i = new Intent(this, AnswerActivity.class);
Toast.makeText(i, result, Toast.LENGTH_LONG).show();
}
}
我的最后两行总是给我错误:
Intent i = new Intent(this, AnswerActivity.class);
Toast.makeText(i, result, Toast.LENGTH_LONG).show();
我想以祝酒词的形式将result
显示到AnswerActivity中。但是为什么我总是收到这个错误消息呢
Error:(68, 20) error: no suitable constructor found for Intent(JSONTask,Class<AnswerActivity>)
constructor Intent.Intent(String,Uri) is not applicable
(argument mismatch; JSONTask cannot be converted to String)
constructor Intent.Intent(Context,Class<?>) is not applicable
(argument mismatch; JSONTask cannot be converted to Context)
Error:(69, 14) error: no suitable method found for makeText(Intent,String,int)
method Toast.makeText(Context,CharSequence,int) is not applicable
(argument mismatch; Intent cannot be converted to Context)
method Toast.makeText(Context,int,int) is not applicable
(argument mismatch; Intent cannot be converted to Context)
我错过了什么?多谢各位
# 1 楼答案
删除以下内容:
有了这个:
在
AsyncTask
类中传递Context
在
Activity
中使用:# 2 楼答案
您需要一个上下文来显示
Toast
。通常是Activity
或Fragment
有上下文。但是因为你的AsyncTask
不是你的AnswerActivity
的内部类,所以你没有对上下文的引用。 所以你可以在构造函数中传递Activity
并使用它和它一起使用
这样做的最大优点是,您不需要保留对
Activity
的引用,只需传递Context
,因为活动确实扩展了上下文# 3 楼答案
您的JSONTask应该是
初始化
# 4 楼答案
如果您没有在其他任何地方使用
JSONTask
类,那么可以在AnswerActivity
中将其定义为inner class。如果你这么做了,那么这段代码应该会起作用否则,您必须将应用程序上下文传递给
JSONTask
,并在Toast
中使用它# 5 楼答案
更好的方法是在类中创建构造函数
然后你可以制作吐司