2012-02-19 3 views
1

"보기 계층 구조를 만든 원래 스레드 만 해당 뷰를 만질 수 있습니다." 왜냐하면 나는 "onUtteranceCompleted"를 사용하면서 Text-to-speech를 사용하고 내부에서 TextView를 호출하기 때문입니다.TTS (text-to-speech) 오류 : "보기 계층 구조를 만든 원래 스레드 만 해당보기를 만질 수 있습니다."

public class MyActivity extends Activity implements OnInitListener, OnUtteranceCompletedListener { 

private TextView txtCurrentWord; 

public void onCreate(Bundle savedInstanceState) { 
    ... 
    this.txtCurrentWord = (TextView) findViewById(R.id.txtCurrentWord); 
} 

public void onUtteranceCompleted(String uttId) { 
    this.txtCurrentWord.setText("hello world"); 
} 

} 

사람이 오류를하시기 바랍니다 방지하는 방법을 아는 분 : 여기

내 코드의 일부인가?

+0

에서 찾을 수 있습니다; 'this'없이. – Urban

+0

아니요 같은 오류가 아님 : ( – xtrimsky

답변

3

여기 당신을 위해 일 수있는 솔루션입니다 감사합니다

private Handler viewHandler; 

public void onCreate(Bundle savedInstanceState) { 
    ... 
    viewHandler = new Handler(); 
    ... 

... 

public void onUtteranceCompleted(String uttId) { 
    Runnable run = new Runnable() { 
     public void run() { 
      txtCurrentWord.setText("hello world"); 
     } 
    }; 
    viewHandler.post(run); 
} 

그래서 당신은 당신의보기가 원래의 스레드에 의해 접촉되는 것을 보장합니다.

0

솔루션의 좋은 부분은 (에 "Hello World") txtCurrentWord.setText을 시도 http://www.helloandroid.com/tutorials/using-threads-and-progressdialog

package any....; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Context; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.widget.LinearLayout; 
import android.widget.TableLayout; 
import android.widget.TableRow; 
import android.widget.TextView; 

public class CopyOfActivityConfigs extends Activity implements Runnable 
{ 
    Context context = this; 
    public static ProgressDialog progressSpinner; 
    public   TableLayout  tableLayoutAppsProtect; 
    public   TableLayout  tableLayoutAppsProtectIn; 

    final Handler handler = new Handler() 
    { 
     @Override 
     public void handleMessage(Message message) 
     { 
     String sResult = (String) message.obj; 
     if((sResult != null) && (sResult != "")) 
      { 
      tableLayoutAppsProtect = (TableLayout) findViewById(R.id.tableLayoutAppsProtect); 
      tableLayoutAppsProtect.addView(tableLayoutAppsProtectIn); 
      if(progressSpinner != null) progressSpinner.dismiss(); 
      } 
     return; 
     } 
    }; 


    public void run() 
    { 
     final Message message = handler.obtainMessage(1, fThreadAppsProtectListGenerate(context)); 
     handler.sendMessage(message); 
    } 


    public String fThreadAppsProtectListGenerate(Context context) 
    { 
     tableLayoutAppsProtectIn = new TableLayout(context); 
     if(tableLayoutAppsProtectIn != null) tableLayoutAppsProtectIn.removeAllViews(); 

      TableRow tableRow = new TableRow(context); 
      LinearLayout linearLayout = new LinearLayout(context); 
      TextView textViewSiteNow = new TextView(context); 
      textViewSiteNow.setText("..."); 
      linearLayout.addView(textViewSiteNow); 
      tableRow.addView(linearLayout); 
      tableLayoutAppsProtectIn.addView(tableRow); 

     if(progressSpinner != null) progressSpinner.dismiss(); 
     return "any"; 
    } 


    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.configappsprotect); 

     progressSpinner = new ProgressDialog(this); 
     progressSpinner.setMessage(getString(R.string.sSpinnerAppsProtectListGenerate)); 
     progressSpinner.show(); 

     Thread thread = new Thread(this); 
     thread.start(); 
    } 
} 
+1

답을 찾아서 답을 작성한 후 참조 용으로 만 사용하십시오 .. –

+0

링크 내용을 요약하여 보내 주시면 간단히 링크를 게시하는 것이 도움이되지 않습니다. – LittleBobbyTables

+0

내 코드를 추가하십시오, 위를 참조하십시오 –

관련 문제