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));