2015-05-14 3 views
1

Как получить значения из пакета в AsyncTaskdoInBackground() метод, состоящий из URL и строки?Использование пакета в Async Task, android

В деятельности:

Bundle bundle = new Bundle(); 
bundle.putString("url", url); 
bundle.putString("json",asyn.toString()); 
inte.putExtras(bundle); 
JSONObject ResponseFromServer = asyn.execute(bundle); 

и в AsyncTask Я все еще не в состоянии извлечь значения.

ответ

0

Там действительно нет необходимости использовать Bundle здесь, вы можете просто передать в струнных к varargs, который doInBackground() занимает.

Вы бы просто назвать его, как это, где json является JSONObject:

asyn.execute(url, json.toString()); 

Тогда вы бы doInBackground() принять Струнный varargs:

class Asyn extends AsyncTask<String, Void, Void> { 
    @Override 
    protected Void doInBackground(String... arg0) { 
     String url = arg0[0]; 
     String json = arg0[1]; 
     JSONObject obj = new JSONObject(json); 
    } 
} 

Если вы действительно хотите использовать Bundle , вы бы назвали это так, как сейчас:

Bundle bundle = new Bundle(); 
bundle.putString("url", url); 
bundle.putString("json",json.toString()); 
//inte.putExtras(bundle); //not needed 
asyn.execute(bundle); 

Затем сделайте doInBackground() принять Bundle varargs:

class Asyn extends AsyncTask<Bundle, Void, Void> { 
    @Override 
    protected Void doInBackground(Bundle... arg0) { 
     Bundle b = arg0[0]; 
     String url = b.getString("url"); 
     String json = b.getString("json"); 
     JSONObject obj = new JSONObject(json); 
    } 
} 

Кроме того, вы не должны пытаться захватить возвращаемое значение из AsyncTask. Если AsyncTask является подклассом Activity, тогда вы можете просто установить значение в onPostExecute() и вызвать метод в прилагаемом к нему действии.

Для других способов сделать это, see this post.

0

Я хотел бы сделать интерфейс в вашей AsyncTask, который затем реализуется объектом, вызывающим его. После завершения работы AsyncTask он может вызвать интерфейс, который был реализован вызывающим объектом. Таким образом вы можете передать ответ JSON.

Edit: Here's полный пример на SO с фрагментами кода о том, как это сделать.

Другой Edit: Чтобы передать пакет к вашему AsyncTask вы могли бы реализовать что-то вроде следующего:

public class YourAsyncTask extends AsyncTask<Object, Void, Void> { 
    @Override 
    protected Void doInBackground(Object... params) 
    { 
     Bundle dataForPost = (Bundle)params[0]; 
     String url = dataForPost.getString("url"); 
     String jsonString = dataForPost.getObject("json"); 
     /* 
      your http post code here 
     */ 
    } 
} 
+0

любой ключ об использовании пучка ?? – AkshayKinhikar

+0

Я хочу передать объект json и URL-адрес запроса POST – AkshayKinhikar