我试图创建一个Android应用程序使用PHP和json远程服务器上的数据库。我运行的查询假设返回一行作为答案,似乎有一个问题,因为json数组总是返回空。这是我的JSON类代码:
public class JSONClass extends AsyncTask<String,Void,String>{
public JSONArray res = null;
private String link;
private Context context;
public JSONClass(Context context, int queryNo, String params) {
this.context = context;
link = "http://pickupfriend.fulba.com/android_project/query" + queryNo + ".php" + params;
}
@TargetApi(Build.VERSION_CODES.KITKAT)
@Override
protected String doInBackground(String... arg0) {
try{
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(link);
post.addHeader("Content-Type", "application/x-www-form-urlencoded");
HttpResponse response = client.execute(post);
HttpEntity entity = response.getEntity();
String result = EntityUtils.toString(entity, "utf-8");
res = new JSONArray(result);
}catch(Exception e){
}
return "";
}
}
我就是这样使用这个类的:EditText userNam=(EditText)findviewbyd(R.id.userNamTxt);EditText pass=(EditText)findViewById(R.id.pssTxt);
String uName,Pss;
uName = userNam.getText().toString();
Pss = pass.getText().toString();
String str = "?uname=" + uName + "&password=" + Pss;
JSONClass jClass = (JSONClass) new JSONClass(this, 1, str).execute();
res = jClass.res;
php链接是:http://pickupfriend.fulba.com/android_project/query1.php?uname=itzick
异步任务以异步方式进行。execute()
函数启动异步任务并继续执行代码。在您的例子中,它执行res=jClass。res
完成时,Asynctask执行函数OnPostExecute(),如中所示
public class JSONClass extends AsyncTask<String,Void,String>{
public JSONArray res = null;
private String link;
private Context context;
public JSONClass(Context context, int queryNo, String params) {
this.context = context;
link = "http://pickupfriend.fulba.com/android_project/query" + queryNo + ".php" + params;
}
@TargetApi(Build.VERSION_CODES.KITKAT)
@Override
protected String doInBackground(String... arg0) {
try{
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(link);
post.addHeader("Content-Type", "application/x-www-form-urlencoded");
HttpResponse response = client.execute(post);
HttpEntity entity = response.getEntity();
String result = EntityUtils.toString(entity, "utf-8");
}catch(Exception e){
}
return result;
}
@Override
protected void onPostExecute(Void result) {
//result is sent here. now
JSONArray res = new JSONArray(result);
//Do what you want with JSONArray
}
}
现在,如果您只能在活动中执行您想要的操作,而不能在异步任务中执行,则必须使用处理程序将数据发送回活动。
要生成处理程序,请将其添加到正在调用异步任务的活动或片段中
Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
Bundle bundle = msg.getData();
String result = bundle.getString("JSONRESULT");
JSONArray res = new JSONArray(result);
//Now do what you want here
}
}
在初始化asynctask时,也添加处理程序对象
private Handler handler;
public JSONClass(Context context, int queryNo, String params) {
this.context = context;
link = "http://pickupfriend.fulba.com/android_project/query" + queryNo + ".php" + params;
this.handler=handler;
}
不要忘记在初始化时将其与活动中的参数一起传递。
同样在OnPostExecute中
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
try {
Bundle bundle = new Bundle();
bundle.putString("JSONRESULT", result);
Message msg = new Message();
msg.setData(bundle);
handler.sendMessage(msg);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
您使用AsyncTask时似乎有问题。您不应该得到结果res=jClass。res
就在execute()之后,因为您可能还没有得到HTTP响应。也许这就是当你说你的长度是0时,你得到的错误,对象实际上是空的。
在AsyncTask的onPostExecute()
方法中收到数据后,应该相应地更新UI。大概是这样的:
public class JSONClass extends AsyncTask<String,Void,JSONArray>{
...
@TargetApi(Build.VERSION_CODES.KITKAT)
@Override
protected JSONArray doInBackground(String... arg0) {
...
String result = EntityUtils.toString(entity, "utf-8");
return new JSONArray(result);
}
protected void onPostExecute(JSONArray result) {
// DO WHATEVER YOU WANT IN YOUR UI
}
}
问题内容: 上面的示例json数组,如何获取204、203和202?谢谢 我试过了: 问题答案: 上面的示例json数组,如何获取204、203和202? 不,当前的String 代替。您应该使用JSONObject获取Iterator 。keys()如果内部JSONObject键动态为:
我正在为课堂做一个程序。到目前为止,我已经完成了1-3个,但我不知道如何实现4和5个。我已经被困在这上面一段时间了。必须使用两个类。 null 其他类
我可以很容易地得到消息,但我不能从响应中得到“他”数组。 下面是我的数据模型类 这就是我向服务器发送请求的方式:
我们的中央银行以多种方式提供货币汇率。例如,一个货币日期很容易获得:http://api.nbp.pl/api/exchangerates/rates/a/usd/2020-08-20?format=Json(它以简单的大括号开始{作为典型的Json) 但是另一个表-每个货币日期:http://api.nbp.pl/api/exchangerates/tables/a/2020-08-20?for
您好,我有这个代码,我想将此数据解析为对象,现在我得到了一个 anyType 的字符串 我想分别得到描述对象纬度对象和经度对象
我想从Firebase实时数据库中获取整个JSON数组。从实时数据库中提取数组并将其存储在自定义类的ArrayList中。