2017-09-30 5 views
1

Je dois passer une chaîne à AsyncTask en prenant une entrée de MainActivity pour mettre cette chaîne à une URL qui est présente dans la tâche AsyncTask. J'ai deux activités, l'une est MainActivity et l'autre est l'activité de fetchData. Mon code MainActivity:Obtention d'une chaîne de la fonction principale à une activité qui étend AsyncTask, en utilisant edittext

public class MainActivity extends AppCompatActivity { 
Button click; 
EditText text; 
public static TextView data; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    click = (Button) findViewById(R.id.button); 
    data = (TextView) findViewById(R.id.fetcheddata); 
    text = (EditText) findViewById(R.id.editText); 
    String theText = text.getText().toString(); 
    click.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) {fetchData process = new fetchData();process.execute();}});}} 

Et mon fetchData Code d'activité va comme ceci:

public class fetchData extends AsyncTask<Void,Void,Void> { 
String data =""; 
String dataParsed = ""; 
String singleParsed =""; 
String uriString; 
@Overrideprotected Void doInBackground(Void... voids) { 
    try { 
     URL url = new URL("http://fuelpriceindia.herokuapp.com/price?city=mumbai"); 
     HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); 
     InputStream inputStream = httpURLConnection.getInputStream(); 
     BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); 
     String line = ""; 
     while(line != null){ 
      line = bufferedReader.readLine(); 
      data = data + line;} 
     JSONObject JO = new JSONObject(data); 
     }} 
     catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    }return null;}@Override protected void onPostExecute(Void aVoid){super.onPostExecute(aVoid);MainActivity.data.setText(this.dataParsed);}}` 

Je veux passer une chaîne pour obtenir un nom de ville dans l'url URL url = new URL("http://fuelpriceindia.herokuapp.com/price?city=mumbai"); ville = tout nom de la ville a à partir du texte d'édition.

+0

double possible de [Comment passer des variables dans et hors de AsyncTasks?] (Https://stackoverflow.com/questions/9900834/how-to-pass-variables-in-and-out-of-asynctasks) – nomag

Répondre

1

Il existe plusieurs façons de transmettre des données à AsyncTask.

  1. créer un constructeur avec le paramètre dans votre AysncTask comme -

    public void fetchData(String city) { 
    
        } 
    
  2. valeur passe dans le paramètre de AsyncTask comme -

    fetchData process = new fetchData(); 
    process.execute(text.getText().toString()); // Pass parameter 
    

Dans votre AsyncTask obtenir cette valeur

@Override 
protected Void doInBackground(String...params) 
{ 
    String cityName = params[0]; 
    try { 
    URL url = new URL("http://fuelpriceindia.herokuapp.com/price?city="+cityName); 
     ....... 

} 

Assurez-vous de convertir votre

public class fetchData extends AsyncTask<Void,Void,Void> 

dans

public class fetchData extends AsyncTask<String,Void,Void> 
+0

Merci beaucoup. Cela a sauvé ma journée. Tu es juste génial. –

+0

Cela pourrait être une question idiote, mais comment puis-je faire cela @Rahul –

+0

Oh got it @Rahul –