public class MainActivity extends ActionBarActivity
{
public String inputLine="스트링초기값";
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
t1 = (TextView) findViewById(R.id.textbar);
new Thread(new Runnable()
{
public void run() {
스트링변경함수();
}
}).start();
t1.setText(inputLine);
}
public void 스트링변경함수()
{
inputLine="변경할스트링값";
}
}
초기에 public string에 "초깃값" 을 저장한뒤
쓰레드 형식으로 스트링 변경함수를 실행하여 string에 변경할 스트링값을 입력합니다
그후
t1.setText에 변경되어야할 스트링값을 입력하는 간단한 함수입니다.
그런데 setText를 하면 쓰레드를 이용한 함수?? 를 불러온 뒤 그 값을 리턴을 못하는것같아서 어떻게 해야하는지 질문드립니다.
이게 하고자하는 질문의 핵심이구요
요약
쓰레드를 이용하여 스트링값을 받는다
그 스트링값을 setText 를 사용하여 텍스트뷰의 글자를 바꾼다
실제 코드는
public class MainActivity extends ActionBarActivity
{
public TextView t1;
public String inputLine="퍼블릭스트링";
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
base1 = (Button) findViewById(R.id.base1);
t1 = (TextView) findViewById(R.id.textbar);
t1.setText(inputLine);
new Thread(new Runnable(){
public void run() {
URLConnectionReader();
}
}).start();
t1.setText(inputLine);
}
public void URLConnectionReader()
{
try {
URL url = new URL("http://192.168.0.2/zuso.html");
URLConnection connection = url.openConnection();
InputStream is = connection.getInputStream();
InputStreamReader isr = new InputStreamReader(is, "UTF-8");
BufferedReader br = new BufferedReader(isr);
inputLine = br.readLine();
t1.setText(inputLine) // 여기서 UI를 건들면 오류가 나서 어찌할지를 모르겠습니다
}
catch (Exception e)
{
Log.e("URLError", e.getMessage());
}
}
이고 하고자하는건 서버에서 스트링값을 받은뒤 그 값을이용해 UI에 textview에 받은 값을 넣는것입니다
쓰레드를 이용하여 사용할경우
Only the original thread that created a view hierarchy can touch its views.
내부에서 UI변경이 안된다하여 어찌 할지 잘 모르겠습니다..ㅠㅠ
답변해주시면 감사하겠습니다 ㅠㅠ