我对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
}
有人能找出原因吗?
答案 0 :(得分:0)
在没有任何logcat的情况下很难找到代码中的错误我宁愿建议你使用这个肯定会对你有帮助的答案。
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);
}
谢谢:)
答案 1 :(得分:0)
我们不应该在UI线程上执行三种类型的操作。
从您的代码中我可以看到您正在UI线程上执行网络操作,它肯定会引导您进入ANR(应用程序无响应)。
每当ANR发生应用程序时,android就会杀死应用程序。
您必须使用工作线程来执行网络操作。