Android TextView不更新

Android TextView不更新,android,multithreading,Android,Multithreading,我知道这类问题很多,但这是我的问题。 我有一个包含图像的图库,当我单击时,会有一个ImageView在图库中显示所选图像。 我还有一个TextView开关显示消息。 单击库中的图像时,我的ImageView会获取图像,而TextTiew不会更新其数据。 我尝试将代码放入try/catch块中,它不会引发任何异常。 在我的日志中,TextView包含我提供的确切文本。 我尝试使用一个新线程,但结果是一样的:TextView不更新,而我的ImageView更新。 我试过使用runOnUiThread

我知道这类问题很多,但这是我的问题。
我有一个包含图像的图库,当我单击时,会有一个
ImageView
在图库中显示所选图像。
我还有一个
TextView
开关显示消息。
单击库中的图像时,我的
ImageView
会获取图像,而
TextTiew
不会更新其数据。
我尝试将代码放入
try/catch
块中,它不会引发任何异常。
在我的日志中,TextView包含我提供的确切文本。
我尝试使用一个新线程,但结果是一样的:
TextView
不更新,而我的
ImageView
更新。
我试过使用
runOnUiThread
(据我所知,它与
线程
相同),但仍然没有任何效果。
我也从
TextView
更改为
EditText
,但我也有同样的问题。
每个人都说:“使用线程”-我这样做了,但它不起作用。
我没有主意了

public class VODInterface extends Activity {

public static String[] values;

private static int itemPosition;

public static Activity thisActivity;

public Gallery gallery;
public ListView listView;
public LinearLayout MovieView;
public ImageView imgview;

public boolean submenus=false;
public boolean listviewVisibility = true;

private Handler handler = new Handler() ;

private SharedPreferences ep;

public ArrayList<VODObject> vod;
private ArrayList<Bitmap> tempimg;

private static int MovieSetNumber = 1;

public static int VODIndexPosition = 0;

public VODInterface(){

}
public void onDestroy(){
    MainActivity.inChild=false;
    super.onDestroy();  
}
public void onCreate(Bundle bundle){
    super.onCreate(bundle);

    this.setContentView(R.layout.listview2);

    ep = getSharedPreferences("Settings", 0);

    listView = (ListView) this.findViewById(R.id.listView1);

    MovieView = (LinearLayout) this.findViewById(R.id.movieView);

    imgview = (ImageView)this.findViewById(R.id.imageView2);

    // Defined Array values to show in ListView
    values = new String[] { "A..Z",
                                     "Category",
                                     "Most Rated", 
                                     "Most Watched", 
                                     "Recently"
                                    };


    //this shows whitch movie should me load images
    //we show always only 10 movies
    MovieSetNumber = 1;
    // Define a new Adapter
    // First parameter - Context
    // Second parameter - Layout for the row
    // Third parameter - ID of the TextView to which the data is written
    // Forth - the Array of data

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
      android.R.layout.simple_list_item_1, android.R.id.text1, values);

    // Assign adapter to ListView
    listView.setAdapter(adapter); 

    // ListView Item Click Listener
    listView.setOnItemClickListener(new OnItemClickListener() {

          @Override
          public void onItemClick(AdapterView<?> parent, View view,
             int position, long id) {

           // ListView Clicked item index
              itemPosition = position;
           handler.post(goDeep);

          }

     }); 
}

private Runnable goDeep = new Runnable(){

    public void run(){
        new goDeep().execute("");
    }
};
class goDeep extends AsyncTask<String, String, String>{
    ProgressDialog mProgressDialog = new ProgressDialog(VODInterface.this);
    String result="";
    boolean failLoadVOD=false;

