不兼容的类型错误:操纵另一个类的方法的返回值

时间:2019-11-01 20:02:08

标签: java android class methods

我需要从类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 ...如何?

1 个答案:

答案 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