0

「Buscar」(ポルトガル語から: 検索) ボタンをクリックすると、実行時に mysql データベースのデータをスピナーに入力しようとしていますが、このボタンをクリックすると、「android.view.ViewRootImpl」という例外が発生します。 $CalledFromWrongThreadException: ビュー階層を作成した元のスレッドのみがそのビューにアクセスできます。"

マイコード

btnBuscarProduto.setOnClickListener(new View.OnClickListener() {  
        public void onClick(View v) {
            new Thread(new Runnable() {
                public void run() {
                    Looper.prepare();
                    /*This is a string*/resultadoBusca = buscar(edtBuscaProduto.getText().toString());
                    System.out.println("Resultado da Busca: "+resultadoBusca);
                    if(resultadoBusca.equalsIgnoreCase("Vazio")){
                        Toast toast = Toast.makeText(getActivity(), "Nada Encontrado", Toast.LENGTH_SHORT);
                        toast.show(); 
                    }else{
                        /*This is a List<String>*/listaBusca = makeList(resultadoBusca);
                        System.out.println("Lista da Busca"+listaBusca);
                        ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_dropdown_item, list);
                        spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_item);
                        spnProdutos.setAdapter(spinnerArrayAdapter);

                    }                                             
                }
              }).start();                 
        }
    });

public String buscar(String termo){
String resp = null;
try{
        httpclient = new DefaultHttpClient();
        httppost = new HttpPost("http://192.168.1.101/android/busca.php");
        nameValuePairs = new ArrayList<NameValuePair>(1);
        nameValuePairs.add(new BasicNameValuePair("busca", termo)); 
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));            
        response=httpclient.execute(httppost);           
        ResponseHandler<String> responseHandler = new BasicResponseHandler();
        resp = httpclient.execute(httppost, responseHandler);
    }catch(Exception e){
        Toast toast = Toast.makeText(getActivity(), "Erro: "+e.getMessage(), Toast.LENGTH_SHORT);
        toast.show(); 
    }
return resp;
}

public List<String> makeList(String input){ 
    List<String> list = new ArrayList<String>();
    String[] newArray = input.split("\\|");
    for (int i =0; i<newArray.length; i++){
        list.add(newArray[i].toString());
    }   
    return list;
}  
4

4 に答える 4

0

簡単にするために、次のようにします。

btnBuscarProduto.setOnClickListener(new View.OnClickListener() {  
    public void onClick(View v) {
        new Thread(new Runnable() {
            public void run() {
                Looper.prepare();
                /*This is a string*/resultadoBusca = buscar(edtBuscaProduto.getText().toString());
                System.out.println("Resultado da Busca: "+resultadoBusca);
               MyActivity.this.runOnUiThread(new Runnable(){

                    @Override
                    public void run() {
                        if(resultadoBusca.equalsIgnoreCase("Vazio")){
                            Toast toast = Toast.makeText(getActivity(), "Nada Encontrado", Toast.LENGTH_SHORT);
                            toast.show(); 
                         }else{
                           /*This is a List<String>*/listaBusca = makeList(resultadoBusca);
                           System.out.println("Lista da Busca"+listaBusca);
                           ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_dropdown_item, list);
                           spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_item);
                           spnProdutos.setAdapter(spinnerArrayAdapter);

                        }               
                    }});

            }
          }).start();                 
    }
});
于 2013-11-08T23:57:55.363 に答える