0

如何让 phpjson_encode($array)进入 android 来操作它的数据?

我有一个在 json_encode($array); 中编码数组的 php 当我

echo json_encode($array);

我得到:

[{"id":"1","name":"player1","score":"20","quarter":"Q - 1"},{"id":"2","name":"player2","score":"18","quarter":"http:\/\/localhost\/win.jpg"}]

现在在 android 中,我想从 php 中获取该数组并将其放入一个数组中,例如,让我从索引 0 中获取其包含的字符串值,然后将该字符串设置为 textView 文本。在 iphone 我只做这个代码:

NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

(数据是我的本地网址“http://localhost/my.php”)

然后我可以轻松地从字典中获取数据valueForKey:name并将objectAtIndex:0其字符串放入文本字​​段。

请用java完成代码实现,以便我理解。因为我是 Java 新手,而且我因为很多错误和时间试图以不同的方式做到这一点而失去了理智。

感谢解决我问题的人。

4

3 回答 3

1

使用 org.apache.http.client.HttpClient 接收对字符串的响应。

HttpClient httpclient = new DefaultHttpClient();
try {
    HttpPost httppost = new HttpPost(this.getURL());
    // attach the request with post data
    List<NameValuePair> pairs = new ArrayList<NameValuePair>(); 
    pairs.add(new BasicNameValuePair("username", username)); 
    pairs.add(new BasicNameValuePair("password", password));        
    httppost.setEntity(new UrlEncodedFormEntity(pairs));
    //send request to server
    HttpResponse response = httpclient.execute(httppost);
    //trace response
    InputStream is = response.getEntity().getContent();
    //convert response to string
    BufferedReader myReader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"));
    StringBuilder sb = new StringBuilder();
    sb.append(myReader.readLine() + "\n");
    String line="";
    while ((line = myReader.readLine()) != null) {
        sb.append(line + "\n");
    }
    result = sb.toString();
} catch (Exception e) {
    e.printStackTrace();
}

然后你可以使用 org.json.JSONObject 或 org.json.JSONArray。

JSONObject json_data= new JSONObject(result);
int userId = Integer.parseInt(json_data.getString("user_id"));
JSONArray arrJson = json_data.getJSONArray("data");
于 2012-04-24T00:32:34.547 回答
1

发生此错误是因为您发送的 json 数组没有其名称。

存储 json 数组后,请执行以下操作:

echo json_encode(array('acdata'=>$acdata));



eg:
while($row = $stmt->fetch ()){
 $acdata[] = array(
     'acid' => $acid,
     'address' => $address,
     'companyname' => $companyname,
     'dateofpurchase' => $dateofpurchase,
     'ac_type' => $ac_type
);
}
header('Content-type: application/json');
echo json_encode(array('acdata'=>$acdata));

然后在android中通过以下方式检索它:

JSONObject jsonRootObject = new JSONObject(result);
JSONArray jsonArray = jsonRootObject.optJSONArray("acdata");
JSONObject jsonObject = jsonArray.getJSONObject(1);
name = jsonObject.optString("acid");

//acid是json中key的名字

//将其放入循环以获取所有值

于 2016-07-04T10:33:05.977 回答
0

有许多第三方类可以自动完成大部分工作。我们不需要发明轮子。轻松使用 Retrofit 或 Volley。在我的项目中运行良好。他们代表您处理许多事情。定义一个类以将每个播放器对象的所有属性打包在一个对象中,然后使用改造 API:也许以下提示会对您有所帮助:

public interface QuestionAPI {
    @GET("player.php")//you can call php file directly
    public void getFeed(Callback <List<PlayerObject>> playerobject);
}
于 2016-03-20T03:11:17.843 回答