View Full Version : مشکل با SetText در Thread
nasr
چهارشنبه 06 مرداد 1395, 14:32 عصر
سلام
آقا من یه مشکلی دارم که چند روزه نتونستم این مشکل را حل کنم
یه Thread دارم که یه مقداری را از وب سرویس میگیره
حالا میخوام این مقدار را بریزم داخل یه TextView هر کاری میکنم نمیشه
txtv.setText(name);
ممنون میشم اگه اکسی میدونه مشکل چیه راهنمایی کنه
private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rest);
context = this;
Button btn = (Button) findViewById(R.id.btn1);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final List<NameValuePair> lstParams = new ArrayList<>();
lstParams.add(new BasicNameValuePair("UserName", "nasr"));
lstParams.add(new BasicNameValuePair("Password", "123"));
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
RestHelper mRestHelper = new RestHelper(context);
String Json = mRestHelper.getJsonData("http://androidws01.sgpco.com/service.asmx/Login", "POST", lstParams);
String s = "Hell";
try {
JSONArray jsonArray = new JSONArray(Json);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = (JSONObject) jsonArray.get(i);
TextView txtv = (TextView) findViewById(R.id.txt1);
String name = jsonObject.getString("LName");
////// این خط اعمال نمیشه
txtv.setText(name);
}
} catch (JSONException e) {
}
}
});
thread.start();
}
});
}
c0mmander
چهارشنبه 06 مرداد 1395, 14:46 عصر
بخاطر اینکه thread شما non ui thread هست از کد زیر برای تغییر بروی ui استفاده کنید:
runOnUiThread(new Runnable() {
@Override
public void run() {
txtv.setText(name);
}
});
nasr
چهارشنبه 06 مرداد 1395, 14:59 عصر
بخاطر اینکه thread شما non ui thread هست از کد زیر برای تغییر بروی ui استفاده کنید:
runOnUiThread(new Runnable() {
@Override
public void run() {
txtv.setText(name);
}
});
با این روش هم نوشتم ولی انجام نمیشه
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rest);
context = this;
Button btn = (Button) findViewById(R.id.btn1);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final List<NameValuePair> lstParams = new ArrayList<>();
lstParams.add(new BasicNameValuePair("UserName", "nasr"));
lstParams.add(new BasicNameValuePair("Password", "123"));
runOnUiThread(new Runnable() {
@Override
public void run() {
RestHelper mRestHelper = new RestHelper(context);
String Json = mRestHelper.getJsonData("http://androidws01.sgpco.com/service.asmx/Login", "POST", lstParams);
String s = "Hell";
try {
JSONArray jsonArray = new JSONArray(Json);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = (JSONObject) jsonArray.get(i);
TextView txtv = (TextView) findViewById(R.id.txt1);
String name = jsonObject.getString("LName");
txtv.setText(name);
String x2 = name;
}
} catch (JSONException e) {
}
}
});
}
});
}
c0mmander
چهارشنبه 06 مرداد 1395, 15:58 عصر
private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rest);
context = this;
Button btn = (Button) findViewById(R.id.btn1);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final List<NameValuePair> lstParams = new ArrayList<>();
lstParams.add(new BasicNameValuePair("UserName", "nasr"));
lstParams.add(new BasicNameValuePair("Password", "123"));
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
RestHelper mRestHelper = new RestHelper(context);
String Json = mRestHelper.getJsonData("http://androidws01.sgpco.com/service.asmx/Login", "POST", lstParams);
String s = "Hell";
try {
JSONArray jsonArray = new JSONArray(Json);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = (JSONObject) jsonArray.get(i);
TextView txtv = (TextView) findViewById(R.id.txt1);
String name = jsonObject.getString("LName");
////// این خط اعمال نمیشه
//////txtv.setText(name);
runOnUiThread(new Runnable() {
@Override
public void run() {
txtv.setText(name);
}
});
}
} catch (JSONException e) {
runOnUiThread(new Runnable() {
@Override
public void run() {
txtv.setText("Error!");
}
});
}
}
});
thread.start();
}
});
}
اینجا میتونید سایر متد های run on ui thread رو ببیند:
http://omtlab.com/run-on-ui-thread-in-android/
nasr
چهارشنبه 06 مرداد 1395, 18:16 عصر
تشکر از شما
من میخوام همین کد را تبدیل به یه method کنم بصورتی که یک String بگیره و یه String برگردونه
ببینید این کد را نوشتم برای Method
public String rate(String dt) { final StringBuilder sb = new StringBuilder();
runOnUiThread(new Runnable() {
public void run() {
try {
final List<NameValuePair> lstParams = new ArrayList<>();
lstParams.add(new BasicNameValuePair("UserName", "nasr"));
lstParams.add(new BasicNameValuePair("Password", "123"));
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
RestHelper mRestHelper = new RestHelper(context);
String Json = mRestHelper.getJsonData("http://androidws01.sgpco.com/service.asmx/Login", "POST", lstParams);
String s = "Hell";
try {
JSONArray jsonArray = new JSONArray(Json);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = (JSONObject) jsonArray.get(i);
final String name = jsonObject.getString("LName");
runOnUiThread(new Runnable() {
@Override
public void run() {
sb.append(name);
}
});
}
} catch (JSONException e) {
runOnUiThread(new Runnable() {
@Override
public void run() {
}
});
}
}
});
thread.start();
} catch (Exception e) {
}
}
});
return sb.toString();
}
و مثلا وقتی از این کد استفاده میکنم خروجی نمیده
Button btn = (Button) findViewById(R.id.btn1); btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String a = rate("test");
String b =a;
}
});
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.