doInBackground上的错误,方法getText和方法makeHttpRequest

时间:2016-09-09 03:35:06

标签: php android mysql android-asynctask

我从Android Hive

创建了一个程序

我收到了一些错误:

protected String doInBackground(String... args) {
        String id = id_anggota.getText().toString();
        String nama = nama_anggota.getText().toString();
        String kelamin = jenis_kelamin.getText().toString();
        String kls = kelas.getText().toString();
        String tanggal = tanggal_daftar.getText().toString();

        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("id_anggota", id));
        params.add(new BasicNameValuePair("nama_anggota", nama));
        params.add(new BasicNameValuePair("jenis_kelamin", kelamin));
        params.add(new BasicNameValuePair("kelas", kls));
        params.add(new BasicNameValuePair("tanggal_daftar", tanggal));

        JSONObject json = jsonParser.makeHttpRequest(url_create_product,
                "POST", params);

我得到2种错误:

  1. 必须从UI线程调用getText方法id_anggota.getText()
  2. 关于makeHttpRequest方法无法解决。
  3. 我可以为此问题做些什么解决方案?

    更新

    我使用了一些库:

    1. 的HttpClient-机器人-4.3.3.jar
    2. 的HttpCore-4.4.5.jar
    3. com.googlecode.json-简单:JSON-简单:1.1

3 个答案:

答案 0 :(得分:2)

AsyncTask内,请声明一些变量:

 private String id ;
 private String nama;
 private String kelamin ;
 private String kls;
 private String tanggal;

然后在onPreExecute()上,您可以为它们设置值:

@Override
    protected void onPreExecute(Void result) {
        super.onPostExecute(result);
        id = id_anggota.getText().toString();
        nama = nama_anggota.getText().toString();
        kelamin = jenis_kelamin.getText().toString();
        kls = kelas.getText().toString();
        tanggal = tanggal_daftar.getText().toString();
    }

最后在doInBackground()

protected String doInBackground(String... args) {

    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("id_anggota", id));
    params.add(new BasicNameValuePair("nama_anggota", nama));
    params.add(new BasicNameValuePair("jenis_kelamin", kelamin));
    params.add(new BasicNameValuePair("kelas", kls));
    params.add(new BasicNameValuePair("tanggal_daftar", tanggal));

makeHttpRequest位于JSONParser班级herehere

答案 1 :(得分:1)

移动

String id = id_anggota.getText().toString();
String nama = nama_anggota.getText().toString();
String kelamin = jenis_kelamin.getText().toString();
String kls = kelas.getText().toString();
String tanggal = tanggal_daftar.getText().toString();
yourAsyncTask.execute()之前


yourAsyncTask.execute()更改为yourAsyncTask.execute(id,nama,kelamin,kls,tanggal)
并在方法doInBackground()

protected String doInBackground(String... args) {
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("id_anggota", args[0]));
    params.add(new BasicNameValuePair("nama_anggota", args[1]));
    params.add(new BasicNameValuePair("jenis_kelamin", args[2]));
    params.add(new BasicNameValuePair("kelas", args[3]));
    params.add(new BasicNameValuePair("tanggal_daftar", args[4]));
}

答案 2 :(得分:1)

String id = id_anggota.getText().toString();
    String nama = nama_anggota.getText().toString();
    String kelamin = jenis_kelamin.getText().toString();
    String kls = kelas.getText().toString();
    String tanggal = tanggal_daftar.getText().toString();

getText()与视图交互,TextView并且Android OS中的所有视图只能在UI(用户界面线程)中工作。 doInBackground()创建了一个单独的线程,一个像名称所暗示的后台线程。因此,从TextView获取文本应始终来自由Android OS管理的UI线程。因此,在UI线程上运行的onPreExecute()内移动上述代码。

makeHttpRequest()而言,只需打开jar文件,看看它是否有makeHttpRequest()。您可以在命令提示符like this.

中反编译jar文件