    protected void onPreExecute(){
        mProgressDialog.setMessage(getString(R.string.downloading));
        mProgressDialog.setIndeterminate(true);
        mProgressDialog.setCancelable(false);
        mProgressDialog.show();
    }
    @Override
    protected String doInBackground(String... arg0) {
        // TODO Auto-generated method stub

        //START check if servers are Ok
        if(!Server.isOnline()){
            Server.getAvailableServer();
            Log.i("good", "");
        }

        if(!Server.isOnline()){
            Log.i("WEW", "SERVERS are off");
            return null;
        }
        //END check if servers are Ok


        //START synchronize local database with online database
        try{

            if(ep.contains("downloaded")){
                Log.i("localDatabase", "is full");
            }
            else{
                Editor ed = ep.edit();
                ed.putString("downloaded", "");
                ed.commit();

                //load data from database
                if(!MainActivity.web.parseVODAndVODCategories()){
                    failLoadVOD=true;
                }
            }

        }
        catch(NullPointerException ee)      
        {
            //lets go get datas from Tibodatabase
            Editor ed = ep.edit();
            ed.putString("downloaded", "");
            ed.commit();

            if(!MainActivity.web.parseVODAndVODCategories()){
                failLoadVOD=true;
            }   

        }
        //END synchronize local database with online database


        //START handle menus 
        if(!submenus)                       //MainMenu
        {
            if(itemPosition == 1){
                //get all movies ordered by name
                List<String> val = MainActivity.voddb.selectAllCategories();
                values = new String[val.size()+1];
                values[0] ="[...]";
                for(int i=0;i<val.size();i++){
                    values[i+1] = val.get(i);
                }
                listviewVisibility = true;
            }
            else{
                //show movies
                listviewVisibility = false;
            }
            submenus = true;

        }
        else{
            if(itemPosition == 0){
                values = new String[] { "A..Z",
                        "Category",
                        "Most Rated", 
                        "Most Watched", 
                        "Recently"
                       };
                submenus = false;
                listviewVisibility = true;
            }
            else{
                listviewVisibility = false;
            }
        }
        //END handle menu

        if(!listviewVisibility){
            getData();
            for(int i=0;i<vod.size();i++){
                if(!FileExciste(vod.get(i).Icon)){
                    try{
                        Bitmap bmp ;
                        URL newurl = new URL(vod.get(i).Icon); 
                        bmp = BitmapFactory.decodeStream(newurl.openConnection() .getInputStream());
                        saveImageToSD(bmp,vod.get(i).Icon);
                        Log.i(i+"", "done");
                    }
                    catch(Exception e){
                        Log.i("exciste", "exciste");
                    }
                }
                else{
                    Log.i(i+"", "exciste");
                }

            }

        }
        runOnUiThread(new Runnable() {
             @Override
             public void run() {
                    if(!listviewVisibility){
                        listView.setVisibility(View.GONE);
                        MovieView.setVisibility(View.VISIBLE);
                        populateMovieView();
                    }
                    else{
                            ArrayAdapter<String> adapter = new ArrayAdapter<String>(VODInterface.this,
                            android.R.layout.simple_list_item_1, android.R.id.text1, values);

                            listView.setAdapter(adapter); 
                    }

            }
        });


        mProgressDialog.dismiss();

        return "";

    }
    protected void onPostExecute(){
        //start adding to cache
        super.onPostExecute("");
    }
}
private void getData(){
    vod = new ArrayList<VODObject>();
    for(int i=1;i<MainActivity.voddb.getVODCount()+1;i++){
        vod.add(MainActivity.voddb.getVOD(i+""));
        if(vod.get(i-1).Icon.contains(" ")){
        vod.get(i-1).Icon = vod.get(i-1).Icon.replaceAll(" ", "%20");
        Log.i("u korrigjua", vod.get(i-1).Icon);
        }

    }

}

    private void populateMovieView(){


gallery = (Gallery) findViewById(R.id.gallery1);

GalleryImageAdapter gia= new GalleryImageAdapter(this,vod);

gallery.setAdapter(gia);

gallery.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View v, final int position, long id)           {
        // show the selected Image


        /*here is the problem
         * 
         *----------------------------/
         */
        try{
            LayoutInflater factory = getLayoutInflater();

            View view = factory.inflate(R.layout.listview2, null);

            EditText title = (EditText) view.findViewById(R.id.editText2);
            title.setText(vod.get(position).title);

            TextView desc = (TextView) view.findViewById(R.id.editText4);
            desc.setText(vod.get(position).description);
            Log.i("info", title.getText()+"    "+desc.getText());
        }

        catch(Exception ee){
            Log.i("info", ee.getMessage()+"    nnn");
        }
        /*----------------------*/
        try{

            imgview.setImageBitmap(getImageFromSD(vod.get(position).Icon));

        }
        catch(Exception ee){
        imgview.setImageResource(R.drawable.untitled);
        }
    }

  });

   }
             public static Bitmap getImageFromSD(String url){
String path = Environment.getExternalStorageDirectory().toString();
File imgFile = new  File(path+"/"+WebHelper.getFilenameFromUrl(url));
    Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
    return myBitmap;

     }
          private void saveImageToSD(Bitmap bmp,String url) throws IOException {

String path = Environment.getExternalStorageDirectory().toString();
OutputStream fOut = null;
File file = new File(path, "/"+WebHelper.getFilenameFromUrl(url));

    fOut = new FileOutputStream(file);

    bmp.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
    fOut.flush();
    fOut.close();

                        MediaStore.Images.Media.insertImage(getContentResolver(),file.getAbsolutePath(),file.getName          (),file.getName());
  }
       private boolean FileExciste(String url){
String path = Environment.getExternalStorageDirectory().toString();
File file = new File(path, "/"+WebHelper.getFilenameFromUrl(url));  
return file.exists();

   }
