0

我想要显示的加载过程中,当移动活动 这是我的java文件,在这里我必须把函数来处理我的应用程序加载在加载数据把函数来显示加载过程

public class tehni extends ListActivity { 
TextView txt1; 
private static String link_url = "http://192.168.32.1/pln/android/berita/tehnik1.php?kode="; 
private static final String AR_ID = "id"; 
private static final String AR_JUDUL = "judul"; 
private static final String AR_CONTENT = "content"; 
JSONArray artikel = null; 
ArrayList<HashMap<String, String>> daftar_artikel = new ArrayList<HashMap<String, String>>(); 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.tehni); 
    JSONParserberita jParser = new JSONParserberita(); 
    JSONObject json = jParser.AmbilJson(link_url + user_name); 
    try { 
     artikel = json.getJSONArray("artikel"); 
     for (int i = 0; i < artikel.length(); i++) { 
      JSONObject ar = artikel.getJSONObject(i); 
      String id = ar.getString(AR_ID); 
      String judul = "ID LAPORAN =" + ar.getString(AR_JUDUL); 
      String content = "STATUS=" 
        + ar.getString(AR_CONTENT).substring(0, 6); 
      HashMap<String, String> map = new HashMap<String, String>(); 
      map.put(AR_ID, id); 
      map.put(AR_JUDUL, judul); 
      map.put(AR_CONTENT, content); 
      daftar_artikel.add(map); 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    this.adapter_listview(); 
} 

}

回答

0

尝试使用AsyncTask进行Web服务调用。请参阅它脱颖而出更多的细节developer.android.com/reference/android/os/AsyncTask.html

public class tehni extends ListActivity { 
TextView txt1; 
private static String link_url = "http://192.168.32.1/pln/android/berita/tehnik1.php?kode="; 
private static final String AR_ID = "id"; 
private static final String AR_JUDUL = "judul"; 
private static final String AR_CONTENT = "content"; 
JSONArray artikel = null; 
ArrayList<HashMap<String, String>> daftar_artikel = new ArrayList<HashMap<String, String>>(); 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.tehni); 
    new ServiceCallTask().execute(); 
    this.adapter_listview(); 
} 
class ServiceCallTask extends AsyncTask<String, String, String> 
{ 

    private ProgressDialog progressDialog; 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     progressDialog=new ProgressDialog(tehni.this, android.R.style.Theme_Translucent_NoTitleBar); 
     progressDialog.setMessage("Loading..."); 
     progressDialog.show(); 
    } 

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

      JSONParserberita jParser = new JSONParserberita(); 
      JSONObject json = jParser.AmbilJson(link_url + user_name); 
       artikel = json.getJSONArray("artikel"); 
       for (int i = 0; i < artikel.length(); i++) { 
        JSONObject ar = artikel.getJSONObject(i); 
        String id = ar.getString(AR_ID); 
        String judul = "ID LAPORAN =" + ar.getString(AR_JUDUL); 
        String content = "STATUS=" 
          + ar.getString(AR_CONTENT).substring(0, 6); 
        HashMap<String, String> map = new HashMap<String, String>(); 
        map.put(AR_ID, id); 
        map.put(AR_JUDUL, judul); 
        map.put(AR_CONTENT, content); 
        daftar_artikel.add(map); 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     return null; 
    } 
    @Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 
     if(progressDialog!=null) 
      progressDialog.dismiss(); 
     this.adapter_listview(); 
    } 
} 


} 
1

的AsyncTask是由Android提供了一个抽象类,这有助于我们正确地使用UI线程。该类允许我们执行长/后台操作,并在UI线程上显示其结果,而无需操作线程。

尝试使用AsynchTask

public class tehni extends ListActivity { 
TextView txt1; 
private static String link_url = "http://192.168.32.1/pln/android/berita/tehnik1.php?kode="; 
private static final String AR_ID = "id"; 
private static final String AR_JUDUL = "judul"; 
private static final String AR_CONTENT = "content"; 
JSONArray artikel = null; 
ArrayList<HashMap<String, String>> daftar_artikel = new ArrayList<HashMap<String, String>>(); 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.tehni); 
    new task().execute(); 

} 
class task extends AsyncTask<String, Integer, String> { 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     pDlg.setMessage("Loading..."); 
     pDlg.setCancelable(false); 
     pDlg.setTitle(getResources().getString(R.string.app_name)); 
     pDlg.setCancelable(false); 
     pDlg.show(); 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     JSONParserberita jParser = new JSONParserberita(); 
JSONObject json = jParser.AmbilJson(link_url + user_name); 
try { 
    artikel = json.getJSONArray("artikel"); 
    for (int i = 0; i < artikel.length(); i++) { 
     JSONObject ar = artikel.getJSONObject(i); 
     String id = ar.getString(AR_ID); 
     String judul = "ID LAPORAN =" + ar.getString(AR_JUDUL); 
     String content = "STATUS=" 
       + ar.getString(AR_CONTENT).substring(0, 6); 
     HashMap<String, String> map = new HashMap<String, String>(); 
     map.put(AR_ID, id); 
     map.put(AR_JUDUL, judul); 
     map.put(AR_CONTENT, content); 
     daftar_artikel.add(map); 
    } 
} catch (JSONException e) { 
    e.printStackTrace(); 
} 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 
        pDlg.dismiss(); 
       this.adapter_listview(); 

    } 
} 
0

考虑,如果运行在UI线程上一个HTTP请求,您将收到一个NetworkOnMainTheadException,我会假设你的要求是内jParser.AmbilJson()

所以,最好的方法是使用AsyncTask的方法,如onPreExecuteonPostExecuteProgressBar中显示结果。