1 Replies - 1615 Views - Last Post: 11 June 2013 - 03:39 PM

#1 SpiderD   User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 48
  • Joined: 30-March 13

TextView output in real time

Posted 11 June 2013 - 12:53 PM

Hello I have a android app which basically has a EditText to get userinput, TextView to output the processed data and a button to excute everything. Once the user click a button and new thread is made and the following two loops are running and appending the new output each time to the TextView. However what the problem the TextView output isnt going to the TextView in real time when the loops are finished its displays all the outputted data at once, help please .


package com.example.assignment2_android;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Random;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class station extends Activity 
{
	Button run, clear, home;
	EditText userinput;
	TextView useroutput;
	
	//LinkedList Customer Queue created here.
	public static Queue<String> line = new  LinkedList<String> (); 
	private static String time;   //time variable.
	private static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");   //DateFormat variable.
	    
	private int intervals;
	private int cashiers;
	private int processing_time;
	Thread arrival;
	Handler handler, handlerr, handlerrr;

	protected void onCreate(Bundle savedInstanceState) 
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.station);
		
		userinput = (EditText)findViewById(R.id.s_userinput);
		useroutput = (TextView)findViewById(R.id.s_useroutput);
		
		clear = (Button)findViewById(R.id.button_clear);
		clear.setonclickListener(new View.onclickListener() 
		{
		      public void onclick(View view) 
		      {
		    	  line.clear();
		    	  userinput.setText("Line Cleared");
		    	  useroutput.setText("");
		    	  System.out.println("cleared");
		      }
		});
		
		home = (Button)findViewById(R.id.button_home);
		home.setonclickListener(new View.onclickListener() 
		{
		      public void onclick(View view) 
		      {
		    	  Intent a = new Intent(station.this, MainActivity.class);
		    	  startActivity(a);
		      }
		});
	}
	
	public void startProgress(View view)
	{
	    handler = new Handler();
		Thread arrival = new Thread();
		{
			cashiers = Integer.parseInt(userinput.getText().toString());
			useroutput.append("CUSTOMERS ARE COMING !!!! !!!!" + "\n" + "\n");;
			//Array of all the customer that will enter the queue.
			String list[] = {"Naqi", "Monty", "Mohin", "Yasmin", "Maighjoo", "Ashish", "Paal", "Kevin", "Ruhail", "Tony"};
	     	//2nd ArrayList which customer are added to and removed later on so no duplicates arise.
	     	ArrayList<String> customer = new ArrayList<String>(Arrays.asList(list));
	     		
	     	int array_customer_list = list.length; //Recording the number of customers in the array.
	    		
	    	//While statement containing for loop add customers to the empty LinkedList object.
	    	while (line.isEmpty())
	    	{
	    		for (int x = 0; x < array_customer_list; x++ )
	    		{
	    			try
	    			{
	    				Thread.sleep(ran_interval() * 1000);   //Sleep method to hold the arrival time by 1-2 seconds. 
	    				int cus = (int) (Math.random() * customer.size());   //Random customer is picked here. 
	    				String new_cus = customer.get(cus);   //New customer object is created ere.
	    				line.add(new_cus);   //Customer objects are added to the empty LinkedList queue.
	    				customer.remove(cus);
	    					
	    				//For loop statement to outputting the queue.
	    				for (String s : line)
	    				{
	    					useroutput.append("[" + s.toString() + " " + "]" + "\n");; //Outputting each customer and using the ".name" method so customers are readable.
	    				}
	    				//Outputting the whole queue and stating who has joined the queue.
	    				useroutput.append("\n" + "The queue has " + line.size() + " customers so far" + "\n" + 
	    				new_cus.toString() + " Has Joined the Queue " + " <=== WAITING" + "\n" + "\n");
	    			}
	    			catch(Exception a)   //ERROR handler for sleep method.
	    			{
	    				System.out.println("Intervals error: " + a);   //Outputting the ERROR message.
	    				System.exit(0);   //If ERROR found exit system.
	    			}
	    				
	    		}
	    	}
	    	userinput.append("\n");
	    	useroutput.append("CUSTOMERS ARE WAITING !!!! !!!!" + "\n" + "\n");
	    	useroutput.append("Processing START !!!!" + "\n" + "\n");
	    	
	    	while (!line.isEmpty())   //While statement with for loop to remove each customer from LinkedList queue.
    		{
    			try 
    			{
    				String cus = line.remove(); //Method to remove customer from LinkedList queue.
    				String time = getTime();
    				Thread.sleep((processing_time() * 1000) / cashiers); //Sleep method to hold the processing by 1-3 seconds.
    				for (String s : line)
    				{
    					useroutput.append("[" + s.toString() + " " + "]" + "\n"); //Outputting each customer and using the ".name" method so customers are readable.
    				}
    				//Outputting the whole queue and stating who has joined the queue.
    				useroutput.append("\n" + "The queue has " + line.size() + " customers left" + "\n" + 
    				cus.toString()+ " waited for " + time + " <=== SERVED" + "\n" + "\n");
    			}
    			catch(Exception a)   //ERROR handler for sleep method.
    			{
    				System.out.println("Cashiers_wait error: " + a);   //Outputting the ERROR message.
    				System.exit(0);   //If ERROR found exit system.
    			}
    		}
			useroutput.append("Processing FINISHED !!!!" + "\n");
	    	System.out.println("working" + "\n" + "random arrival time is :" + intervals + "\n" + 
			"random processing time is :" + processing_time);
		}; arrival.start();
	};

	public void append_output(final String text)
	{
		runOnUiThread(new Runnable()
		{
			@Override
			public void run() 
			{
				
				useroutput.append(text);
			}
		});
	}
	
	static String getTime()   //Time Constructor
    {
       Calendar cal = Calendar.getInstance();
	   time = dateFormat.format(cal.getTime());   //Getting the current system time.
	   return time;   //Return time.
    }
     
    public int ran_interval()
     {
    	 Random rand = new Random(); //Random object created here.
 		 int interval = this.intervals = rand.nextInt(2) + 1; //Random number between 1-2 is generated for customer arrival here.
 		 
 		 return interval;
     }
     
    public int processing_time()
     {
    	 Random ran = new Random();    //Random object created here.
 		 int time = this.processing_time = ran.nextInt(4) + 1;  //Random number between 1-3 is generated for customer arrival here.
 		 
 		 return time;
     }
}




Is This A Good Question/Topic? 0
  • +

Replies To: TextView output in real time

#2 EndLessMind   User is offline

  • Android Expert
  • member icon

Reputation: 273
  • View blog
  • Posts: 1,252
  • Joined: 13-March 09

Re: TextView output in real time

Posted 11 June 2013 - 03:39 PM

Well first of, you only have one Thread (arrival), but it's not running any code.
That's because you haven't set a Run-void with your code.
All you do, it creating a new thread. Then you're running all your code
and first when the job is done, then you're starting your empty thread.

Also, even if that code had been run in a thread, it would crash due to cross-threading.
Was This Post Helpful? 0
  • +
  • -

Page 1 of 1