を聴いたときに、このチュートリアルでは、機能を描画配置する方法:表示することができどこ/例えば、私が正常に説明するようにbluetothシリアルプロトコルを使用して、マイクロコントローラからデータを受信していブルートゥース
http://solderer.tv/data-transfer-between-android-and-arduino-via-bluetooth/
I'amを私がtextViewで受け取った値ですが、グラフの値を表示しようとすると、長さが値に依存する行を追加すると、アプリケーションがクラッシュします。
は、私は、静的な絵を描くことが可能だからアプリが起動したとき、私は自分自身の描画機能を持つOKだと思う:
Bitmap bg = Bitmap.createBitmap(480, 800, Bitmap.Config.ARGB_8888);
canvas = new Canvas(bg);
Paint paint = new Paint();
paint.setColor(Color.parseColor(#6b8728));
paint.setXfermode(null);
canvas.drawLine(x, y, x2, y2, paint);
のBt多分最後に、私は別の方法を使用する必要があります。
とにかく、これが私の問題です。これらの描画関数をデータリスニングスレッドに実装すると、アプリケーションがクラッシュします。 私は線の描画を行う方法がわかりません。新しいスレッドが必要ですか?(そしてその方法は?)、ペイントは特定の部分で行う必要がありますか?具体的な機能は?...
私の質問がはっきりしていれば幸いです。
ご協力いただきありがとうございます。私の機能を追加する
:
敬具、
シルヴァン
編集
void beginListenForData()
{
final Handler handler = new Handler();
final byte delimiter = 10; //This is the ASCII code for a newline character
stopWorker = false;
readBufferPosition = 0;
readBuffer = new byte[1024];
workerThread = new Thread(new Runnable()
{
public void run()
{
final TextView t = (TextView)findViewById(R.id.textView);
while(!Thread.currentThread().isInterrupted() && !stopWorker)
{
try
{
int bytesAvailable = mmInputStream.available();
if(bytesAvailable > 0)
{
byte[] packetBytes = new byte[bytesAvailable];
mmInputStream.read(packetBytes);
for(int i=0;i<bytesAvailable;i++)
{
byte b = packetBytes[i];
if(b == delimiter)
{
byte[] encodedBytes = new byte[readBufferPosition];
System.arraycopy(readBuffer, 0, encodedBytes, 0, encodedBytes.length);
final String data = new String(encodedBytes, "US-ASCII");
readBufferPosition = 0;
Toast.makeText(MainActivity.this, data,
Toast.LENGTH_SHORT).show();
handler.post(new Runnable()
{
public void run() {
t.setText(data);
String[] separated = data.split(":");
separated[1].trim();
if ((separated[0].length() != 0)&& (separated[1].length() != 0)) {
t.append("\n" + separated[0]);
t.append("\n" + separated[1]);
t.append("\ntest");
String s_angle = separated[0];
String s_value = separated[1];
final Integer angle = Integer.parseInt(s_angle);
final Integer value = Integer.parseInt(s_value)/1000;
// Crashing here
Paint paint = new Paint();
paint.setColor(Color.parseColor("#6b8728"));
int width = canvas.getWidth()/2;
int height = canvas.getHeight()/2;
canvas.drawLine(width,height,150,50, paint);
}
}
});
}
else
{
readBuffer[readBufferPosition++] = b;
}
}
}
else
{
//t.append(bytesAvailable+"\n");
}
}
catch (IOException ex)
{
stopWorker = true;
}
}
}
});
workerThread.start();
}
こんにちは、あなたの速い答えをいただき、ありがとうございます。 しかし、まだクラッシュしています。私はpaint変数を定義しているラインでクラッシュしています: –
@SylvainTrx、logtcatからスタックトレースまたはログを提供できますか? –
こんにちは、ありがとうございました。 しかし、まだクラッシュしています。これは、私がペイント変数を定義している行でクラッシュしています。 ペイントペイント=新しいペイント(); 私はすでに新しいハンドラに入っていたので、コードをどこに置くべきかはわかりません。 –