0

我试图让 textview 显示一个数字,但它不会。

我的活动代码:

package com.example.gotteron;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class Classement extends Activity{

    TextView textview;
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.classement);
        GetCode getCode = new GetCode();
        textview = (TextView)findViewById(R.id.textView1);
        try {
            textview.setText(getCode.test());
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

///////////////////////////////////////// ///////////////////////////////////////// ///////////////////////////////////////// ///////////////

获取 HTML 的类:

//Package
package com.example.gotteron;

//Import
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

public class GetCode{

    public String test() throws Exception{

        //Recupérer le code HTML de la page
        URL oracle = new URL("http://www.nationalleague.ch/NL/fr/");
        URLConnection yc = oracle.openConnection();
        BufferedReader in = new BufferedReader(new InputStreamReader(
                yc.getInputStream()));
        String inputLine;
        String s1 = "";
        while ((inputLine = in.readLine()) != null)
            s1 = s1 + inputLine;
        in.close();

        int Berne = s1.indexOf(">SC Bern</td>");
        String s3 = String.valueOf(Berne); 
        return s3;
    }
}

///////////////////////////////////////// ///////////////////////////////////////// ///////////////////////////////////////// ///////////////

XML 文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@drawable/background">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/firstPosition" />

</LinearLayout>

///////////////////////////////////////// ///////////////////////////////////////// ///////////////////////////////////////// ///////////////

显现

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

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

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

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="Classement" android:label="@string/app_name"></activity>
        <activity android:name="Calendrier" android:label="@string/app_name"></activity>
        <activity android:name="Live" android:label="@string/app_name"></activity>
    </application>
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
</manifest>

///////////////////////////////////////// ///////////////////////////////////////// ///////////////////////////////////////// ///////////////

编辑:

感谢您的代码,但仍然存在问题。当我运行应用程序时,textview 会显示他的默认消息。在此期间,logcat 显示很多消息: http ://pastebin.com/244grjYt ,最后应用程序崩溃

4

3 回答 3

1

您无法在 ui 线程中建立网络连接(HTTP 连接),尝试将调用移至getCode.test()另一个线程或更好地移至AsyncTask..

于 2013-01-15T07:43:41.107 回答
1

本质上,这就是其他答案的内容。由于您没有检查任何答案,也许这会有所帮助。

public class MyClass extends Activity {
    TextView textview;
    public void onCreate(Bundle bundle) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.classement);
        textview = (TextView)findViewById(R.id.textview);
        new NetworkOperation().execute();
    }

    private class NetworkOperation extends AsyncTask<Void, Void, String> {
        protected String doInBackground(Void... params) {
            try {
                URL oracle = new URL("http://www.nationalleague.ch/NL/fr/");
                URLConnection yc = oracle.openConnection();
                BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream()));
                String inputLine;
                String s1 = "";
                while ((inputLine = in.readLine()) != null)
                    s1 = s1 + inputLine;
                in.close();
                int Berne = s1.indexOf(">SC Bern</td>");
                String s3 = String.valueOf(Berne); 
                return s3;
            }
            catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }      

        protected void onPostExecute(String result) {
            textview.setText(result);
        }
    }
}
于 2013-01-15T08:24:27.100 回答
0

You are facing NetworkOnMainThread Exception which is quite common on Emulators that are running on API level 11 and more when you are writing Network Related code in UI Thread. You change your code into doInBackground() of an AsyncTask and run it.

In your case as you are throwing Exception in test() it will not crash your app because Exceptions are caught by Exception.

Example Code:

class FetchResultTask extends AsyncTask<Void,Void,String>
{
protected String doInBackground()
{
  //your network related code.
}
protected void onPostExecute(String result)
{
  super.onPostExecute(result);
   //set the result to TextView here.
}
}
于 2013-01-15T07:46:29.737 回答