Java Android线程,对吗?
所以Android不允许网络操作在主线程上运行,这是很公平的。我在另一个线程上运行此代码时遇到一些问题。你能看一下我的代码,看看这是否正确吗?谢谢你,我感谢你给我的帮助Java Android线程,对吗?,java,android,multithreading,Java,Android,Multithreading,所以Android不允许网络操作在主线程上运行,这是很公平的。我在另一个线程上运行此代码时遇到一些问题。你能看一下我的代码,看看这是否正确吗?谢谢你,我感谢你给我的帮助 public class StartActivity extends Activity implements Runnable { public static final int timeout = 3000; private boolean boolConStatus = false; public
public class StartActivity extends Activity implements Runnable {
public static final int timeout = 3000;
private boolean boolConStatus = false;
public static final String TAG = "StartActivity";
public static final String url = "serverIP";
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
Log.d(TAG, "onCreated with Bundle: " + bundle);
setContentView(R.layout.activity_start);
}
public void run() {
boolean boolConStatus;
boolConStatus = this.isConnected();
toaster();
}
public boolean getConStatus() {
return boolConStatus;
}
public void toaster() {
boolConStatus = this.isConnected();
if (boolConStatus == true) {
Toast.makeText(getApplicationContext(),
"Connected to Server", Toast.LENGTH_LONG);
} else {
Toast.makeText(getApplicationContext(),
"All has failed", Toast.LENGTH_LONG);
}
}
public boolean isConnected() {
try {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
if (ni != null && ni.isConnected()) {
URL server = new URL(url);
HttpURLConnection huc = (HttpURLConnection) server.openConnection();
huc.setRequestProperty("Connection", "close");
huc.setConnectTimeout(timeout);
huc.connect();
if (huc.getResponseCode() == 200) {
return true;
} else {
Log.d("NOT CONNECTED TO SERVER", "NOT CONNECTED TO SERVER");
return false;
}
} else {
Log.d("NO INTERNET CONNECTION", "NO INTERNET CONNECTION");
return false;
}
} catch (Exception e) {
Log.d(TAG, e.getLocalizedMessage(), e);
e.printStackTrace();
}
return false;
}
}
如果没有线程,Runnable本身就什么都不是。尝试将其添加到onCreate()或onResume()中:
然后可能需要阅读本文,以便了解应该如何做…在您的情况下,可能使用了…但您必须首先了解线程是如何工作的。编译和运行它时会发生什么?您需要更具体一些。你有什么麻烦?到目前为止,您已经完成了哪些调试?一个可运行的线程本身并不是严格意义上的线程。但是您从未调用
run()
,并且您正试图在主线程上执行网络操作(如HoneyComb和更高版本中的致命错误)。混乱。我总是在主线程中进行一次性TCP流通信。从来没有遇到过问题。套接字通信不属于“网络通信”范畴吗?你在用什么API测试你的应用程序?(使用@Sam
回复特定用户,我们会收到通知。我们正在对您的问题进行评论,因此默认情况下您会收到这些通知。)
new Thread(this).start();