2016-10-13 3 views
0

Я хотел бы получить содержимое моей переменной« $ content »в своей деятельности. Но я не знаю, как использовать возвращаемое значение моего doinbackground. Можете ли вы мне помочь? спасибо заранееAsynctask android return contents «doinBackground

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     String restURL = "https://proxyepn-test.epnbn.net/wsapi/epn"; 
     RestOperation test = new RestOperation(); 
     test.execute(restURL); 
    } 

    private class RestOperation extends AsyncTask<String, Void, String> { 

     //final HttpClient httpClient = new DefaultHttpClient(); 
     String content; 
     String error; 
     ProgressDialog progressDialog = new ProgressDialog(MainActivity.this); 
     String data = ""; 
     TextView serverDataReceived = (TextView)findViewById(R.id.serverDataReceived); 
     TextView showParsedJSON = (TextView) findViewById(R.id.showParsedJSON); 

     // EditText userinput = (EditText) findViewById(R.id.userinput); 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 

      progressDialog.setTitle("Please wait ..."); 
      progressDialog.show(); 
     } 

     @Override 
     protected String doInBackground(String... params) { 
      BufferedReader br = null; 

      URL url; 
      try { 
       url = new URL(params[0]); 

       URLConnection connection = url.openConnection(); 
       connection.setDoOutput(true); 

       OutputStreamWriter outputStreamWr = new OutputStreamWriter(connection.getOutputStream()); 
       outputStreamWr.write(data); 
       outputStreamWr.flush(); 

       br = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
       StringBuilder sb = new StringBuilder(); 
       String line = null; 

       while((line = br.readLine())!=null) { 
        sb.append(line); 
        sb.append(System.getProperty("line.separator")); 
       } 

       content = sb.toString(); 

      } catch (MalformedURLException e) { 
       error = e.getMessage(); 
       e.printStackTrace(); 
      } catch (IOException e) { 
       error = e.getMessage(); 
       e.printStackTrace(); 
      } finally { 
       try { 
        br.close(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
      return content; 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      super.onPostExecute(result); 

      progressDialog.dismiss(); 

      if(error!=null) { 
       serverDataReceived.setText("Error " + error); 
      } else { 
       serverDataReceived.setText(content); 

       String output = ""; 
       JSONObject jsonResponse; 

       try { 
        jsonResponse = new JSONObject(content); 

        JSONArray jsonArray = jsonResponse.names(); 

        for (int i = 0; i < jsonArray.length(); i++) { 
         JSONObject child = jsonArray.getJSONObject(i); 

         String name = child.getString("name"); 
         String number = child.getString("number"); 
         String time = child.getString("date_added"); 

         output = "Name = " + name + System.getProperty("line.separator") + number + System.getProperty("line.separator") + time; 
         output += System.getProperty("line.separator"); 
         Log.i("content",content); 

        } 

        showParsedJSON.setVisibility(View.INVISIBLE); 
        showParsedJSON.setText(output); 

       } catch (JSONException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 
} 

ответ

-2
  1. Вы можете напрямую позвонить в метод, который существует в деятельности, от метода onPostExecute из AsyncTask путем передачи «контента» значение.

    @Override 
    
         protected void onPostExecute(String content) { 
    
         Activity.yourMethod(content); 
    
         } 
    
  2. Если вы хотите, чтобы вернуть значение из AsyncTask вы можете использовать

    content = test.execute(url).get(); 
    

, но это не очень хорошая практика AsyncTask, потому что он работает в серийном исполнении. Таким образом, это не соответствует использованию asynctask для палатализации. Потому что get() будет блокировать поток пользовательского интерфейса.

+0

Благодарим за быстрый ответ, но я не понимаю, как это сделать. Вот что я пробовал: –

+0

protected void onPostExecute (String result) { super.onPostExecute (result); MainActivity.returnContent (content); –

+0

private static void returnContent (Строковый результат) { Log.i («результат», результат); } –

Смежные вопросы