从PHP/MySQL到Java/JSON
我已经完全更新了这个问题: 以下是我的PHP json_编码示例:从PHP/MySQL到Java/JSON,java,android,json,Java,Android,Json,我已经完全更新了这个问题: 以下是我的PHP json_编码示例: print(json_encode($row)); 导致{“平均化”:“4.3”},这很好 但在Java中,我似乎无法抓住这个4.3值。这里是(对于一个Android项目),我编辑了不相关的数据 public class Rate extends ListActivity { JSONArray jArray; String result = null; InputStream is = null;
print(json_encode($row));
导致{“平均化”:“4.3”},这很好
但在Java中,我似乎无法抓住这个4.3值。这里是(对于一个Android项目),我编辑了不相关的数据
public class Rate extends ListActivity {
JSONArray jArray;
String result = null;
InputStream is = null;
StringBuilder sb = null;
String Item, Ratings, Review, starAvg;
RatingBar ratingsBar;
ArrayList<NameValuePair> param;
public void onCreate(Bundle savedInstanceState) {
starAvg = "0";
new starRatingTask().execute();
ratingsBar = (RatingBar) findViewById(R.id.theRatingBar);
class starRatingTask extends AsyncTask<String, String, Void> {
InputStream is = null;
String result = "";
@Override
protected Void doInBackground(String... params) {
String url_select = "http://www.---.com/---/average_stars.php";
ArrayList<NameValuePair> param = new ArrayList<NameValuePair>();
param.add(new BasicNameValuePair("item", Item));
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url_select);
try {
httpPost.setEntity(new UrlEncodedFormEntity(param));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
// read content
is = httpEntity.getContent();
} catch (Exception e) {
Log.e("log_tag", "Error in http connection " + e.toString());
}
try {
BufferedReader br = new BufferedReader(
new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = "";
while ((line = br.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result = sb.toString();
} catch (Exception e) {
Log.e("log_tag", "Error converting result " + e.toString());
}
return null;
}
protected void onPostExecute(Void v) {
try {
jArray = new JSONArray(result);
JSONObject json_data = null;
for (int i = 0; i < jArray.length(); i++) {
json_data = jArray.getJSONObject(i);
starAvg = json_data.getString("AverageRating");
}
} catch (JSONException e1) {
Toast.makeText(getBaseContext(), "No Star Ratings!",
Toast.LENGTH_LONG).show();
} catch (ParseException e1) {
e1.printStackTrace();
}
Toast.makeText(getBaseContext(), starAvg,
Toast.LENGTH_LONG).show();
ratingsBar.setRating(Float.valueOf(starAvg));
}
}
公共类速率扩展ListActivity{
杰索纳雷·贾雷;
字符串结果=null;
InputStream=null;
StringBuilder sb=null;
字符串项、评级、审查、starAvg;
比率杆比率杆;
ArrayList参数;
创建时的公共void(Bundle savedInstanceState){
starAvg=“0”;
新建starRatingTask().execute();
ratingsBar=(RatingBar)findViewById(R.id.theRatingBar);
类starRatingTask扩展了异步任务{
InputStream=null;
字符串结果=”;
@凌驾
受保护的Void doInBackground(字符串…参数){
字符串url_select=”http://www.---.com/---/average_stars.php";
ArrayList param=新的ArrayList();
参数添加(新的BasicNameValuePair(“项”,项));
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(url\u选择);
试一试{
setEntity(新的UrlEncodedFormEntity(参数));
HttpResponse HttpResponse=httpClient.execute(httpPost);
HttpEntity HttpEntity=httpResponse.getEntity();
//阅读内容
is=httpEntity.getContent();
}捕获(例外e){
e(“Log_标记”,“http连接错误”+e.toString());
}
试一试{
BufferedReader br=新的BufferedReader(
新的InputStreamReader(is));
StringBuilder sb=新的StringBuilder();
字符串行=”;
而((line=br.readLine())!=null){
sb.追加(第+行“\n”);
}
is.close();
结果=sb.toString();
}捕获(例外e){
Log.e(“Log_标记”,“错误转换结果”+e.toString());
}
返回null;
}
受保护的void onPostExecute(void v){
试一试{
jArray=新的JSONArray(结果);
JSONObject json_data=null;
for(int i=0;i
第二个toast评级产生了一个“0”,正如一开始设置的那样。为什么不用JSON将“整”行传回呢
print(json_encode($row));
JSON是用来表示对象的,如果你只是传回一个数字,将其作为一个数字的字符串传递不是更好吗?但是我理解你想要使用JSON,所以它是通用的,这就是为什么你应该传回整行。然后它将是一个数组(带有一个元素)它包含平均值。谢谢!那么我在这里调用什么来获取Java中的值呢?starAvg=json_data.getString(--?--);通常输入所有列名,但这里不适用吗?您可以在SQL中始终使其“具有”列名。例如:“选择平均值(评级)作为来自评分的平均值,其中item_id='{$item_id}',其中AverageRating是名称。嘿,谢谢,终于有机会尝试了,但它不起作用。我不知道是PHP还是Java端…更新:PHP端现在说这个{“AverageRating”:“4.3”}因此,这个端看起来还可以。但是Java端似乎正在崩溃。很抱歉,我对它的Java端不太熟悉。您使用的是什么库?我可以尝试修补。另外,您是否尝试过在“jArray=new JSONArray(result);”处设置断点,然后逐步查看失败的地方?