public class WelcomeActivity extends Activity {
class Retrieve extends AsyncTask<Void,Void,Void>{
@Override
protected Void doInBackground(Void... params) {
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("some link");
try{
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(3);
nameValuePairs.add(new BasicNameValuePair("username","someUser"));
nameValuePairs.add(new BasicNameValuePair("password","somepass"));
nameValuePairs.add(new BasicNameValuePair("method","checkLogin"));
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
//Execute HTTP Post
HttpResponse response = httpClient.execute(httpPost);
// Log.v("response", response.toString());
Log.d("hi","hello");
// Log.d("response",response.toString());
}catch(Exception e){
Log.e("YOUR_APP_LOG_TAG","I got an error",e);
}
return null;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
new Retrieve().execute();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_welcome);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.welcome, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
Класс Получить для отправки запроса POST на сервер, но я не понимаю, почему он до сих пор рассматривается как выполняется на главном потоке вместо задачи асинхронным.AsyncTask еще дает networkOnMainThreadException
Я смотрел на предыдущие вопросы, касающиеся использования Async, но получаю эту ошибку:
12-25 13:31:57.310 1782-1782/com.example.dalvir.quizapp E/YOUR_APP_LOG_TAG﹕ I got an error
android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)
at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
at java.net.InetAddress.getAllByName(InetAddress.java:214)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
at com.example.dalvir.quizapp.WelcomeActivity.onCreate(WelcomeActivity.java:44)
at android.app.Activity.performCreate(Activity.java:5231)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
Любая помощь очень ценится!
Ваш код не соответствует вашей трассировке стека. Трассировка стека показывает, что вы вызываете 'execute()' в каком-то подклассе AbstractHttpClient' из вашего метода 'onCreate()'. Ваш метод 'onCreate()' не показывает этот вызов. Кроме того, код, который вы показали, выйдет из строя, так как вы не можете выполнить 'AsyncTask' из фонового потока другой' AsyncTask'. – CommonsWare
Вы создали вложенную AsyncTask, которая является неправильным подходом. Один AsyncTask в onCreate и внутри него вы вызываете Retrieve AsyncTask. Просто у меня один AsyncTask – Jay
Я обновил код, поэтому у него есть одиночная AsyncTask, а также обновленный журнал ошибок. – user3738248