0

我正在尝试从 Internet 上的教程之一执行非常简单的示例。但无法执行。它在向服务器发送 http get 请求时给了我例外......代码运行良好,直到将请求发送到服务器。

Http示例类:

    public class HttpExample extends Activity {

        TextView httpStuff;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.httpex);
            httpStuff = (TextView) findViewById(R.id.tvHttp);
            GetMethodEx test = new GetMethodEx();
            String returned;
            try {
                returned = test.getInternetData();
                httpStuff.setText(returned);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                Toast.makeText(HttpExample.this, "Failed", Toast.LENGTH_LONG)
                        .show();
            }

        }

        public class GetMethodEx {

            public String getInternetData() throws Exception {
                BufferedReader in = null;
                String data = null;
                try {
                    HttpClient client = new DefaultHttpClient();
                    URI website = new URI("http://www.mybringback.com/");
                    HttpGet request = new HttpGet();
                    request.setURI(website);
                    HttpResponse response = client.execute(request);
                    // Toast.makeText(HttpExample.this, "Here",
                    // Toast.LENGTH_LONG).show();

                    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();
                        }
                    }
                }
            }

        }

    }

Android Manifest.xml : 我也启用了 Internet 权限

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.httpclient"
        android:versionCode="1"
        android:versionName="1.0" >

        <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="16" />

        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name="com.example.httpclient.HttpExample"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />

                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>

    </manifest>

我不知道是什么问题,因为我已经运行了很多其他代码来从服务器发送或接收数据,但它们也没有执行可能是模拟器或其他东西的问题......请指导我这是类代码和清单……

4

3 回答 3

1

选项1:

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
 StrictMode.setThreadPolicy(policy);

选项 1 只适合测试它。但是你应该避免真正使用这种方法并AsyncTask为它做一个

//================================================= ============================
选项2:

使用本教程制作正确的 ASyncTask:http ://www.elvenware.com/charlie/development/android/SimpleHttpGetThread.html

//================================================= ============================
使用 ASyncTask 作为最终任务(选项 2)。

于 2013-01-18T13:34:27.993 回答
0

检查您的 logcat 输出,它说NetworkOnMainThreadException,这意味着您正在直接在主线程上执行长时间运行的任务(网络调用)。

要实现这样长时间运行的任务,您可以实现AsyncTask或 Threading 实现来进行网络调用。

仅供参考,AsyncTask 被称为 Painless Threading,这意味着您无需担心任何线程处理过程。

在其中一种方法中实现您的网络调用, AsyncTask文档doInBackground()中已经给出了一个示例。

于 2013-01-18T13:27:08.600 回答
0

检查从您的设备与互联网连接。

如果您为 textview 设置文本,请尝试下载简单文本:http ://weather.yahooapis.com/forecastrss?w=2502265

于 2013-01-18T13:37:11.807 回答