0

私はPHP Webサービスを持っていて、それをthrowと呼びたいAsyncTask..この段階では問題はありません..私の問題は、1つのクラスを拡張AsyncTaskしてそれに渡し、多くのアクティビティで何度も呼び出すことuriですが、私はこれを行う方法がわからず、asynctask を呼び出す.. ヘルプ.. ありがとうwebservices

これは私がやろうとしたことですが、うまくいきません

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

    String uri;
    private OnPostExecuteListener  mPostExecuteListener = null;
    public static interface OnPostExecuteListener
    {

                void onPostExecute(String result);

            }


    GetNetworkData(
            String Url,
            OnPostExecuteListener postExecuteListener) throws Exception {

            uri = Url;
            mPostExecuteListener = postExecuteListener;
            if (mPostExecuteListener == null)
                throw new Exception("Param cannot be null.");
        }

    @Override
    protected String  doInBackground(String... params) {
        // TODO Auto-generated method stub  

        JSONObject param=null;
      String result = null;
      HttpClient httpClient = new DefaultHttpClient();
            HttpHost httpHost = new HttpHost("192.168.3.111",80);  
            HttpPost httpPost = new HttpPost(uri);
            httpPost.addHeader("Content-Type", "application/json; charset=utf-8");


            try
            {
                //HttpEntity bodyEntity = new StringEntity(param.toString(), "utf8");
                //httpPost.setEntity(bodyEntity);
                HttpResponse response = httpClient.execute(httpPost);
                HttpEntity entity = response.getEntity();

                if (entity != null) {
                    InputStream instream = entity.getContent();
                    BufferedReader reader = new BufferedReader(
                         new InputStreamReader(instream));
                    StringBuilder sb = new StringBuilder();


                    String line = null;
                    while ((line = reader.readLine()) != null)
                        sb.append(line + "\n");


                    result = sb.toString();
                    instream.close();      
                }

                }
                catch (Exception e) {
                    // TODO: handle exception
                }

        return result;
    }   

    @Override
    protected void onPostExecute(String result) {
        // TODO Auto-generated method stub
         if (mPostExecuteListener != null)
         {
          try {
                    JSONObject json = new JSONObject(result);
                    mPostExecuteListener.onPostExecute(result);
                } catch (JSONException e){
                    e.printStackTrace();
                }
            }           
    }  
}
4

2 に答える 2

0

GetNetworkDataいつでもどこでも必要なときにクラスのインスタンスを作成します。UrlおよびpostExecuteListenerパラメーターがすべての呼び出しで同じである場合、これらをインスタンス変数に保存GetNetworkDataし、オンデマンドでオブジェクトを作成するラッパークラスを考えることができます。

使用するためのコードは次のGetNetworkDataようになります。

String url = "http://....";
GetNetworkData.OnPostExecuteListener listener = new GetNetworkData.OnPostExecuteListener() {
    @Override
    public void onPostExecute(String result) {
        Log.d("AsyncTask", "onPostExecute: " + result); 
        //Do what you want to do after the task is complete
    }
};

GetNetworkData task = new GetNetworkData(url, listener);
task.execute();
于 2012-04-18T12:51:59.117 に答える
0

電話をかけるには、

String url = "so and so url";
new GetNetworkData().execute(url);

そしてあなたのdoInBackground()で、

@Override  
protected String  doInBackground(String... params) {  
    // TODO Auto-generated method stub  
    urlToUse = params[0];     
}

AsyncTask を実行するたびにdoInBackgroud()、その中のコードに移動して実行します..コードの実行が完了すると、AsyncTask の LifeCycle に自動的に移動しonPostExecute()ます。AsyncTask への異なる呼び出しごとに..そのために何もする必要はないと思います。

于 2012-04-18T12:56:22.837 に答える