凌空中的onPreExecute方法

时间:2014-06-02 11:01:45

标签: android android-asynctask progressdialog android-volley

凌空中是否有像AsyncTask一样的方法?

我在我的应用程序中使用了volley lib,我希望在凌空中执行一些预执行。那么在volley lib ad中有任何方法,如AsyncTask中的方法,因为我想用Base64图像字符串创建json,当我要用图像创建json时,我的应用程序停止响应。

protected void onPreExecute() {
        pDialog = ProgressDialog.show(MyActivity.this,"Please wait...", "Retrieving data ...", true);
    }

    protected Void doInBackground(Void... unused) {
        items = parser.getItems();

        for (Item it : items) {
            publishProgress(it);
        }
        return(null);
    }

    protected void onProgressUpdate(Item... item) {
        adapter.add(item[0]);
    }

    protected void onPostExecute(Void unused) {
        pDialog.dismiss();
    }

由于

2 个答案:

答案 0 :(得分:1)

您可以将ProgressDialog添加到布局中,然后在响应时将其可见性更改为View.GONE

布局的一个例子:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    ...

    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true" />

</RelativeLayout>

使用volley库的示例:

JsonObjectRequest jsObjRequest = new JsonObjectRequest
                (Request.Method.GET, url, null, new Response.Listener<JSONObject>() {

                    @Override
                    public void onResponse(JSONObject response) {
                        // add your logic here
                        progressBar.setVisibility(View.GONE);
                        // set you progressBar variable using findViewById method
                    }
                }, new Response.ErrorListener() {

                    @Override
                    public void onErrorResponse(VolleyError error) {
                        // TODO Auto-generated method stub

                    }
                });

        // Access the RequestQueue through your singleton class.
        VolleySingleton.getInstance(getActivity()).addToRequestQueue(jsObjRequest);

答案 1 :(得分:0)

Volley Library没有像onPreExecute这样的方法。

您可以在调用Volley中的查询请求之前初始化变量。

这是一个简单的例子,这段代码取自Volley lib附带的示例:

     //Here you'll initialize variables like showing dialog etc.


    RequestQueue queue = Volley.newRequestQueue(this);
            String url = "https://ajax.googleapis.com/ajax/services/search/images?" +
                        "v=1.0&q=dog&rsz=8";

            JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {

                @Override
                public void onResponse(JSONObject response) {
                    // TODO Auto-generated method stub
                    Log.d("Response", response.toString());
                    //Here you'll dismiss dialog :)
                }
            }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                    // TODO Auto-generated method stub

                }
            });

            queue.add(jsObjRequest);

        }