qwertzuiop
qwertzuiop

Reputation: 735

Get variable other class java Android

I'm trying to get textview to display a number, but it will not.

My activity code:

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

    }
}

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

Class to get 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 file

<?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>

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

Manifest

<?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>

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

EDIT:

Thanks for the code but there's still a problem. When I run the Application the textview displays his default message. During this time, the logcat displays a lot of messages: http://pastebin.com/244grjYt and at the end the app crashes

Upvotes: 0

Views: 444

Answers (3)

stealthjong
stealthjong

Reputation: 11093

Essentially, this is what the other answers are about. Since you haven't check anything as answer, maybe this will help.

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

Upvotes: 1

TNR
TNR

Reputation: 5869

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.
}
}

Upvotes: 0

Nermeen
Nermeen

Reputation: 15973

You cannot make a network connection (HTTP connection) i the ui thread, try to move the call to getCode.test() into another thread or better into an AsyncTask..

Upvotes: 1

Related Questions