簡體   English   中英

從Android客戶端調用php Web服務?

[英]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線程上執行三種操作。

  1. 網絡運營。
  2. 數據庫操作
  3. 文件操作。

從代碼中,我可以看到您正在UI線程上執行網絡操作,這肯定會導致您進入ANR(應用程序無響應)。

每當應用程序發生ANR時,Android就會殺死該應用程序。

您將必須使用輔助線程來執行網絡操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM