1

我有一种非常方便的方法可以从我的 Android 应用程序中的 Web 服务器获取数据,并且希望能够为 iOS 复制该方法。

在 Android 中,我有一个从其他类调用的异步类,它在完成加载后从服务器返回数据。

这就是该类的样子:

公共类 GetData 扩展 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

0

以下是在不使用第三方库的情况下建立连接的方法:

创建连接

于 2013-10-03T16:57:30.923 回答
0

我建议查看常用的AFNetworking库。以下是如何发布帖子的示例:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSDictionary *parameters = @{@"foo": @"bar"};
[manager POST:@"http://example.com/resources.json" parameters:parameters     success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];

此外,虽然我还没有使用它,但看起来您可以使用 AFURLSessionManager 来更新上传和下载任务的进度。

于 2013-10-03T16:51:56.083 回答