Я пытаюсь поместить файл throght WebDAV в андроиде,Каков наилучший способ решить android.os.NetworkOnMainThreadException
после я выполнить программу, то Logcat появляется android.os.NetworkOnMainThreadException
я было попробовать два способа sloves него, любит код ниже
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
и этот
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork() // or .detectAll() for all detectable problems
.penaltyLog()
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build());
она могла бы работать, но эти способы заставить мой проект закрыть,
так я думал, что его не хорошие способы использования в моем проекте
после этого я был исследован на нем,
каждый рекомендовал этот способ ее решения
android.os.NetworkOnMainThreadException. How to solve it?
Но я новичок я не знаю, как заполнить мой код,
Я хотел бы знать, как я могу заполнить свой код таким образом,
Заранее благодарю вас за любую помощь, которая может быть предоставлена здесь.
loginConfirmBtn.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
ConnectivityManager connMgr = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
getIpAddress = ipAddress.getText().toString().trim();
getUserName = userName.getText().toString().trim();
getPassWord = passWord.getText().toString().trim();
uploadFiles(sourceFilePath);
Toast.makeText(MainActivity.this, "upload suseeful", Toast.LENGTH_SHORT).show();
hideKeyboard();
} else {
Toast.makeText(MainActivity.this, "make sure you have connected the internet", Toast.LENGTH_SHORT).show();
}
public void uploadFiles(String dir){
Log.d("edoc","PutRunGenuine");
String fileFromEscan = dir;
Conn conn_adv = new Conn(new Constants(getUserName, getPassWord, getIpAddress, 80)); conn_adv.setUrl("/collab/my/"+conn_adv.getUser()+"/sourceFilePath2");
Log.d("edoc","edoc test");
if (fileFromEscan == null)
{
return;
}
try {
String putAvg = "PUT avg: ";
ExtractedMethod exm = new ExtractedMethod();
exm.run(HTCode.Code.PUT, 1, conn_adv, true, fileFromEscan, 1000, true);
Log.d("edoc","edoc_message hello");
synchronized(conn_adv){
conn_adv.notify();
}
} catch (Exception io) {
io.printStackTrace();
Log.d("edoc","edoc Exception"+io);
}
}
сделать «работу» внутри AsyncTask – gmetax
взгляд на 2-й ответ на SO сообщение, которое Вы данный – davidshen84
Либо сделать сетевой задачи в AsyncTask или запустить код сети в новом потоке. –