Php doInBackground、getText方法和makeHttpRequest方法出错
我从中创建一个程序 我在这方面遇到了一些错误:Php doInBackground、getText方法和makeHttpRequest方法出错,php,android,mysql,android-asynctask,Php,Android,Mysql,Android Asynctask,我从中创建一个程序 我在这方面遇到了一些错误: protected String doInBackground(String... args) { String id = id_anggota.getText().toString(); String nama = nama_anggota.getText().toString(); String kelamin = jenis_kelamin.getText().toString();
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);
我有两种错误:
在getText上,必须从UI线程调用方法id_anggota.getText。
无法解析makeHttpRequest上的方法。
我可以为这个问题做什么解决方案
更新:
我使用一些图书馆:
httpclient-android-4.3.3.jar
httpcore-4.4.5.jar
json-simple:json-simple:1.1
移动
在您的AsyncTask.execute之前。
将yourAsyncTask.execute更改为yourAsyncTask.executeid、nama、kelamin、kls、tanggal。
而在方法上则是做背景
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]));
}
在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:
makeHttpRequest可以在JSONParser类或
此getText与视图、TextView交互,android操作系统中的所有视图只能在UIUser界面线程中工作。doInBackground创建了一个单独的线程,一个名称所示的背景线程。因此,从TextView获取文本应该始终来自由android操作系统管理的UI线程。因此,将上述代码移动到运行在UI线程上的onPreExecute中
就makeHttpRequest而言,只需打开jar文件,看看它是否有makeHttpRequest。您可以在命令提示符下反编译jar文件id\u anggota.getText应在onpreexecuted中调用。如果您给我一个示例,请SyncTask具有onPreExecute方法。它在执行doInBackground之前在UI线程上运行。所以当我移动String id=id\u anggota.getText.toString时,您可以将需要在UI线程上运行的一些代码移动到onpreExecute;若要继续执行,它将使无法解决params上的id。addnew BasicNameValuePairid_anggota,id;这是工作。非常感谢。你给我举个例子了吗?我不是这么说的。我刚才说检查jar是否包含makeHttpRequest方法。我提供了一个链接,可以查看jar中的所有方法。我不明白:|好的,告诉我一件事,代码中的jsonParser变量是什么。您在哪里声明了它?jsonParser我在MainActivity类中声明了它在您的问题中声明并使用jsonParserEdit您的答案与makeHttpRequest解决方案。所以你的回答可以帮助别人。谢谢你的帮助:D
@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();
}
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));
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();