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();
}

}

4

3 に答える 3

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();

    }
}
于 2013-10-18T06:18:47.277 に答える
0

AsyncTaskWeb サービスの呼び出しに使用してみてください。詳細については、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();
    }
}


}
于 2013-10-18T06:13:52.630 に答える
0

UI スレッドで HTTP リクエストを実行するとNetworkOnMainTheadExceptionを受け取ることを考えると、リクエストはjParser.AmbilJson().

したがって、最善の方法は、 AsyncTask のようなメソッドを使用して、結果onPreExecuteProgressBaronPostExecuteに表示することです。

于 2013-10-18T06:23:03.930 に答える