公共类接口扩展活动{
公共静态字符串[]值;
私有静态位置;
公共静态活动;
公众席;
公共列表视图列表视图;
公共线性布局电影视图;
公共图像视图imgview;
公共布尔子菜单=false;
公共布尔listviewVisibility=true;
私有处理程序=新处理程序();
私人共享参考ep;
公共点播;
私人ArrayList tempimg;
私有静态int MovieSetNumber=1;
公共静态int-vodinexposition=0;
公共接口(){
}
公共空间{
MainActivity.inChild=false;
super.ondestory();
}
创建公共void(Bundle){
super.onCreate(bundle);
这个.setContentView(R.layout.listview2);
ep=GetSharedReferences(“设置”,0);
listView=(listView)this.findViewById(R.id.listView1);
MovieView=(LinearLayout)this.findviewbyd(R.id.MovieView);
imgview=(ImageView)this.findViewById(R.id.imageView2);
//要在ListView中显示的已定义数组值
值=新字符串[]{“A..Z”,
“类别”,
“最受好评”,
“最受关注”,
“最近”
};
//这显示whitch电影应该加载图像
//我们总是只放映10部电影
MovieSetNumber=1;
//定义一个新适配器
//第一个参数-上下文
//第二个参数-行的布局
//第三个参数-写入数据的TextView的ID
//第四,数据数组
ArrayAdapter=新的ArrayAdapter(此,
android.R.layout.simple_list_item_1,android.R.id.text1,值);
//将适配器分配给ListView
setAdapter(适配器);
//ListView项目单击侦听器
setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
//ListView单击的项目索引
项目位置=位置;
经办人岗(戈迪普);
}
}); 
}
private Runnable goDeep=new Runnable(){
公开募捐{
新goDeep().execute(“”);
}
};
类goDeep扩展了异步任务{
ProgressDialog mProgressDialog=新建ProgressDialog(VODInterface.this);
字符串结果=”;
布尔failLoadVOD=false;
受保护的void onPreExecute(){
setMessage(getString(R.string.downloading));
mProgressDialog.setUndeterminate(true);
mProgressDialog.setCancelable(假);
mProgressDialog.show();
}
@凌驾
受保护的字符串doInBackground(字符串…arg0){
//TODO自动生成的方法存根
//开始检查服务器是否正常
如果(!Server.isOnline()){
getAvailableServer();
Log.i(“好的”,“好的”);
}
如果(!Server.isOnline()){
Log.i(“WEW”,“服务器关闭”);
返回null;
}
//结束检查服务器是否正常
//开始将本地数据库与联机数据库同步
试一试{
如果(ep.包含(“下载”)){
Log.i(“localDatabase”,“已满”);
}
否则{
Editor ed=ep.edit();
ed.putString(“已下载的”);
ed.commit();
//从数据库加载数据
如果(!MainActivity.web.parseVODAndVODCategories()){
failLoadVOD=true;
}
}
}
捕获(NullPointerException ee)
{
//让我们从Tibodatabase获取数据
Editor ed=ep.edit();
ed.putString(“已下载的”);
ed.commit();
如果(!MainActivity.web.parseVODAndVODCategories()){
failLoadVOD=true;
}   
}
//结束将本地数据库与联机数据库同步
//开始句柄菜单
如果(!子菜单)//主菜单
{
if(itemPosition==1){
//按名称订购所有电影
List val=MainActivity.voddb.selectAllCategories();
值=新字符串[val.size()+1];
值[0]=“[…]”;

对于(int i=0;i将文本视图声明为与ImageView类似的字段--“imgview”,如下所示

public ImageView imgview;
public TextView title;
public TextView desc;
gallery.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View v, final int position, long id)           {

        title.setText(vod.get(position).title);

        desc.setText(vod.get(position).description);
        Log.i("info", title.getText()+"    "+desc.getText());

        imgview.setImageBitmap(getImageFromSD(vod.get(position).Icon)); 

    }
});
在创建方法中将它们初始化为“imgview”

并更新您的gallery.setOnItemClickListener代码,如下所示

public ImageView imgview;
public TextView title;
public TextView desc;
gallery.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View v, final int position, long id)           {

        title.setText(vod.get(position).title);

        desc.setText(vod.get(position).description);
        Log.i("info", title.getText()+"    "+desc.getText());

        imgview.setImageBitmap(getImageFromSD(vod.get(position).Icon)); 

    }
});
gallery.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图v、最终整型位置、长id){
title.setText(vod.get(position.title));
desc.setText(vod.get(position.description));