私が参照しているTextViewが正しいことを確認し、アプリケーションにインターネット権限があることを確認しました。AsyncTaskを使用するとアプリケーションがクラッシュする
Bitinの現在の価格を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