gpt4 book ai didi

Android HTTP GET 不起作用

转载 作者:搜寻专家 更新时间:2023-11-01 08:57:19 26 4
gpt4 key购买 nike

我了解 Java,但不幸的是选择了 Basic4Android 进行 Android 开发。工作一年多后,我意识到我应该转向原生解决方案。所以我的问题可能很愚蠢,但我需要你的建议来解决它。

我的目标是从 GET 请求中检索数据。我已经在互联网上尝试了大量的 android http 客户端教程,但每个教程都失败了。我只想在这里分享一个,以便您可以帮助我修复。当我单击按钮时,logcat 窗口中没有大量错误消息,什么也没有发生。

主类在这里进行快速回顾:

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

我将非常感谢任何形式的帮助/建议。

最佳答案

您当前正在主 UI 线程中进行网络访问(按钮点击功能)。 Android 不允许在 App 的主线程 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();
}

}

关于Android HTTP GET 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18109778/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com