2015-06-22 5 views
0

Я знаю, что это глупый вопрос, но я давно не программировал Java в Android Studio. Так что на самом деле у меня проблема, что я не могу получить возврат из класса в другой. Я пробовал предлагать различные варианты решений, но никто из них не работал. Не знаю, почему. Я ничего не вижу TextView в xml.Android Studio: не удается получить строку возврата из другого класса

Вот MainActivity.java:

public class MainActivity extends ActionBarActivity { 
TextView txt_temp; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    XMLreference(); 
    StringRequest(); 
} 

public void XMLreference(){ 
    txt_temp = (TextView) findViewById(R.id.txt_temp); 
} 

public void StringRequest(){ 
    WebServiceRequest webService = new WebServiceRequest(); 
    String request = webService.main(); 

    txt_temp.setText(request); 
} 

}

А вот WebServiceRequest.java:

public class WebServiceRequest { 
    private static final String username = "*********"; // put your Device Cloud username here 
    private static final String password = "*********"; // put your Device Cloud password here 
    public String responseContent; 

    /** 
    * Run the web service request 
    */ 
    public String main() { 
     HttpsURLConnection conn = null; 

     try { 
      // Create url to the Device Cloud server for a given web service request 
      URL url = new URL("https://devicecloud.digi.com/ws/DataStream/00000000-00000000-********-********/xbee.serialIn"); 
      conn = (HttpsURLConnection) url.openConnection(); 
      conn.setDoOutput(true); 
      conn.setDoInput(true); 
      conn.setRequestMethod("GET"); 

      // Build authentication string 
      String userpassword = username + ":" + password; 

      // can change this to use a different base64 encoder 
      String encodedAuthorization = Base64.encodeToString(userpassword.getBytes(), Base64.DEFAULT).trim(); 

      // set request headers 
      conn.setRequestProperty("Authorization", "Basic " 
        + encodedAuthorization); 

      InputStream is = conn.getInputStream(); 

      Scanner isScanner = new Scanner(is); 
      StringBuffer buf = new StringBuffer(); 
      while (isScanner.hasNextLine()) { 
       buf.append(isScanner.nextLine() + "\n"); 
      } 
      responseContent = buf.toString(); 

      // add line returns between tags to make it a bit more readable 
      responseContent = responseContent.replaceAll("><", ">\n<"); 

      // Output response to standard out 
      // System.out.println(responseContent); 

     } catch (Exception e) { 
      // Print any exceptions that occur 
      e.printStackTrace(); 
     } finally { 
      if (conn != null) 
       conn.disconnect(); 
     } 
     return responseContent; 
    } 
} 

Я уже пытался создать

public void getResponseContent() { 
    return responseContent; 
} 

И получить ting it with

WebServiceRequest webService = new WebServiceRequest(); 
String request = webService.getResponsteContent(); 

Но это тоже не сработало. Я не уверен, но я делаю глупую ошибку, и после нескольких часов программирования я не могу найти ключ к ее решению.

+0

Переименов 'Главный()' в 'getResponsteContent()' –

+0

@MuratK. извините, но это тоже не сработало. Вы имеете в виду это? public void StringRequest() {WebServiceRequest webService = новый WebServiceRequest(); Строковый запрос = webService.getResponseContent(); txt_temp.setText (запрос); } – Steinfeld

+0

Вы уверены, что 'responseContent' не был пустым, т. Е. Вызов веб-службы был успешным? – dejvuth

ответ

0

Хорошо, я не уверен, что вы хотите иметь конструктор, но main() никогда не будет вызван так responseContent всегда пуст.

Чтобы соответствовать код отрезала

WebServiceRequest webService = new WebServiceRequest(); 
String request = webService.getResponsteContent(); 

Измените метод main в WebServiceRequest конструктору как этот

public WebServiceRequest() { .. } // it was String main() before 

Он будет вызван, как только вы экземпляр WebServiceRequest

0

Web запросы должны выполняться из второго потока.

Runnable run = new Runnable() { 
     @Override 
     public void run() { 
      try { 
       //your main method here 
       handler.post(new Runnable() { 
        @Override 
        public void run() { 
          //update your textView here 
        } 

       }); 

      } catch (Exception e) { 

      } 
     } 
    }; 
    Thread thread = new Thread(run); 
    thread.start(); 

Кроме того, вам необходимо переместить код ответа и обновить текст в вашем веб-запросе. Изменения в пользовательском интерфейсе должны быть отправлены в обработчик.

Другой вариант - сделать ваш класс расширенным IntentService. См. Здесь, если вы хотите проверить это.

https://developer.android.com/training/run-background-service/create-service.html

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