我檢查過我引用的TextView是否正確,並確定該應用程序具有Internet權限。使用AsyncTask時應用程序崩潰
我正在嘗試編寫一個應用程序,它將從Coinbase的API中提取當前比特幣的價格並將其顯示在TextView中。與API交互的代碼完全從我編寫的桌面java程序中複製,以獲取價格並將其放入數據庫;現在已經連續運行了近一個星期。
該應用程序雖然在啓動時崩潰。這是唯一的Java代碼:
import android.app.*;
import android.os.*;
import android.widget.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;
public class MainActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String price = "";
TextView tester = (TextView) findViewById(R.id.ticker);
tester.setText("new text");//This is not displayed before crash
TickerTask ticker = new TickerTask();
ticker.execute();
}
private class TickerTask extends AsyncTask<Void, Void, Void> {
protected Void doInBackground(Void... nothing) {
String coinbase = "https://api.coinbase.com/v2/prices/spot?currency=USD";
int i = 0;
int y = 0;
String price = "";
String formatted_price;
TextView ticker = (TextView) findViewById(R.id.ticker);
try {
URL url = new URL(coinbase);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
BufferedReader in = new BufferedReader (
new InputStreamReader(connection.getInputStream()));
String urlString = "";
String current;
while ((current = in.readLine()) != null) {
urlString += current;
}
int begin = urlString.indexOf("amount");
int end = urlString.indexOf("currency");
price = urlString.substring(begin+9, end-3);
ticker.setText(price);
} catch (Exception e) {
ticker.setText(e.getMessage());
}
y++;
return nothing[0];
}//End of doInBackground
}//End of TickerTask
}
顯示您的堆棧跟蹤 – GreyBeardedGeek
索引越界...'返回任何結果[0];' –
,始終記錄堆棧跟蹤當異常情況發生,否則你永遠不知道,我們也沒有辦法。 – m0skit0