Я пытаюсь создать мое первое приложение для Android, он использует AsyncTask для выполнения запроса на отправку. (для входа на сайт).Ошибка сети в основной теме при использовании AsyncTask
Я получил приложение, работающее отлично с отключенным StrictMode, но я бы хотел, чтобы он был безошибочным при исполнении в StrictMode. Eventhough я переработан мое приложение с помощью AsyncTask он все еще дает мне эту ошибку:
android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)
Из того, что я прочитал в Интернете, используя AsyncTask должен решить это. Я не хочу использовать Java Threads, потому что хочу научиться делать это правильно.
Я строю новый класс, чтобы выполнить задачу, это называется MyAsyncTask, здесь де код класса
<code>
package com.am.tuto;
import android.os.AsyncTask;// removed rest of imports for readability
public class MyAsyncTask extends AsyncTask<Void, Void, String> {
String u;
String p;
public MyAsyncTask(String u, String p)
{
this.u=u;
this.p=p;
}
@Override protected String doInBackground(Void... params) {
String msg="";
if ((u.length()>0)&&(p.length()>0))
{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://irrationalgamers.com/test.php");
try
{
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("username", u));
nameValuePairs.add(new BasicNameValuePair("password", p));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response =httpclient.execute(httppost); // <----the error occurs
HttpEntity entity = response.getEntity();
String responseString = EntityUtils.toString(entity, "UTF-8");
System.out.println(responseString);
msg="success";
msg=responseString;
}
catch (ClientProtocolException e)
{
// TODO Auto-generated catch block
}
catch (IOException e)
{
// TODO Auto-generated catch block
}
}
else
{
msg="failed";
}
return msg;
}
@Override protected void onPostExecute(String result)
{
MyBus.getInstance().post(new AsyncTaskResultEvent(doInBackground()));
}
}
</code>
Я имею в виду, что это может быть потому, что я создал свой собственный конструктор, но я чувствую, что я на самом деле есть передать некоторые параметры.
Я могу продолжить программирование приложения, но было бы неплохо узнать, как предотвратить эту проблему в будущем. Каждая статья я прочитал на ошибки указывает мне AsyncTask, что трудно найти решение, когда уже реализовано ...
Любые мысли по этому вопросу будет весьма aprreciated
, как вы начинаете 'AsyncTask'? –
Как вы запускаете AsyncTask? С get или execute? – Blackbelt
@blackbelt Я запускаю его с выполнением –