如何在Android中使用HttpGet Request?

时间:2014-06-06 13:32:09

标签: java android http get

我正在使用此代码,但它在try-catch中捕获错误。哪里出错?

当我打印错误时,content.setText(ex.getMessage());为空。

以下是相关代码:

public class MainActivity extends Activity {

    TextView content;
    EditText fname, email;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        content = (TextView) findViewById(R.id.content);
        Button saveme = (Button) findViewById(R.id.save);
        saveme.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v) {
                Toast.makeText(getBaseContext(), "Please wait, connecting to server.", Toast.LENGTH_LONG).show();

                try {
                    String loginValue = URLEncoder.encode("ffa", "UTF-8");
                    String fnameValue = URLEncoder.encode("fdsfdb", "UTF-8");

                    HttpClient Client = new DefaultHttpClient();
                    String URL = "http://mysite/app.php?a=" + loginValue + "&b=" + fnameValue;

                    try {
                        String SetServerString;
                        HttpGet httpget = new HttpGet(URL);
                        ResponseHandler<String> responseHandler = new BasicResponseHandler();
                        SetServerString = Client.execute(httpget, responseHandler);
                        content.setText(SetServerString);
                    } catch (Exception ex) {
                        content.setText(ex.getMessage());
                    }
                } catch (UnsupportedEncodingException ex) {
                    content.setText(ex.getMessage());
                }
            }
        });
    }
}

3 个答案:

答案 0 :(得分:0)

我认为你得到了NetworkOnMainThreadException。您应该在后台线程上执行网络通信。考虑使用IntentService或AsyncTask。

答案 1 :(得分:0)

我和尼古拉有同样的看法。

解决方法:

if (android.os.Build.VERSION.SDK_INT > 9) {
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
}

只有在为自己编写代码时才使用上面的代码。


如果您的应用程序是由他人制作的,那么您需要更好的方法。

更好的方式:

您应该使用句柄来访问http-request more info in developer.android.com

答案 2 :(得分:0)

我自己用这个:

ByteArrayOutputStream out = new ByteArrayOutputStream();
response.getEntity().writeTo(out);
out.close();
String responseString = out.toString();