Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2012, 18:38   #1
Night_Devil
Пользователь
 
Регистрация: 06.12.2010
Сообщений: 18
По умолчанию Оператор if работает некорректно

Доброго вечера!
Столкнулся с проблемой. В AsyncTask, в методе onPostExecute некорректно срабатывает оператор if. Тоесть результат сравнения в условии должен быть true, а он false, несмотря на то, что он должен выдавать True
Код:
Код:
package com.gilevich.library;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLConnection;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.ProgressBar;

public class MainActivity extends Activity {
	String[] books, desc, img, free, full, name;
	DownloadFile downloadFile;
	ProgressBar p1;
	int ct = 0;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		p1 = (ProgressBar) findViewById(R.id.progressBar1);
		downloadFile = new DownloadFile();
		downloadFile.execute("http://lib.gilevich.net/Books.txt");
	}

	void get_info() {
		BufferedReader br;
		for (int i = 0; i < books.length; i++) {

			try {
				br = new BufferedReader(new InputStreamReader(
						new FileInputStream("/sdcard/" + get_name(books[i])),
						"Cp1251"));
				String str;
				int a = 0;
				while ((str = br.readLine()) != null) {
					switch (a) {
					case 0:
						name[i] = str;
						break;
					case 1:
						desc[i] = str;
						break;
					case 2:
						img[i] = str;
						break;
					case 3:
						free[i] = str;
						break;
					case 4:
						full[i] = str;
						break;
					}
					a++;
				}
				br.close();
			} catch (UnsupportedEncodingException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		p1.setVisibility(4);
	}

	void get_books() {
		BufferedReader br;
		try {
			Log.d("i1", "pre2");
			br = new BufferedReader(new InputStreamReader(new FileInputStream(
					"/sdcard/Books.txt"), "Cp1251"));
			Log.d("i1", "pre3");
			String str;
			int i = 0;
			while ((str = br.readLine()) != null) {
				i++;
			}
			Log.d("i1", "pre3");
			books = new String[i];
			desc = new String[i];
			img = new String[i];
			free = new String[i];
			full = new String[i];
			name = new String[i];
			Log.d("i1", "pre3");
			for (int j = 0; j < i; j++) {
				books[j] = br.readLine();
				downloadFile.execute(br.readLine());
			}
			br.close();
			Log.d("i1", "pre5");
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		// ret_res();
	}

	String get_name(String path) {
		String val = path;
		return (val.substring(val.lastIndexOf('/') + 1, val.length()));
	}
}

class DownloadFile extends AsyncTask<String, Integer, String> {
	MainActivity ma = new MainActivity();
	String cur_file;

	@Override
	protected String doInBackground(String... sUrl) {
		try {
			URL url = new URL(sUrl[0]);
			cur_file = sUrl[0];
			Log.d("i1", cur_file);
			Log.d("i1", ma.get_name(sUrl[0]));
			URLConnection connection = url.openConnection();
			connection.connect();
			InputStream input = new BufferedInputStream(url.openStream());
			OutputStream output = new FileOutputStream("/sdcard/"
					+ ma.get_name(sUrl[0]));
			Log.d("i1", "precre");
			byte data[] = new byte[1024];
			long total = 0;
			int count;
			while ((count = input.read(data)) != -1) {
				total += count;
				output.write(data, 0, count);
			}
			Log.d("i1", "aft");
			output.flush();
			output.close();
			input.close();
			Log.d("i1", "aftall");
		} catch (Exception e) {
		}
		return null;
	}

	@Override
	protected void onPostExecute(String result) {
		// TODO Auto-generated method stub
		super.onPostExecute(result);
		File file = new File(cur_file);
		cur_file = file.getName();
		Log.d("i1", "'" + cur_file + "'");
	//тут срабатывает неправильно 	if (cur_file == "Books.txt") {
			Log.d("i1", "post");
			ma.get_books();
		} else {
			Log.d("i1", "true");
			ma.ct++;
			Log.d("i1", "inc");
			if (ma.ct == ma.books.length) {
				Log.d("i1", "inc");
				ma.get_info();
			}
			Log.d("i1", "succ");
		}
	}
}
Вот лог:
11-26 17:28:19.444: http://lib.gilevich.net/Books.txt
11-26 17:28:19.645: Books.txt
11-26 17:28:20.015: precre
11-26 17:28:20.025: aft
11-26 17:28:20.025: aftall
11-26 17:28:20.025: 'Books.txt'
11-26 17:28:20.025: true
11-26 17:28:20.025: inc
Почему он неправильно выдаёт результат сравнения?

Последний раз редактировалось Night_Devil; 26.11.2012 в 18:42.
Night_Devil вне форума Ответить с цитированием
Старый 04.12.2012, 11:49   #2
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

if (cur_file.equals("Books.txt"))
Carbon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Некорректно работает программа. JIOBEJIAC Помощь студентам 0 19.12.2011 20:47
некорректно работает WaitForMultipleObjects bazilior Общие вопросы C/C++ 2 17.04.2010 20:15
float в ие-6 работает некорректно cratte HTML и CSS 3 17.02.2010 08:50
Некорректно работает запрос Arkuz БД в Delphi 9 20.08.2009 07:04
IdHTTP1 некорректно работает nike-p Работа с сетью в Delphi 9 23.07.2008 23:13