在过去的几天里,我问过这个问题的变体。我不理解或建立正确的联系等,所以我真的很沮丧,不知道我应该走哪条路。
我开发了一个 XAMLX WCF 工作流服务,我的 Windows 客户端与之交互得很好。我是 android 和 java 的新手,因此基本上是 NOOB。我的服务使用 BasicHttpBinding 并期望请求中有几个字符串值(uid 和 pwd)。响应只是一个字符串。
现在在android上我完全迷路了。我已阅读使用 AsyncTask,听说它存在重大问题并使用 RoboSpice。看着 RoboSpice,它看起来非常稳固但学习曲线非常僵硬。我听说使用 LoopJ 的学习曲线比较僵硬,因为刚开始使用它会更容易。把那些希望你使用 JSON 的人扔进去,是的。我肯定迷路了。
所以我被拉向了很多不同的方向。我知道我需要它是异步的,这样它就不会锁定 ui 线程,我想获得一个可靠的强大解决方案,但现在,即使是同步地与服务进行交互,这也是令人鼓舞的一步。
这是我的基础知识: 向服务发送请求。让应用程序暂停/循环等。进度条会很棒,但现在一个不会挂起的简单循环就可以了。接收响应并继续处理。
这对我来说在 .NET 中非常简单,我认为它会很简单。只是表明骄傲是在堕落之前到来的。
TIA JB
直接问题
如前所述,我的 OP 中有几个隐含的问题。那是因为我不知道该问什么。所以现在让我们使用 AsynchTask。让我们称之为我的婴儿步。以下是我的问题: 如何关联值以填充请求?在 .NET 中,我将创建一个与请求所期望的匹配的对象。所以我的对象会有一个 UserName 属性和 Password 属性。我会给他们分配他们的值,比如 obj.UserName = "Joe"; 然后我会调用服务操作并将其传递给 obj。
如何确保我使用正确的库?我读过 AsyncTask 使用 Apache Http Client 库。好的,我用谷歌搜索得到罐子,显然它已经结束了。但仍然可用,所以我下载了最新版本并将其放在我的 lib 文件夹中......但我不必这样做,因为我可以在没有它的情况下导入 org.apache.http.HttpResponse 所以我当时使用哪个版本,我应该使用较旧的或最新的。
**最后我如何让应用程序暂停,因为此代码执行某些操作(尽管它从未显示在我的服务机器的日志中)并且当它停止执行某些操作时,我的代码继续执行并在到达它的点时崩溃需要来自服务的数据.....但它不存在。进度条是蜜蜂的膝盖。
这是我的实现代码:
public class AsyncHttpRequestManager extends AsyncTask<String, Boolean, String>
{
private static final String serviceUrl = "http://www.serviceurl.com/service.xamlx";
@Override
protected String doInBackground(String... params)
{
try
{
DefaultHttpClient client = new DefaultHttpClient();
HttpPut putRequest = new HttpPut(serviceUrl);
putRequest.setHeader("Content-type", "text/plain");
putRequest.setHeader("Accept", "text/plain");
putRequest.setEntity(new StringEntity(params[0])); //This one is connected to my first question. How do I get the proper associations for the operations contract.
HttpResponse response = client.execute(putRequest);
InputStream content = response.getEntity().getContent();
BufferedReader buffer = new BufferedReader(new InputStreamReader(content));
String result = "";
String s = "";
while ((s = buffer.readLine()) != null)
{
result += s;
}
return result;
}
catch (UnsupportedEncodingException e)
{
Log.e("AsyncOperationFailed", e.getMessage());
e.printStackTrace();
} catch (ClientProtocolException e)
{
Log.e("AsyncOperationFailed", e.getMessage());
e.printStackTrace();
} catch (IOException e)
{
Log.e("AsyncOperationFailed", e.getMessage());
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String result)
{
Log.d("MESSAGE", result);
}
}
我这样称呼它:
new AsyncHttpRequestManager().execute("joe","asdf");
如果需要更多信息,我很乐意发布。