【问题标题】:Error Parsing Data, JSON解析数据时出错,JSON
【发布时间】:2013-11-14 20:34:00
【问题描述】:

我正在尝试执行一个小型 android 应用程序以从托管在 Web 服务上的数据库中获取数据,具有以下大量代码,但出现了一些错误。

MainActivity.java

  public class MainActivity extends Activity {

TextView Name;
TextView ID;
TextView Email;
private static String url = "http://HostName/GetData.php";
private static final String TAG_Name = "Name";
private static final String TAG_ID = "Id";
private static final String TAG_Email = "Email";

JSONArray user = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    new JSONParse().execute();

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}
private class JSONParse extends AsyncTask<String, String, JSONObject>
{
    private ProgressDialog pDialog;

    @Override
    protected void onPreExecute(){
        super.onPreExecute();
        Name = (TextView) findViewById(R.id.textView4);
        ID = (TextView) findViewById(R.id.textView5);
        Email = (TextView) findViewById(R.id.textView6);

        pDialog = new ProgressDialog(MainActivity.this);
        pDialog.setMessage("Getting Data ...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();
    }

    @Override
    protected JSONObject doInBackground(String... args) {
        JSONParser jParser = new JSONParser();

        // Getting JSON from URL
        JSONObject json = jParser.getJSONFromUrl(url);
        return json;
    }

    @Override
    protected void onPostExecute(JSONObject json) {
        pDialog.dismiss();
        try {
               // Getting JSON Array
               user = json.getJSONArray(TAG_Name);
               JSONObject c = user.getJSONObject(0);

               // Storing  JSON item in a Variable
               String Name1 = c.getString(TAG_Name);
               String ID1 = c.getString(TAG_ID);
               String Email1 = c.getString(TAG_Email);

               //Set JSON Data in TextView
               Name.setText(Name1);
               ID.setText(ID1);
               Email.setText(Email1);

       } catch (JSONException e) {
           e.printStackTrace();
       }

    }

}
 }

JSONParser.java:

 public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";

// constructor
public JSONParser() {

}

public JSONObject getJSONFromUrl(String url) {

    // Making HTTP request
    try {
        // defaultHttpClient
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);

        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();           

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(is, "utf-8"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        is.close();
        json = sb.toString();
    } catch (Exception e) {
        Log.e("Buffer Error", "Error converting result " + e.toString());
    }

    // try parse the string to a JSON object
    try {
        jObj = new JSONObject(json);
    } catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }

    // return JSON String
    return jObj;
}

}

我有以下 LogCat:

PHP 文件:

<?php
header('Content-type=application/json; charset=utf-8');
$con = mysql_connect("***","***","***");

if (!$con)
    {
    die('Could not Connect:' . mysql_error());
    }

mysql_select_db("database_name",$con);

$result = mysql_query("SELECT * FROM database_name");

while($row = mysql_fetch_assoc($result))
    {
       $output[]=$row;
    }

print(json_encode($output));

mysql_close($con);

?>

PHP 响应是:

[{"姓名":"Izzo32","Id":"5554","Email":"xxx@hotmail.com"}]

【问题讨论】:

    标签: java android database json


    【解决方案1】:

    如果你想解析 JSON,那么你应该提供 JSON,而不是 html。显然你收到了一个“”标签!

    如果我是你,我会修复我的 web 服务并使用 gson 将 json 转换为 java 对象!

    【讨论】:

    • 谢谢,我会试试的 :)
    • 您的网络服务响应是什么?可以贴在这里吗?
    • PHP 响应已发布在问题中,我已经解决了类似的问题here,谢谢 :)
    • 但是错误代码说它正在获取一个 标签...你解决了吗?
    【解决方案2】:

    看起来您试图将非 JSON 格式的字符串转换为导致错误的 json 对象。您应该打印出 html 响应以查看整个内容并将其发布在此处。

    【讨论】:

    • 但是您要转换为 json 对象的字符串是什么。也许它在 html 括号内
    • 对不起,我没听懂! ://
    • 把你试图转换成json数组或者json对象的字符串打印到log cat。从那里你可以看到它是否有html括号或者它是否格式错误。
    • 我已经这样做了,你可以在问题中找到 LogCat,我猜它有一个 html 括号但我不知道如何处理这种情况!
    • 也许可以尝试从 php.ini 顶部删除 header() 声明。我不认为在任何脚本中我都会将 json 返回给我使用的客户端。我唯一一次这样做是我使用 php 返回图像或文件时。
    【解决方案3】:

    再看这个问题,我很确定我的专业知识没什么用。对不起。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-22
      • 2018-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-14
      • 2018-11-06
      相关资源
      最近更新 更多