我认识Java但不幸的是选择了Basic4Android用于Android开发。工作了一年后,我意识到我应该采用原生解决方案。所以我的问题可能很愚蠢,但我需要你的建议来解决它。
我的目标是从GET请求中检索数据。我已经通过互联网尝试了大量的Android http客户端教程,但每个教程都失败了。我只想在这里分享一个,这样你就可以帮我修复。当我点击按钮时,没有任何事情发生,如果没有logcat窗口中的大量错误消息。
Main Class可在此快速查看:
public class MainActivity extends Activity implements OnClickListener {
private Button Test;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Test = (Button) findViewById(R.id.Test);
Test.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.Test){
try {
HttpClient client = new DefaultHttpClient();
String getURL = "http://www.google.com";
HttpGet get = new HttpGet(getURL);
HttpResponse responseGet = client.execute(get);
HttpEntity resEntityGet = responseGet.getEntity();
if (resEntityGet != null) {
// do something with the response
String response = EntityUtils.toString(resEntityGet);
Log.i("GET RESPONSE", response);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
整个项目在这里:https://dl.dropboxusercontent.com/u/15625012/TestHttp.zip
我真的很感激任何帮助/建议。
答案 0 :(得分:1)
首先 - 总是在这里发布logcat中的错误,我们几乎总是需要它们来解决问题。
但是这里很容易 - 你不能在主线程上做网络IO。您需要在AsyncTask或Thread上运行它。
答案 1 :(得分:1)
try {
URL url = new URL(urlstr);
HttpsURLConnection connection =
(HttpsURLConnection)url.openConnection();
connection.setReadTimeout(6000);
connection.setRequestMethod("GET");
connection.setRequestProperty("User_agent", "android");
OutputStream os = connection.getOutputStream();
//os.write(buffer);
InputStream is = connection.getInputStream();
} catch (MalformedURLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}catch (Exception e) {
// TODO: handle exception
}
答案 2 :(得分:1)
您当前正在主UI线程中执行网络访问(按钮单击功能)。 Android不允许在应用程序的主线程UI线程中进行网络访问等长时间操作。您需要在单独的线程中异步执行此操作。您可以使用内置的异步类来实现此目的。
以下是我编写的示例代码
public class Sample extends Activity
{
private ProgressDialog progress_dialog;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sample);
progress_dialog = new ProgressDialog(this);
}
public void MyButtonClick(View view)
{
EditText usernameEditText = (EditText)findViewById(R.id.sample_username);
String username = usernameEditText.getText();
String URL = "http://SOME_WEBSITE?Username=" + username;
progress_dialog.setMessage("Loading. Please wait...");
progress_dialog.setCancelable(false);
progress_dialog.show();
new SampleAsynThread().execute(URL);
}
private class SampleAsynThreadextends AsyncTask <String, Void, String>
{
protected String doInBackground(String... urls)
{
// make your request here
return "Response";
}
protected void onPostExecute(String result)
{
// show response on ui
progress_dialog.dismiss();
}
}
protected void onDestroy()
{
progress_dialog.dismiss();
super.onDestroy();
}
@Override
protected void onPause()
{
progress_dialog.dismiss();
super.onPause();
}
}