0

サーバーに送信される http 投稿データを処理するために、Android アプリにカスタム http クラスがあります。ただし、1、データのフェッチ中に進行状況のアニメーションを表示し、2、UI を同時に更新/更新する必要があるため、asyncTask を拡張するように変換する必要があります。

では、これを行う最も簡単な方法は何でしょうか。httpPOST リクエストを処理するために、アプリ全体で既にこのクラスを使用していることに注意してください。

クラスは次のとおりです。

public class Adapter_Custom_Http_Client 
{  

    //<editor-fold defaultstate="collapsed" desc="Class Members">

public static final int HTTP_TIMEOUT = 30 * 1000; // milliseconds  

private static HttpClient mHttpClient;  

//</editor-fold>

        //<editor-fold defaultstate="collapsed" desc="getHttpClient">

private static HttpClient getHttpClient()
{  
    if(mHttpClient == null)
    {  
        mHttpClient = new DefaultHttpClient();  
        final HttpParams params = mHttpClient.getParams();  
        HttpConnectionParams.setConnectionTimeout(params, HTTP_TIMEOUT);  
        HttpConnectionParams.setSoTimeout(params, HTTP_TIMEOUT);  
        ConnManagerParams.setTimeout(params, HTTP_TIMEOUT);  
    }  
return mHttpClient;  
}
//</editor-fold>

        //<editor-fold defaultstate="collapsed" desc="executeHttpPost">

public static String executeHttpPost(String url, ArrayList postParameters) throws Exception
{  
    BufferedReader in = null;

    try
    {  
        HttpClient client = getHttpClient();  
        HttpPost request = new HttpPost(url);  
        UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters);  
        request.setEntity(formEntity);  
        HttpResponse response = client.execute(request);  
        in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));  
        StringBuffer sb = new StringBuffer("");  
        String line = "";  
        String NL = System.getProperty("line.separator");  
        while ((line = in.readLine()) != null)
        {  
            sb.append(line + NL);  
        }  
        in.close();  
        String result = sb.toString();  
        return result;  
    }
finally
    {  
        if (in != null)
        {  
            try
            {  
                in.close();  
            } catch (IOException e)
            {  
                e.printStackTrace();  
            }
        }
    }
}
//</editor-fold>

        //<editor-fold defaultstate="collapsed" desc="executeHttpGet">

public static String executeHttpGet(String url) throws Exception
{  
BufferedReader in = null;  
    try
    {  
        HttpClient client = getHttpClient();  
        HttpGet request = new HttpGet();  
        request.setURI(new URI(url));  
        HttpResponse response = client.execute(request);  
        in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));  
        StringBuffer sb = new StringBuffer("");  
        String line = "";  
        String NL = System.getProperty("line.separator");  
        while ((line = in.readLine()) != null)
        {  
            sb.append(line + NL);  
        }  
        in.close();  
        String result = sb.toString();  
        return result;  
    }
    finally
    {  
        if (in != null)
        {  
            try
            {  
                in.close();  
            } 
        catch (IOException e)
            {  
                e.printStackTrace();  
            }
        }
    }
}
//</editor-fold>

}  
4

3 に答える 3

0

次のようにフォローします。

 public class postmethod extends AsyncTask<Void, Void, Void> {

 //declarations what u required
 @Override
 protected void onPreExecute() {          
 super.onPreExecute();
 }

 @Override
 protected Void doInBackground(Void... params) {

 //do ur work here completly that will runs as background
 }

 @Override
 protected void onPostExecute(Void result) {       
 super.onPostExecute(result);
 } 
 }
于 2013-02-04T06:31:06.737 に答える
0

アクティビティに新しい非同期内部クラスを作成します。

public class InnerClass extends AsyncTask<Void, Void, String>{

    ProgressDialog dialog;

    @Override
    protected String doInBackground(Void... params) {
        String result = Adapter_Custom_Http_Client.executeHttpPost(url , param); 
        return result;
    }

    @Override
    protected void onCancelled() {
        super.onCancelled();
    }

    @Override
    protected void onPostExecute(String result) {
        dialog.dismiss();
        super.onPostExecute(result);
    }

    @Override
    protected void onPreExecute() {
        dialog = ProgressDialog.show(context, "", "Please wait....");
        super.onPreExecute();
    }
}

を使用してバックグラウンドタスクを実行します

new InnerClass().execute();

于 2013-02-04T08:25:18.913 に答える
0

この非同期クラスを使用します。

         public class Albums extends AsyncTask<Void, Void, Void> {

         //declarations what u required

        @Override
          protected void onPreExecute() {          
           super.onPreExecute();
          ///declare ur progress view and show it

          }

        @Override
        protected Void doInBackground(Void... params) {

        //do ur http work here which is to be done in background
        }

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

        //Update ur UI here...

        } 


       }

どんな問題でもお尋ねください..

編集:

     Albums alb=new Albums();
       alb.execute(null);///u can use different arguments that u need
于 2013-02-04T06:39:25.313 に答える