我正在使用此代码,但它在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());
}
}
});
}
}
答案 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();