我多次尝试过这段代码。但它总是强行关闭。任何人都可以在代码中找出错误

时间:2013-07-13 02:53:53

标签: android

此代码用于通过发布两个数据num,db和获取响应来从php服务器获取详细信息。     公共类MainActivity扩展了Activity {

Button b;
TextView num;
TextView dob;
String db;
String x;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    b=(Button) findViewById(R.id.button1);
    num=(TextView) findViewById(R.id.editText1);
    dob=(TextView) findViewById(R.id.editText2);
    x=(String) num.getText();
    db=(String) dob.getText();

    b.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            submit();
        }
    });

}

submit fn用于将两个值num,db发送到服务器以获得响应。

public String submit(){
    ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();  
    postParameters.add(new BasicNameValuePair("registerno", x ));  
    postParameters.add(new BasicNameValuePair("dob", db ));            

    String response = "";

    DefaultHttpClient client = new DefaultHttpClient();
    HttpGet httpGet = new HttpGet("http://www.pnrinbox.com/premfin.php");

    try 
    {
            HttpResponse execute = client.execute(httpGet);
            InputStream content = execute.getEntity().getContent();

            BufferedReader buffer = new BufferedReader(
                    new InputStreamReader(content));
            String s = "";
            while ((s = buffer.readLine()) != null) 
            {
                response += s;
            }

            Log.d( "After call, response: " , " " + response);
        } 
        catch (Exception e) 
        {
            System.out.println(e.toString());
        }

    return response;
}

将两个数据项发布到php服务器并获取数据。

2 个答案:

答案 0 :(得分:0)

我猜你得到的是NetworkOnMainThreadException。所有网络操作都必须在非UI线程上完成。我建议在android文档中查找AsyncTask类:http://developer.android.com/reference/android/os/AsyncTask.html

您可能会发现需要将submit()函数的主体移动到asyncTask的doInBackground()函数中。

答案 1 :(得分:0)

我认为您必须使用AsyncTask进行网络访问,然后从UI线程调用AsyncTask以返回所需的值。此外,您必须将<uses-permission android:name="android.permission.INTERNET"></uses-permission>放在manifest.xml文件中的</application>之后。