2012-07-21 67 views
1

我很新的android编程,我试图从android使用HttpClient调用一个php web服务。但是,当应用程序运行时,它停止说“不幸ServiceTest已停止”并终止。 以下是我的代码。从android客户端调用php web服务?

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

很难找到你的代码中没有任何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转换为字符串可读的数据格式。

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

谢谢:)

+0

为了让我的代码在Thread中得到解决,让我知道我也可以发布。谢谢 :) – SALMAN 2012-07-21 15:23:12

0

有三种类型,我们不应该在UI线程中执行操作。

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

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

每当ANR发生应用程序,Android只是杀死应用程序。

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