2

我知道 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

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

4

3 回答 3

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
    }
于 2013-08-07T17:42:20.097 回答
1

首先-总是在这里发布 logcat 中的错误,我们几乎总是需要它们来解决问题。

但是这里很简单——你不能在主线程上做网络 IO。您需要改为在 AsyncTask 或 Thread 上运行它。

于 2013-08-07T17:37:00.483 回答
1

您当前正在主 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();
}

}
于 2013-08-07T17:48:12.797 回答