package com.example.multicast;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import javax.security.auth.PrivateCredentialPermission;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText txt;
private ProgressBar bar;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txt=(EditText)findViewById(R.id.editText1);
bar = (ProgressBar) findViewById(R.id.progressBar1);
}
public void startProgress(View view) {
new Thread(new server()).start();
new Thread(new client()).start();
}
class client implements Runnable {
@Override
public void run() {
try{
Log.v("ppp","try");
MulticastSocket socket = new MulticastSocket(9999);
Log.v("ppp","aftrsokt");
InetAddress group = InetAddress.getByName("224.0.0.1");
Log.v("ppp","b4join");
socket.joinGroup(group);
Log.v("ppp","join");
DatagramPacket packet;
byte[] buf = new byte[1024];
String received= "";
packet = new DatagramPacket(buf, buf.length);
Log.v("ppp", "creatpacket");
socket.receive(packet);
Log.v("ppp", "rcvpackt");
received = new String(packet.getData());
Log.v("ppp", "rcvd"+received);
received =new String(buf,0,packet.getLength());
Log.v("ppp","rcvd"+received);
txt.setText("ppp"); ///ERROR
Log.v("ppp", "aftr txt.settext");
bar.setProgress(5);
System.out.println("Address: " + received);
Toast.makeText(MainActivity.this,"OnClickListener : " +
" "+received,
Toast.LENGTH_LONG).show();
socket.leaveGroup(group);
socket.close();
}
catch(Exception e){
Log.v("ppp","try"+e);
}
}
}
class server implements Runnable {
byte [] buffer=new byte[1024];
DatagramPacket packet;
@Override
public void run() {
try{
DatagramSocket socket = new DatagramSocket();
String ip="haaii";
Log.v("ppp","hi");
buffer = ip.getBytes();
packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName("224.0.0.1"),9999);
socket.send(packet);
socket.close();
Log.v("ppp","socketclose");
}
catch(Exception e){
}
}
}
}
这显示了错误
android.view.ViewRoot$CalledFromWrongThreadException:
Only the original thread that created a view hierarchy can touch its views.
如何将文本设置为TextView
?
xml如下所示
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ProgressBar
android:id="@+id/progressBar1"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:indeterminate="false"
android:max="10"
android:padding="4dip" >
</ProgressBar>
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="startProgress"
android:text="Start" />
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
在runOnUiThread()
方法中调用txt.setText("ppp")
方法。请注意使用活动上下文调用runOnUiThread
方法,因为您正在创建内部类,runOnUiThread
方法将不起作用,除非您使用活动调用它。
只有创建视图层次的原始线程才能接触其视图。
只有UI线程可以在UI上进行更改。
您正在尝试从非UI线程修改UI。要在UI线程上执行操作,请使用runOnUiThread()方法。
try{
Log.v("ppp","try");
MulticastSocket socket = new MulticastSocket(9999);
Log.v("ppp","aftrsokt");
InetAddress group = InetAddress.getByName("224.0.0.1");
Log.v("ppp","b4join");
socket.joinGroup(group);
Log.v("ppp","join");
DatagramPacket packet;
byte[] buf = new byte[1024];
String received= "";
packet = new DatagramPacket(buf, buf.length);
Log.v("ppp", "creatpacket");
socket.receive(packet);
Log.v("ppp", "rcvpackt");
received = new String(packet.getData());
Log.v("ppp", "rcvd"+received);
received =new String(buf,0,packet.getLength());
Log.v("ppp","rcvd"+received);
runOnUiThread(new Runnable() {
@Override
public void run() {
txt.setText("ppp");
Log.v("ppp", "aftr txt.settext");
bar.setProgress(5);
System.out.println("Address: " + received);
Toast.makeText(MainActivity.this,"OnClickListener : " + " "+received,Toast.LENGTH_LONG).show();
}
});
socket.leaveGroup(group);
socket.close();
}
catch(Exception e){
Log.v("ppp","try"+e);
}
在我的中,我有一个,它从这个网站检索JSON:https://pt.wikipedia.org/w/api.php?format=json 这些是我用来检索数据的类,在最后一个类中,我尝试将数据设置到我的文本视图中。。。顺便说一下,在我的onCreate方法中,我以这种方式调用了这个类
我创建了一个方法本地内部类并与抽象类结合。代码工作正常,但我不明白IntelliJ中关于我不能在内部类中设置方法的错误弹出窗口,该方法从抽象内部类扩展到私有。 我必须从“Private InnerClassSubclass”更改为“Public InnerClassSubclass”,如果我不这样做,错误如下: “InnerClassSubclass”中的“innerMethod()”与“Inne
问题内容: 基本上,我在XML内有此功能,但是我必须在代码内重新创建它。我该怎么做? 我可以使用它来设置文本大小,但是layout_width和height呢? 有没有办法告诉代码使用DP单元而不是像素?还是将DP转换为像素的转换功能? 问题答案: 提取:
我正在学习Spring框架,以创建使用基本身份验证和交换JSON的REST Web服务的客户端。在网上搜索了很多之后,我写了一些有效的代码(如下),但是现在我得到了一个“不支持的媒体类型”错误,因为请求是用内容类型文本/普通而不是应用程序/json发送的。我在网络上没有发现任何显示如何在请求头中设置内容类型的内容(而不会完全迷失在杂草中)。我的代码是: 任何指导都将不胜感激。 谢谢,乔治
我试图在我的. ascx文件中复制到剪贴板。因为这是ASP. NET,所以没有将[STAThread]放在主函数上。 我收到一个错误,说明:“在进行OLE调用之前,必须将当前线程设置为单线程单元(STA)模式。请确保主函数上标记了STAThreadAttribute。” 在我的ascx里。cs文件我有
我有一个内部类,它在我的主类中扩展了异步任务 我在内部类中获得了分配给我的字符串变量“变量”的正确值,但我无法访问我的主类中的值。