【发布时间】:2017-05-25 04:54:51
【问题描述】:
我正在尝试从服务器接收我的安卓手机上的数据。我不明白为什么它总是崩溃...请帮助!
seekbarbrightness.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekbarbrightness, int progress, boolean b) {
if(b==true) {
seekbarvalue = seekbarbrightness.getProgress();
multiplier = (double) seekbarvalue / 100;
finallumens = (int) (multiplier * LoginActivity.enterlumens);
tblumens.setText(String.valueOf(finallumens) + " Lumens");
if (LoginActivity.getSocket() != null) {
try {
InputStreamReader streamReader = new InputStreamReader(LoginActivity.getSocket().getInputStream());
BufferedReader reader = new BufferedReader(streamReader);
String str = reader.readLine();
tbvolts.setText("Voltage: "+str);
} catch (IOException e) {
e.printStackTrace();
}
}
else{
Toast.makeText(MainActivity.this, "NOT connected To Socket, please disconnect and reconnect!", Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
如果我删除接收数据代码,并将以下代码放在 try 和 catch 块中,它可以工作。
LoginActivity.getSocket().getOutputStream().write(String.valueOf(multiplier).getBytes());
我不确定我做错了什么。但下面是我在 logcat 中遇到的错误,我的应用程序崩溃了。
Exception in MessageQueue callback: handleReceiveCallback.
android.os.NetworkOnMainThreadException
这是我创建的异步方法。这是正确的吗?以及如何在我的 AsyncTask 中提取 str 值并将其放入 Textview 的任何想法?我只能打印出值,但不能用它设置文本。
class ReceiveData extends AsyncTask<String, Void, String> {
protected String doInBackground(String... args) {
try {
BufferedReader in = new BufferedReader(new InputStreamReader(LoginActivity.getSocket().getInputStream()));
in.readLine();
String str = in.readLine();
return str;
} catch (IOException e) {
e.printStackTrace();
return "fail";
}
}
【问题讨论】:
-
@DiegoTorresMilano 我不明白。当我将代码切换为发送字节时,它可以工作。但只有在接收数据时才不会..
-
你不应该在主线程上做任何网络操作