Я создаю приложение, которое принимает данные веб-сайта и просто отображает их.У меня это работало, но потом я попытался внедрить его в пользовательский интерфейс с вкладками, и теперь оно не работает.
Я сузил его до
input = reader.readLine();
, это причина, но яне понимаю, в чем дело.
Главный класс
package app.stockup;
import java.util.ArrayList;
import app.stockup.R;
import android.app.Activity;
import android.app.TabActivity;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.widget.TabHost;
public class Main extends TabActivity
{
public static ArrayList<ShareSet> sharePortfolio = new ArrayList<ShareSet>();
Resources resources;
TabHost tabHost;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
resources = getResources();
tabHost = getTabHost();
buildPortfolio();
buildPage(Status.class, "Status", R.drawable.status_tab);
buildPage(Portfolio.class, "Portfolio", R.drawable.portfolio_tab);
tabHost.setCurrentTab(0);
}
private void buildPage(Class<? extends Activity> className, String tabName, int tabID)
{
Intent intent = new Intent(this, className);
tabHost.addTab(tabHost.newTabSpec(tabName)
.setIndicator(tabName, resources.getDrawable(tabID))
.setContent(intent));
}
private void buildPortfolio()
{
sharePortfolio.add(new ShareSet("BLVN", "Bowleven", 3960, R.id.portfolioTextBLVN, R.id.statusTextBLVN));
sharePortfolio.add(new ShareSet("BP", "British Petroleum", 192, R.id.portfolioTextBP, R.id.statusTextBP));
sharePortfolio.add(new ShareSet("EXPN", "Experian", 258, R.id.portfolioTextEXPN, R.id.statusTextEXPN));
sharePortfolio.add(new ShareSet("HSBA", "HSBC", 343, R.id.portfolioTextHSBC, R.id.statusTextHSBC));
sharePortfolio.add(new ShareSet("MKS", "Marks & Spencers", 485, R.id.portfolioTextMS, R.id.statusTextMS));
sharePortfolio.add(new ShareSet("SN", "Smith & Nephew", 1219, R.id.portfolioTextSN, R.id.statusTextSN));
}
}
Класс статуса
package app.stockup;
import java.util.ArrayList;
import java.util.Iterator;
import app.stockup.Main;
import app.stockup.ShareSet;
import app.stockup.WebReader;
import app.stockup.R;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.TextView;
public class Status extends Activity
{
private ArrayList<ShareSet> myShares = Main.sharePortfolio;
Iterator<ShareSet> iterator = myShares.iterator();
ShareSet mySet;
TextView connectionStatus, fieldID;
int color;
WebReader reader;
double currentPrice;
double openPrice;
double difference;
String input;
String percentage;
String shareDirection;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.status);
connectionStatus = (TextView)findViewById(R.id.connectionStatus);
connectionStatus.setText("Internet : Connected");
compareSharePrice();
}
public void compareSharePrice()
{
while(iterator.hasNext())
{
mySet = iterator.next();
fieldID = (TextView)findViewById(mySet.getStatusFieldID());
reader = new WebReader(mySet.getStockURL());
input = reader.readLine();
currentPrice = reader.getCurrentPrice(input);
openPrice = reader.getOpenPrice(input);
difference = Math.abs(openPrice - currentPrice);
percentage = String.format("%.2f", 100/(openPrice/difference));
if(currentPrice >= openPrice)
{
color = (int) Color.GREEN;
shareDirection = "rocketed";
}
else if(currentPrice <= openPrice)
{
color = (int) Color.RED;
shareDirection = "plummeted";
}
fieldID.setText(mySet.getStockCode() + " has " + shareDirection + " by " + percentage + "%");
fieldID.setTextColor(color);
}
}
}
WebReader Class
package app.stockup;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.Scanner;
public class WebReader
{
private static Scanner scanner;
int trade;
int from;
int to;
String price;
public WebReader(URL url)
{
try
{
URLConnection website = url.openConnection();
InputStream inputStream = website.getInputStream();
scanner = new Scanner(new BufferedInputStream(inputStream));
}
catch (IOException ioe)
{
}
}
public String readLine()
{
if (scanner.hasNextLine())
{
return scanner.useDelimiter("\\A").next();
}
return null;
}
public double getCurrentPrice(String input)
{
trade = input.indexOf("Last Trade:", 0);
from = input.indexOf("<b><span", trade);
from = input.indexOf(">", from + 4);
to = input.indexOf("</span></b>", from);
price = input.substring(from + 1, to);
return Double.parseDouble(price);
}
/*
*
*/
public double getOpenPrice(String input)
{
trade = input.indexOf("Open:", 0);
from = input.indexOf("><td class", trade);
from = input.indexOf(">", from + 4);
to = input.indexOf("</td></tr>", from);
price = input.substring(from + 1, to);
return Double.parseDouble(price);
}
}