我对Android应用程序开发很新,我在我的活动onCreate()下面创建了以下内容:
public String test(){
String test = "";
try{
Socket s = new Socket(InetAddress.getByName("ipaddress"), port#);
test +=(s.isConnected());
BufferedReader readFromHost = new BufferedReader(new InputStreamReader(s.getInputStream()));
readFromHost.ready();
test += (readFromHost.readLine());
s.close();
}catch(Exception e){
e.printStackTrace();
}
return test;
}
这只是路由到:
textView2.setText(test());
但是从服务器获取的字符串“test_message”不会出现在文本视图中。但是,当我做的时候
textView2.setText("hi");
它出现在视图中,或者如果我在android程序之外的java中运行test(),结果“test_message”出现在控制台中。有没有想过为什么它没有出现在Android运行时?港口处理方式不同吗?任何帮助都会很棒。
附件是LogCat。似乎有“NetworkOnMainThreadException”?
程序中发生的所有事情是您单击一个按钮,该按钮将使用textview打开一个新活动。
记录:
06-09 12:13:18.189: W/ApplicationPackageManager(4768): getCSCPackageItemText()
06-09 12:13:18.239: E/MoreInfoHPW_ViewGroup(4768): Parent view is not a TextView
06-09 12:13:18.369: E/SpannableStringBuilder(4768): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
06-09 12:13:18.369: E/SpannableStringBuilder(4768): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
06-09 12:13:22.773: W/ApplicationPackageManager(4768): getCSCPackageItemText()
06-09 12:13:22.783: W/System.err(4768): android.os.NetworkOnMainThreadException
06-09 12:13:22.783: W/System.err(4768): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1156)
06-09 12:13:22.783: W/System.err(4768): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
06-09 12:13:22.783: W/System.err(4768): at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
06-09 12:13:22.783: W/System.err(4768): at libcore.io.IoBridge.connect(IoBridge.java:112)
06-09 12:13:22.783: W/System.err(4768): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
06-09 12:13:22.783: W/System.err(4768): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
06-09 12:13:22.783: W/System.err(4768): at java.net.Socket.startupSocket(Socket.java:566)
06-09 12:13:22.783: W/System.err(4768): at java.net.Socket.<init>(Socket.java:226)
06-09 12:13:22.783: W/System.err(4768): at com.example.myfirstapp.DisplayMessageActivity.test(DisplayMessageActivity.java:42)
06-09 12:13:22.783: W/System.err(4768): at com.example.myfirstapp.DisplayMessageActivity.onCreate(DisplayMessageActivity.java:31)
06-09 12:13:22.783: W/System.err(4768): at android.app.Activity.performCreate(Activity.java:5426)
06-09 12:13:22.783: W/System.err(4768): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
06-09 12:13:22.783: W/System.err(4768): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269)
06-09 12:13:22.783: W/System.err(4768): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)
06-09 12:13:22.783: W/System.err(4768): at android.app.ActivityThread.access$900(ActivityThread.java:161)
06-09 12:13:22.783: W/System.err(4768): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
06-09 12:13:22.783: W/System.err(4768): at android.os.Handler.dispatchMessage(Handler.java:102)
06-09 12:13:22.783: W/System.err(4768): at android.os.Looper.loop(Looper.java:157)
06-09 12:13:22.783: W/System.err(4768): at android.app.ActivityThread.main(ActivityThread.java:5356)
06-09 12:13:22.783: W/System.err(4768): at java.lang.reflect.Method.invokeNative(Native Method)
06-09 12:13:22.783: W/System.err(4768): at java.lang.reflect.Method.invoke(Method.java:515)
06-09 12:13:22.783: W/System.err(4768): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
06-09 12:13:22.783: W/System.err(4768): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
06-09 12:13:22.783: W/System.err(4768): at dalvik.system.NativeStart.main(Native Method)
06-09 12:13:22.803: E/MoreInfoHPW_ViewGroup(4768): Parent view is not a TextView
答案 0 :(得分:1)
您无法在Main Thread
中执行网络请求。创建自己的Thread
并从服务器获取字符串:
private TextView textView2;
public void test(){
new Thread(new Runnable() {
@Override
public void run() {
final StringBuilder test = new StringBuilder();
try{
Socket s = new Socket(InetAddress.getByName("ipaddress"), 1111);
test.append(s.isConnected());
BufferedReader readFromHost = new BufferedReader(new InputStreamReader(s.getInputStream()));
readFromHost.ready();
test.append(readFromHost.readLine());
s.close();
}catch(Exception e){
e.printStackTrace();
}
runOnUiThread(new Runnable() {
@Override
public void run() {
textView2.setText(test.toString());
}
});
}
}).start();
}