我在過去幾天問過這個問題的變化。我不理解或建立正確的聯繫等,所以我非常沮喪,不理解我應該走哪條路。完全丟失試圖撥打網絡服務
我開發了一個XAMLX WCF工作流服務,我的Windows客戶端與它交互就好了。我是新來的android和java,因此基本上是一個NOOB。我的服務使用BasicHttpBinding,並期望請求中有幾個字符串值(uid & pwd)。答案只是一個字符串。
現在在android上我完全失去了。我已閱讀使用AsyncTask,我聽說它有重大問題並使用RoboSpice。看着RoboSpice,它看起來非常堅實,但非常僵硬的學習曲線。我聽說過使用LoopJ的僵化學習曲線,因爲開始時它會更容易。在那裏投擲希望你使用JSON和耶的人。我絕對失去了。
所以我被拉到了很多不同的方向。我知道我需要它作爲Async,因此它不會鎖定ui線程,我希望得到一個穩固可靠的解決方案,但現在只需與服務進行同步交互就可以了,這是令人鼓舞的。
這裏是我的基本知識: 發送請求的服務。 讓應用程序暫停/循環等進度條將是美好的,但一個簡單的循環,不掛起,現在就好了。 接收響應並繼續處理。
這對我來說在.NET中非常簡單,我認爲這很簡單。只是要表明驕傲在秋天來臨之前。
TIA JB
直接的問題
如已評論也有我的OP幾個隱含的問題。那是因爲我不知道該問什麼。所以讓我們暫時與AsynchTask一起。讓我們稱之爲我的寶貝步驟。 以下是我的問題: 如何我是否關聯值來填充請求?在.NET中,我會創建一個匹配請求所需的對象。所以我的對象將有一個UserName屬性和密碼屬性。我會分配他們的值,如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");
如果需要更多的信息,我會很高興地張貼。
網絡操作應該在線程上進行,而不是在線程上進行。所以使用asynctask是一種可能性。我主要使用自己創建的線程來處理網絡操作,並使用廣播receiverbto更新ui。 – Tobrun
「我已閱讀使用AsyncTask,我聽說它有重大問題」什麼是重大問題? AsyncTask可能比較棘手,如果你試圖從中更新UI,但是將它用於HTTP綁定,那麼使用回調或廣播來加載UI是標準做法。除此之外,你的具體*問題是什麼。您的帖子中似乎有很多隱含的問題。 – Simon
我剛剛讀過你的其他問題。我個人的建議是儘量做到「現成」。只有在基本框架無法讓您完成某些任務時才使用第三方庫。這個問題可能有幫助http://stackoverflow.com/questions/3505930/make-an-http-request-with-android – Simon