android - Http 数据未显示在我的 TextView [android]

标签 android http textview

我正在尝试通过 HTTP 请求从 google 获取数据:

主要

public class MainActivity extends ActionBarActivity {
TextView httpStuff;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.httpexample);
    httpStuff = (TextView) findViewById(R.id.httpText);
    HTTP test = new HTTP();
    String returned = null;
    try {
        returned = test.getInternetData();
        httpStuff.setText(returned);
    } catch (Exception e) {com
        e.printStackTrace();
    }
}
}

HTTP 类如下:

public class HTTP {

public String getInternetData() throws Exception{
    BufferedReader in = null;
    String data = null;
    try{
        HttpClient client = new DefaultHttpClient();
        URI website = new URI("http://www.google.net");
        HttpGet request = new HttpGet();
        request.setURI(website);
        HttpResponse response = client.execute(request);
        in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
        StringBuffer sb = new StringBuffer("");
        String l = "";
        String nl = System.getProperty("line.separator");
        while((l = in.readLine()) !=null){
            sb.append(l + nl );
        }
        in.close();
        data = sb.toString();
        return data;
    }finally {
        if (in != null){
            try{
                in.close();
                return data;

            }catch (Exception  e){
                e.printStackTrace();
            }
        }
    }
}

}

这是控制台 logcat:

04-27 19:31:58.063 2167-2191/com.example.briesanji.test D/OpenGLRenderer﹕ Render dirty regions requested: true 04-27 19:31:58.065 2167-2167/com.example.briesanji.test D/﹕ HostConnection::get() New Host Connection established 0xa687c600, tid 2167 04-27 19:31:58.103 2167-2167/com.example.briesanji.test D/Atlas﹕ Validating map... 04-27 19:31:58.196 2167-2191/com.example.briesanji.test D/﹕ HostConnection::get() New Host Connection established 0xa687c7c0, tid 2191 04-27 19:31:58.207 2167-2191/com.example.briesanji.test I/OpenGLRenderer﹕ Initialized EGL, version 1.4 04-27 19:31:58.283 2167-2191/com.example.briesanji.test D/OpenGLRenderer﹕ Enabling debug mode 0 04-27 19:31:58.334 2167-2191/com.example.briesanji.test W/EGL_emulation﹕ eglSurfaceAttrib not implemented 04-27 19:31:58.334 2167-2191/com.example.briesanji.test W/OpenGLRenderer﹕ Failed to set EGL_SWAP_BEHAVIOR on surface 0xa6868780, error=EGL_SUCCESS

TextView 不显示数据但保留其默认文本(“加载数据”) 我已经尝试将 httpStuff.setText(returned); 更改为 httpStuff.setText("hello"); 但没有,所以我认为这是布局问题然后我拉了从 try 方法中输出 httpStuff.setText("hello"); 并显示 Hello.. 所以问题当然是 try 方法,但我不知道我错在哪里

最佳答案

您的代码无法正常工作,因为它试图在其主线程上执行网络操作。为此,您会收到 NetworkOnMainThreadException

解决此问题的最简单方法是使用 AsyncTask:

public class SampleActivity extends Activity {

    TextView httpStuff;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sample);

        httpStuff = (TextView) findViewById(R.id.add_button);
        new DownloadInternetData().execute();
    }

    public class DownloadInternetData extends AsyncTask<Void, Void, String>{

        @Override
        protected String doInBackground(Void... voids) {
            BufferedReader in = null;
            String data = null;
            try {
                HttpClient client = new DefaultHttpClient();
                URI website = new URI("http://www.google.net");
                HttpGet request = new HttpGet();
                request.setURI(website);
                HttpResponse response = client.execute(request);
                in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                StringBuffer sb = new StringBuffer("");
                String l = "";
                String nl = System.getProperty("line.separator");
                while ((l = in.readLine()) != null) {
                    sb.append(l + nl);
                }
                in.close();
                data = sb.toString();
                return data;
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (in != null) {
                    try {
                        in.close();
                        return data;

                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }

            return "";
        }

        @Override
        protected void onPostExecute(String result) {
            httpStuff.setText(result);
        }
    }
}

关于android - Http 数据未显示在我的 TextView [android],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29904671/

相关文章:

http - 如何使用超体 channel ?

android - 如何在android上的webview中获取http头状态码?

android - 如何在 for 循环中实现一个 TextView 对象数组?

android - 如何将字符串值传递给Webview,例如:传递给youtube”

java - 如何使用post方法将一个关键字中值的字符串数组发送到服务器

java - view.getRight 返回 ImageView 的宽度,而不是位置

Angular : Unable to GET local json using HttpClient

Android:保护您的私钥

android - textview 没有出现在屏幕上

java - 获取选定的回收 View 的文本(使用 FireBase)