1

我对 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
}

任何人都可以找出原因吗?

4

2 回答 2

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;

    }

并使用此代码将输入流转换为字符串可读数据格式。

BufferedReader r = new BufferedReader(new InputStreamReader(retrieveStream("YOU URL")));
StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
    total.append(line);
}

谢谢 :)

于 2012-07-21T14:51:32.917 回答
0

我们不应该在 UI 线程上执行三种类型的操作。

  1. 网络运营。
  2. 数据库操作
  3. 文件操作。

从您的代码中,我可以看到您正在 UI 线程上执行网络操作,它肯定会导致您进入 ANR(应用程序无响应)。

每当应用程序发生 ANR 时,android 就会终止应用程序。

您将不得不使用工作线程来执行网络操作。

于 2012-07-21T15:12:47.450 回答