1

Android アプリで Web サーバーからデータを取得する非常に便利な方法があり、iOS でその方法を複製できるようにしたいと考えています。

Android には、他のクラスから呼び出す非同期クラスがあり、読み込みが完了するとサーバーからデータが返されます。

これは、そのクラスがどのように見えるかです:

public class GetData extends AsyncTask, String, Void> {

public Context context;
InputStream is = null;
StringBuilder sb = null;

public GetData (Context context) {
    this.context = context;
}

@Override
/**
 * Send the values in params to the server
 */
protected Void doInBackground(ArrayList<NameValuePair>... params) {

    String server = "mywebpage";
    HttpPost httppost=new HttpPost(server);
    HttpClient httpclient=new DefaultHttpClient();

    try {
        httppost.setEntity(new UrlEncodedFormEntity(params[0]));
        HttpResponse rs=httpclient.execute(httppost);
        HttpEntity entity = rs.getEntity();
        is = entity.getContent();

        try{
            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8"),8);

            sb = new StringBuilder();
            sb.append(reader.readLine());
            String line = "0";
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
        }
        catch(Exception e) {
            Log.e("log_tag", "Error converting result "+e.toString());
        }
        is.close();
        publishProgress(sb.toString());

    }catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    }catch (IOException e) {
        e.printStackTrace();
    }


    return null;
}

}

GetData クラスを使用する場合は、次のように新しいインスタンスを作成します。

新しい GetData(this.getActivity()) {

        @Override
        protected void onProgressUpdate(String... string) {
            result = string[0]);

        }
    }.execute(data);

iOSの各viewController内からデータを取得および送信できましたが、これと同様の方法を機能させることができませんでした。

クラスを作成しようとしていますが、特定のパラメーターを使用してそれを呼び出す方法と、GetData をどのサブクラスにする必要があるかがわかりません。

Objective Cでこれを行う良い方法はありますか?

4

2 に答える 2