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

دریافت اطلاعات json از سرور و نمایش progress bar تا زمان دریافت اطلاعات

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

سلام،

من توی یک بخش از اپ، میخوام با کلیک روی یک دکمه، اپ یک سری اطلاعات json رو از سرور بگیره

و تا این اطلاعات دریافت میشن، یک prgress bar ساده نمایش داده بشه و وقتی دریافت شد progress bar هیدن بشه و اطلاعات نمایش داده بشن.

چطوری باید این رو بنویسم؟

نظرات

javac 11 سال پیش
سوالتون تکراری هست با سرچ به جواب میرسید ... باید از listener استفاده کنید.

پاسخ‌ها 4

MobinTeb 11 سال پیش

شما باید یه کلاس بسازید به صورت زیر:

 classTestAsyncextendsAsyncTask<Void,Integer,String>
{

protectedvoid onPreExecute () {
mProgressDialog = new ProgressDialog(MainActivity.this);
mProgressDialog.setTitle("عنوان");
mProgressDialog.setMessage("پیام");
mProgressDialog.setIndeterminate(false);
mProgressDialog.show();}

protectedString doInBackground(Void...arg0){
...... 
// کد دریافت جیسون از سرور رو اینجا بنویسد
......}

protectedvoid onPostExecute(String result){

mProgressDialog.dismiss();   
..... 
کدهای ثبت جسون داخل لیست ویو و یا ... رو اینجا بنویسید
.....
}
}			


بعد بصورت
newTestAsync().execute(); 
تو اکتیویتی فراخوانی کنید
همچنین 
ProgressDialog mProgressDialog;
رو قبل از 
oncreate 
اکتیویتی قرار دهید

 

 

نظرات

علی 11 سال پیش
مصطفی جان من از کد شما استفاده کردم ولی کلا تو لودینگ میمونه و نمایش نمیده چیزی رو . کجا رو اشتباه کردم؟
علی 11 سال پیش

class TestAsync extends AsyncTask<String, Void, String>
{

@Override
protected String doInBackground(String... params) {

newsRead();

return null;
}



protected void onPreExecute () {
mProgressDialog = new ProgressDialog(NewsFragment.this);
mProgressDialog.setMessage("لطفا صبر کنید...");
mProgressDialog.setIndeterminate(false);
mProgressDialog.show();
mProgressDialog.setCancelable(false);
super.onPreExecute();
}



protected void onPostExecute(String result){
mProgressDialog.dismiss();
runOnUiThread(new Runnable() {
public void run() {
/**
* Updating parsed JSON data into ListView
* */
adapter = new AdapterNews(G.tasks);
lstContent.setAdapter(adapter);
}
});


}

public void onResume() {
adapter.notifyDataSetChanged();

}

}

public void newsRead(){

String url = "http://192.168.0.0/android/note_server/news.php";
ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("action", "read"));
Log.i("LOG", params.toString());


String result = Webservice.readUrl(url, params);
if (result != null) {
try {

JSONArray tasks = new JSONArray(result);
DataBaseConnection db = new DataBaseConnection(this, "database", 5);
final SQLiteDatabase database = db.getWritableDatabase();
for (int i = 0; i < tasks.length(); i++) {
JSONObject object = tasks.getJSONObject(i);
StructTask task = new StructTask();
task.id = object.getString("news_id");
task.title = object.getString("news_title");
task.desc = object.getString("news_desc");
task.date = object.getString("news_date") ;
database.execSQL("INSERT INTO news (news_title,news_desc,news_date) VALUES ('" + task.title + "','" + task.desc + "','" + task.date + "')");
G.tasks.add(task);
}

database.close();
}
catch (JSONException e) {
e.printStackTrace();
}
}


}

نظرات

Reza.M 11 سال پیش

دوستان سلام.

طاعات و عباداتتون مورد قبول حق تعالی...

مصطفی ، بیا جواب تاپیک رو بده ، لطفا :(

چون منم مشکل علی رو دارم ، بعد یکی دو دقیقه از اینکه progressbar لود میشه کرش میکنه

اینم کد بنده:

 

 public class ActivityCategory extends ActivityEnhanced {
ProgressDialog mProgressDialog; static String note_text; static int note_fav; @Override public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.main);
new TestAsync().execute(); } class TestAsync extends AsyncTask<Void, Integer, String> { @Override protected void onPreExecute() { mProgressDialog = new ProgressDialog(ActivityCategory.this);
mProgressDialog.setTitle("بروزرسانی"); mProgressDialog.setMessage("لطفا کمی منتظر بمانید..."); mProgressDialog.setIndeterminate(false); mProgressDialog.show(); } @Override protected String doInBackground(Void... arg0) { // TODO Auto-generated method stub populateFromServer(); return null; } } protected void onPostExecute(String result) { Activitynote_list.adapter.notifyDataSetChanged(); mProgressDialog.dismiss(); } public static void populateFromServer() { String url = "http://skywebdesign.ir/note.php"; ArrayList<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("action", "read")); final String result = Webservice.readUrl(url, params); if (result != null) { Thread thread = new Thread(new Runnable() { @Override public void run() { try { JSONArray note_list = new JSONArray(result); for (int i = 0; i < note_list.length(); i++) { JSONObject object = note_list.getJSONObject(i); note_text = object.getString("note_text"); note_fav = object.getInt("note_fav"); Cursor cursor = G.database.rawQuery("SELECT * FROM Notes WHERE note_text='" + note_text + "' ", null); if ( !cursor.moveToFirst()) { //insert G.database.execSQL("INSERT INTO Notes (note_text ,note_fav) VALUES('" + note_text + "','" + note_fav + "')"); } } } catch (JSONException e) { e.printStackTrace(); } } }); thread.start(); } } }

 

ممنون میشم راهنمایی کنید...

نظرات

علی 11 سال پیش
reza جان کد بالا رو تغییر دادم به شکل کد های من بنویس درست میشه. این کد درسته.
Reza.M 11 سال پیش

کدهای خطایی که دارم ایناس:

 Activity ir.mahdidev71.lovesms.ActivityCategory has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{a6b89340 V.E..... R.....ID 0,0-217,256} that was originally added here
android.view.WindowLeaked: Activity ir.mahdidev71.lovesms.ActivityCategory has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{a6b89340 V.E..... R.....ID 0,0-217,256} that was originally added here
at android.view.ViewRootImpl.<init>(ViewRootImpl.java:354)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:216)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
at android.app.Dialog.show(Dialog.java:281)
at ir.mahdidev71.lovesms.ActivityCategory$TestAsync.onPreExecute(ActivityCategory.java:274)
at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
at android.os.AsyncTask.execute(AsyncTask.java:534)
at ir.mahdidev71.lovesms.ActivityCategory.onCreate(ActivityCategory.java:262)
at android.app.Activity.performCreate(Activity.java:5104)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
at android.app.ActivityThread.access$600(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)

نظرات


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