[英]calling php web service from an android client?
我對android編程非常陌生,我嘗試使用HttpClient從android調用php Web服務。 但是當應用程序運行時,它停止說“不幸的是ServiceTest已停止”並終止。 以下是我的代碼。
public class ServiceTestActivity extends Activity {
private Button btn;
private TextView txt;
String result = "";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn = (Button) findViewById(R.id.button1);
txt = (TextView) findViewById(R.id.txt_name);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
callWebErvice("http://localhost/mvc/login/test");
}
});
}
public void callWebErvice(String serviceURL) {
HttpClient httpclient = new DefaultHttpClient();
HttpGet request = new HttpGet(serviceURL);
ResponseHandler<String> handler = new BasicResponseHandler();
try {
result = httpclient.execute(request, handler);
txt.setText(result);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
httpclient.getConnectionManager().shutdown();
Log.i("my result", result);
} // end callWebServe
}
有人能找出原因嗎?
在沒有任何日志記錄的情況下很難找到代碼中的錯誤,我建議您使用此答案對您有所幫助。
InputStream retrieveStream(String url) {
DefaultHttpClient client = new DefaultHttpClient();
HttpGet getRequest = new HttpGet(url);
try {
HttpResponse getResponse = client.execute(getRequest);
final int statusCode = getResponse.getStatusLine().getStatusCode();
if (statusCode != HttpStatus.SC_OK) {
Log.w(getClass().getSimpleName(), "Error " + statusCode
+ " for URL " + url);
return null;
}
HttpEntity getResponseEntity = getResponse.getEntity();
return getResponseEntity.getContent();
} catch (IOException e) {
getRequest.abort();
Log.w(getClass().getSimpleName(), "Error for URL " + url, e);
}
return null;
}
並使用此代碼將inputstream轉換為String可讀數據格式。
BufferedReader r = new BufferedReader(new InputStreamReader(retrieveStream("YOU URL")));
StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
total.append(line);
}
謝謝 :)
我們不應該在UI線程上執行三種操作。
從代碼中,我可以看到您正在UI線程上執行網絡操作,這肯定會導致您進入ANR(應用程序無響應)。
每當應用程序發生ANR時,Android就會殺死該應用程序。
您將必須使用輔助線程來執行網絡操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.