我需要从类JsonObject
中的方法MainActivity
中产生类doInBackground()
中的Post
。
我实例化了类Post
,将该类称为要传递参数的方法,并尝试将其分配给类型为JSONObject
的变量。
这是类Post
:
class Post extends AsyncTask<String, Void, JSONObject> {
@Override
protected JSONObject doInBackground(String... args) {
JSONObject jsonObject = null;
try {
//Connect to the website
Connection.Response response =
Jsoup.connect(args[0])
.method(Connection.Method.POST)
.data("text", args[1])
.data("language", args[2])
.ignoreContentType(true)
.execute();
Document document = response.parse();
jsonObject = new JSONObject(document.text());
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException err) {
Log.d("Error", err.toString());
}
return jsonObject;
}
}
这就是我尝试检索类MainActivity
中的对象的方式:
Post post = new Post();
JSONObject object = post.execute(stringurl, text, "en");
我得到的Java错误是不兼容的类型。必需为org.json.JSONObject
,发现为android.os.AsyncTask <java.lang.String, java.lang.Void, org.json.JSONObject>
。
我应该能够捕获JSONObject
...如何?
答案 0 :(得分:1)
您可以在self.master
中声明一个方法,一旦该方法获取了MainActivity
,就可以从AsyncTask
进行调用:
JSONObject
您需要在private onObtainJSONObject(JSONObject jsonObject){
if(jsonObject != null){
// do something with the JSONObject
} else{
// something went wrong - maybe show an error message?
}
}
中覆盖onPostExecute()
:
AsyncTask
如果public void onPostExecute(JSONObject jsonObject){
// Note: this will be executed on the main thread
MainActivity.this.onObtainJSONObject(jsonObject);
}
不是AsyncTask
的内部类,则可以按以下方式使用回调(简单接口)
Activity
然后,让public interface PostCallback{
void onSuccess(JSONObject data);
void onError(Exception exception);
}
有一个类型为AsyncTask
的字段和一个setter PostCallback
。
在setCallback(PostCallback)
中:
MainActivity
在Post post = new Post();
post.setPostCallback(new PostCallback(){
@Override
onSuccess((JSONObject data){
onObtainJSONObject(data);
}
@Override
onError(Exception exception){
// exception handling ...
}
});
JSONObject object = post.execute(stringurl, text, "en");
中:
Post