在同一个线程中运行,但是CalledFromWrongThreadexception

时间:2015-12-14 22:11:31

标签: java android multithreading android-studio

编译器说ppp只能被创建它的线程触及,尽管它已在上面创建了一行。 可能是什么问题?

public void init(){
    new Thread(new Runnable() {
        @Override
        public void run() {
            try{
                elet = 10;
                InetAddress addr;
                Socket sock = new Socket("46.101.150.158", 1035);
                addr = sock.getInetAddress();
                DataOutputStream ki = new DataOutputStream(sock.getOutputStream());
                ki.write('a');
                ki.flush();
                final BufferedReader be = new BufferedReader(new InputStreamReader(sock.getInputStream()));
                lekert = String.valueOf(be.readLine());
                Log.d("Szo",lekert);
                kiir = "";
                word = lekert;
                tomb = new Boolean[lekert.length()-1];
                for(int i = 0; i < lekert.length()-1;++i){
                    tomb[i] = false;
                }
                tomb[0] = true;
                tomb[lekert.length()-2] = true;
                for(int i = 0 ; i < lekert.length()-1;++i){
                    if(tomb[i]){
                        kiir += lekert.charAt(i);
                    }else{
                        kiir += '_';
                    }
                }
                TextView ppp = (TextView)findViewById(R.id.textView);
                ppp.setText(kiir);
                Button check = (Button)findViewById(R.id.button);
                if(elet == 0){
                    check.setVisibility(View.INVISIBLE);
                }

2 个答案:

答案 0 :(得分:2)

  

尽管它已在

上面创建了一行

不,它没有。你打电话给findViewById()findViewById()不会创建任何内容。它从现有的视图层次结构中找到小部件。该视图层次结构是在其他位置创建的(例如,setContentView()您活动的onCreate()方法中的AsyncTask

切换为使用onPostExecute()(使用TextView中的小部件更新代码)或以其他方式安排更新主应用程序主题上的Button和{{1}}。< / p>

答案 1 :(得分:0)

如果你想调用ui方法,你必须调用$scope.todoList = []; if (localStorage.getItem("mytodos") === null) { localStorage.setItem("mytodos", angular.toJson($scope.todoList)); } else { $scope.todoList = angular.fromJson(localStorage.getItem("mytodos")); } 。所以尝试从这个

改变它
runOnUiThread

到这个

TextView ppp = (TextView)findViewById(R.id.textView);
ppp.setText(kiir);
Button check = (Button)findViewById(R.id.button);
if(elet == 0){
    check.setVisibility(View.INVISIBLE);
}