android - 如何在 Java 中执行 AsyncTask 子类?

标签 android callback android-asynctask subclass

我正在尝试学习如何调用嵌套在另一个类中的 AsyncTask。

A 类(AsyncTask 的子类)。 B类(是mainActivity)。

A 类:

我创建了一个接口(interface),其中包含 AsyncTask 完成时的方法(为了回调)。

在 B 类中:

我将如何调用我的 AsyncTask。似乎是创建实例的正常方法,然后 .execute() 不起作用!我收到以下错误:

No enclosing instance of type NetConnectivity is accessible. Must qualify the allocation with an enclosing instance of type

NetConnectivity (e.g. x.new A() where x is an instance of NetConnectivity).

在此上下文中,NetConnectivity 是 A 类。

感谢您的宝贵时间。

编辑----

这是 NetConnectivity 类:

public class NetConnectivity {


    public boolean CheckNetworkAvailability(Context context){

        ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
        String tag = "NetworkCheck";
        if(networkInfo != null && networkInfo.isConnected()){
            Log.i(tag, "Network is available");
            return true;
        } else {
            Log.i(tag, "Network is not available");
            return false;
        }
    }

    public interface WebServiceAsyncListener {
        void WebServiceDone();
    }

    public static class WebServiceAsync extends AsyncTask <String, Integer, Double>{

        private WebServiceAsyncListener wListener;

        public WebServiceAsync(Activity act){
            wListener = (WebServiceAsyncListener) act;
        }

        @Override
        protected Double doInBackground(String... params) {
            postData(params[0]);
            return null;
        }

        protected void onPostExecute(String result) {
          wListener.WebServiceDone();
        }

        public void postData(String valueIWantToSend) {
            // Create a new HttpClient and Post Header
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://somewebsite.com/receiver.php");

            try {
                // Add your data
                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                nameValuePairs.add(new BasicNameValuePair("myHttpData", valueIWantToSend));
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

                // Execute HTTP Post Request
                HttpResponse response = httpclient.execute(httppost);

            } catch (ClientProtocolException e) {

            } catch (IOException e) {

            }
        }
    }

}

最佳答案

使 AsyncTask 成为“静态”类。

关于android - 如何在 Java 中执行 AsyncTask 子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20263225/

相关文章:

android - 如何使用 ARCore 用相机拍照

Flutter 如何将参数(int)传递给回调?

android - java.lang.NoClassDefFoundError : android. os.AsyncTask

Android异步任务等待其他任务完成

java - 如何在gradle中执行jar文件?

java.lang.NullPointerException : Attempt to invoke virtual method 'boolean java.lang.String.isEmpty()' on a null object reference

javascript - 如何将回调函数传递到 $.ajax.done 回调中?

java - 在 AsyncTask onPostExecute 中动态添加一个按钮

android - 如何在mysql中存储一个gps坐标,然后在没有时间延迟的情况下检索它?

objective-c - Obj-C 在同一个类中的静态方法的静态方法上使用@selector?