بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

مشکل در استفاده چند باره از یک کلاس (حل شد)

مدیریت گفتگو
doost_fu 9 سال پیش
آخرین تغییر: 9 سال پیش

سلام
من از طریق کدی زیر یک متن از سرور میگیرم و داخل TextView نشون میدم
در هنگام صدا زدن این کد ، ما فقط یه لینک بهش میدیم و اونم متن میگیره و روی TextView نشون میده
حالا اگه بخوام متن دوم بگیرم میتونم دوباره کد با لینک جدید صدا بزنم ولی مشکل اینجاست که متن روی همون TextView نشون میده
چجوری باید این کد تغییر داد تا موقع صدا زدن بهش یه TextView هم معرفی کنم
تا نیاز به نوشتن چندباره کدهای زیر برای متن های دوم و سوم ... نباشه ؟
ممنون

اینجا صدا زده میشه :

TextW01 W01 = new TextW01();
W01.execute("http://******/*****/***/****.html");

و از طریق کد زیر دریافت و نشون داده میشه :

private class TextW01 extends AsyncTask<String, Integer, Void> {
String text = "";
protected Void doInBackground(String... params) {
URL url;
try {
url = new URL(params[0]);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
InputStream is = con.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line;
while ((line = br.readLine()) != null) {
text += line;
}
br.close();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Void result) {
String htmlCode = text;
Spanned spa = Html.fromHtml(htmlCode);
txtNewsW01.setText(spa);
}
}

 

نظرات

sh.khaksar 9 سال پیش
میتونید از یک AsyncTask دیگه استفاده کنید که یک راه حل موقتی هست ولی تمیز نیست.
doost_fu 9 سال پیش
ممنون منم همین کارو انجام دادم ولی چون تعداد ممکنه به 10 یا بیشتر هم برسه دنبال راه حلش هستم تا کد دوباره نوشته نشه !
sh.khaksar 9 سال پیش
بهتره از Java CallBack ها استفاده کنید. یعنی یک Interface بسازید بین Activity و AsynkTask.موقع نیاز اکتیویتی بیاد AsynkTask رو صدا بزنه. وقتی نتیجه تمام شد AsynkTask نتیجه رو برگردونه.
doost_fu 9 سال پیش
ممنون ولی نمی خوام زیاد پیچیده بشه این روشی هم که گفتید اشنایی ندارم ... راستش چند وقت از برنامه نویسی دور بودم .
حمید 9 سال پیش
برای کلاس یک کانستراکتور تعریف کنید و تکست ویو مورد نظر رو از طریق کانستراکتور به کلاس پاس بدیو و عملیات رو روش انجام بدید.
doost_fu 9 سال پیش
اگه میشه لطف کنید با استفاده از کد بالا مثال بزنید ممنون

پاسخ‌ها 1

مشاهده پاسخ صحیح
حمید 9 سال پیش

 پاسخ صحیح
 
TextView txtSample = .......;
....
....
....
TextW01 W01 = new TextW01(txtSample);
W01.execute("http://******/*****/***/****.html");




private class TextW01 extends AsyncTask<String, Integer, Void>{
TextView txtInput;

public TextW01(TextView txtInput){
this.txtInput = txtInput;
}

String text = "";
protected Void doInBackground(String... params) {
URL url;
try {
url = new URL(params[0]);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
InputStream is = con.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line;
while ((line = br.readLine()) != null) {
text += line;
}
br.close();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Void result) {
String htmlCode = text;
Spanned spa = Html.fromHtml(htmlCode);
txtInput.setText(spa);
}
}

نظرات

doost_fu 9 سال پیش
خیلی ممنون خیلی خوب جواب داد موفق باشید .

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .