有人可以帮我从URL Web服务器检索Android JSON数据

有人可以帮我从URL Web服务器检索Android JSON数据,android,Android,我跟着 这是我在MainActivity.java中的最后一段代码: @SuppressLint({ "NewApi", "NewApi" }) @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Permission StrictMode

我跟着

这是我在
MainActivity.java
中的最后一段代码:

@SuppressLint({ "NewApi", "NewApi" })
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // Permission StrictMode
    if (android.os.Build.VERSION.SDK_INT > 9) {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }

    // listView1
    final ListView lisView1 = (ListView)findViewById(R.id.listView1);   

    /** JSON return
     *  [{"MemberID":"1","Name":"Weerachai","Tel":"0819876107"},
     * {"MemberID":"2","Name":"Win","Tel":"021978032"},
     * {"MemberID":"3","Name":"Eak","Tel":"0876543210"}]
     */

    String url = "http://10.0.2.2/Json/getJSON2.php";

    try {

        JSONArray data = new JSONArray(getJSONUrl(url));

        final ArrayList<HashMap<String, String>> MyArrList = new ArrayList<HashMap<String, String>>();
        HashMap<String, String> map;

        for(int i = 0; i < data.length(); i++){
            JSONObject c = data.getJSONObject(i);

            map = new HashMap<String, String>();
            map.put("MemberID", c.getString("MemberID"));
            map.put("Name", c.getString("Name"));
            map.put("Tel", c.getString("Tel"));
            MyArrList.add(map);

        }


        SimpleAdapter sAdap;
        sAdap = new SimpleAdapter(MainActivity.this, MyArrList, R.layout.activity_column,
                new String[] {"MemberID", "Name", "Tel"}, new int[] {R.id.ColMemberID, R.id.ColName, R.id.ColTel});      
        lisView1.setAdapter(sAdap);

        final AlertDialog.Builder viewDetail = new AlertDialog.Builder(this);
        // OnClick Item
        lisView1.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> myAdapter, View myView,
                    int position, long mylng) {

                String sMemberID = MyArrList.get(position).get("MemberID")
                        .toString();
                String sName = MyArrList.get(position).get("Name")
                        .toString();
                String sTel = MyArrList.get(position).get("Tel")
                        .toString();

                //String sMemberID = ((TextView) myView.findViewById(R.id.ColMemberID)).getText().toString();
                // String sName = ((TextView) myView.findViewById(R.id.ColName)).getText().toString();
                // String sTel = ((TextView) myView.findViewById(R.id.ColTel)).getText().toString();

                viewDetail.setIcon(android.R.drawable.btn_star_big_on);
                viewDetail.setTitle("Member Detail");
                viewDetail.setMessage("MemberID : " + sMemberID + "\n"
                        + "Name : " + sName + "\n" + "Tel : " + sTel);
                viewDetail.setPositiveButton("OK",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int which) {
                                // TODO Auto-generated method stub
                                dialog.dismiss();
                            }
                        });
                viewDetail.show();

            }
        });


    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}


public String getJSONUrl(String url) {
    StringBuilder str = new StringBuilder();
    HttpClient client = new DefaultHttpClient();
    HttpGet httpGet = new HttpGet(url);
    try {
        HttpResponse response = client.execute(httpGet);
        StatusLine statusLine = response.getStatusLine();
        int statusCode = statusLine.getStatusCode();
        if (statusCode == 200) { // Download OK
            HttpEntity entity = response.getEntity();
            InputStream content = entity.getContent();
            BufferedReader reader = new BufferedReader(new InputStreamReader(content));
            String line;
            while ((line = reader.readLine()) != null) {
                str.append(line);
            }
        } else {
            Log.e("Log", "Failed to download result..");
        }
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return str.toString();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}
}
@SuppressLint({“NewApi”,“NewApi”})
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//权限限制模式
如果(android.os.Build.VERSION.SDK_INT>9){
StrictMode.ThreadPolicy policy=新建StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(策略);
}
//列表视图1
最终ListView lisView1=(ListView)findViewById(R.id.listView1);
/**JSON返回
*[{“MemberID”:“1”,“姓名”:“Weerachai”,“电话”:“0819876107”},
*{“MemberID”:“2”,“姓名”:“Win”,“电话”:“02197832”},
*{“MemberID”:“3”,“姓名”:“Eak”,“电话”:“0876543210”}]
*/
字符串url=”http://10.0.2.2/Json/getJSON2.php";
试一试{
JSONArray数据=新的JSONArray(getJSONUrl(url));
final ArrayList MyArrList=新的ArrayList();
HashMap图;
对于(int i=0;i
然后,当我运行程序进行测试时,我的logcat发现以下警告:

模拟器上的结果是listview的一个空白屏幕


我仍然不知道如何修复它,有人有想法吗?

您可以在调试器中运行此程序并检查数据的值,但很可能这就是发生错误的地方,因此可能在这一行: return str.toString(); 在getJSONUrl方法中,可以检查str的值


您的Web服务器发现的任何错误都将作为错误消息包括在内,这可能是您的代码遇到的问题。

我认为响应JSON格式错误。这就是为什么你会有例外。请先检查响应字符串,然后再将其转换为JSON

没错,一些实现可能会在JSON字符串周围放置一个数组标记[],而其他实现则不会