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でこれを行う良い方法はありますか?