【问题标题】:Cannot resolve symbol 'execute' ... calling AsyncTask无法解析符号“执行”...调用 AsyncTask
【发布时间】:2018-01-13 13:39:12
【问题描述】:

我正在尝试在 URL 上发出 GET 请求,我创建了一个扩展 AsyncTask<Void, Void, Void> 的类,我尝试调用 new MyClass.execute() ...我以前做过这个并且它有效,今天它不工作.我做错了什么?

这是我的代码:

public class SignUpActivity extends AppCompatActivity {

String TAG = SignUpActivity.class.getSimpleName();
String URL;

ArrayList<String> countries = new ArrayList<>();

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

    new MyClass.execute();
}

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

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        //TODO
    }

    @Override
    protected Void doInBackground(Void... params) {
        HttpHandler sh = new HttpHandler();

        // Making a request to url and getting response
        String jsonStr = sh.makeServiceCall(URL, "GET");
        //Handling response in jsonStr code 
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        //TODO
    }

}

【问题讨论】:

    标签: java android android-asynctask


    【解决方案1】:

    这是一个语法错误。应该是

    new MyClass().execute();

    不像 new MyClass.execute();

    【讨论】:

    • 请更准确地回答。你忽略了(语义上重要的)new
    【解决方案2】:

    使用这个获取数据使用返回返回值:

       public class SignUpActivity extends AppCompatActivity {
    
        String TAG = SignUpActivity.class.getSimpleName();
        String URL;
    
        ArrayList<String> countries = new ArrayList<>();
    
        String jsonStr="";
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_sign_up);
    
            String response = new MyClass.execute();
    
    
        }
    
        private class MyClass extends AsyncTask<Void, Void, String> {
    
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                //TODP
            }
    
            @Override
            protected String doInBackground(Void... params) {
                HttpHandler sh = new HttpHandler();
    
                // Making a request to url and getting response
                String jsonStr = sh.makeServiceCall(URL, "GET");
                //Handling response in jsonStr code 
                return jsonStr;
            }
    
            @Override
            protected void onPostExecute(String result) {
                super.onPostExecute(result);
                //TODO
                jsonStr = result;
            }
    
        }
    }
    

    【讨论】:

    • 不鼓励使用纯代码的答案。您应该解释问题,以及您所做的更改以及它们如何解决问题。
    【解决方案3】:
    public class JsonHandler {
    
        static String response = null;
        public final static int GET = 1;
        public final static int POST = 2;
    
        public JsonHandler() {
    
        }
    
        public String makeServiceCall(String url,int method) {
            return this.makeServiceCall(url, method, null);
        }
    
        public String makeServiceCall(String url, int method,
                List<NameValuePair> params) {
    
            try {
                // http client
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpEntity httpEntity = null;
                HttpResponse httpResponse = null;
    
                // Checking http request method type
                if (method == POST) {
                    HttpPost httpPost = new HttpPost(url);
    
                    if (params != null) {
                        httpPost.setEntity(new UrlEncodedFormEntity(params));
                    }
    
                    httpResponse = httpClient.execute(httpPost);
                } else if (method == GET) {
                    if (params != null) {
                        String paramString = URLEncodedUtils.format(params, "utf-8");
                        url += "?" + paramString;
                    }
    
                    HttpGet httpGet = new HttpGet(url);
                    httpResponse = httpClient.execute(httpGet);
                }
    
                httpEntity = httpResponse.getEntity();
                response = EntityUtils.toString(httpEntity);
            } catch (Exception e) {
            }
    
            return response;
        }
    
    }
    

    将上面的类添加到你的主包中并作为doInBackground进行

    @Override
            protected  Void doInBackground(String... params) {
                // TODO Auto-generated method stub
                JsonHandler json = new JsonHandler();
                String jsonStr = json.makeServiceCall(params[0], JsonHandler.GET);
    
              // parse your json data here
            }
    

    【讨论】:

    • 不鼓励使用纯代码的答案。您应该解释问题,以及您所做的更改以及它们如何解决问题。
    • 另外,您的doInBackground(...) 方法中有一个悬空的catch
    猜你喜欢
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 2020-02-29
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多