调用ayncTask并获取静态相关错误

时间:2015-03-27 16:11:28

标签: java php android android-asynctask

我正在调用php脚本,它从android lass访问我的数据库。课程如下;

public class pk_http {

    // Progress Dialog
    private ProgressDialog qDialog;

    // JSON parser class
    JSONParser jParser = new JSONParser();

    class phpCall extends AsyncTask<String, String, String> {
        @Override
        protected String doInBackground(String... args) {
            // Building Parameters
            String url = args[0];
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            // getting JSON string from URL
            JSONObject json = jParser.makeHttpRequest(url, "GET",params);



            return null;
        }
   }

现在当我从我的调用类调用它时(调用类没有以这种方式扩展Activity btw);

public static ArrayList<String> getLoginTileDataArray(Context c)
{
    //CODE STUB: HTTP GET RETURNS THE FOLLOWING STRING
    String result = pk_http.phpCall.execute("http://myUrl/phpFile.php");
.
.
.

我有一个错误的预编译说:

  

非静态方法'execute(Params ...)不能从a引用   静态背景。

如果我删除'sttic'没有变化。我正确地调用了异步方法吗?

1 个答案:

答案 0 :(得分:1)

您无法像这样调用execute,它不是静态方法。使用new

public static ArrayList<String> getLoginTileDataArray(Context c)
{
    //CODE STUB: HTTP GET RETURNS THE FOLLOWING STRING
    (new pk_http.phpCall()).execute("http://myUrl/phpFile.php");
.
.
.

<强>更新

您的代码有错误,错过了}中的一个pk_http。您需要搜索有关AsyncTask的更多信息,在doInBackground()中执行长时间任务,并将结果处理为来自onPostExecute()

的UI线程

这是一个简单的代码:

public class pk_http {

    public void execute(String s) {
        (new phpCall()).execute(s);
    }

    // Progress Dialog
    private ProgressDialog qDialog;

    // JSON parser class
    JSONParser jParser = new JSONParser();

    class phpCall extends AsyncTask<String, String, String> {
        @Override
        protected String doInBackground(String... args) {
            // Building Parameters
            String url = args[0];
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            // getting JSON string from URL
            JSONObject json = jParser.makeHttpRequest(url, "GET", params);

            // TODO: return your result here, this will pass to onPostExecute(String)
            return null;
        }

        @Override
        protected void onPostExecute(String s) {
            // TODO: This is in UI thread, handle your result from doInBackground().
        }
    }
}

也许是在MainActivity中:

public static ArrayList<String> getLoginTileDataArray(Context c)
{
    //CODE STUB: HTTP GET RETURNS THE FOLLOWING STRING
    (new pk_http()).execute("http://myUrl/phpFile.php");
.
.
.