当前位置: 首页 > 知识库问答 >
问题:

解析json数据时出错(java.lang.String类型的值无法转换为json数组)

宫高义
2023-03-14

我试图实现一个简单的android应用程序,在这个应用程序中,我试图通过php站点检索数据库值,但是下面的代码在解析json数据时产生错误。

我的php文件编码json如下

getdeals.php
<?php
$host="localhost"; // Host name
$username="root"; // Mysql username
$password=""; // Mysql password
$db_name="user"; // Database name
$tbl_name="deal"; // Table name

// Connect to server and select databse.
mysql_connect("$host","$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

$q=mysql_query("SELECT * FROM deal");
while($e=mysql_fetch_assoc($q))
    $output[]=$e;

print(json_encode($output));

mysql_close();
?>

Android类如下

public class JsonConnect extends Activity {

    InputStream is;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_json_connect);
        addListenerOnbutton();
        Thread t = new Thread() {
            public void run() {
                getDeals();
            }
        };
        t.start();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_json_connect, menu);
        return true;
    }

    public void addListenerOnbutton() {

        final Context context = this;

        Button home = (Button)findViewById(R.id.button1);

        home.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                finish();  

            }

        });
 }

    public void getDeals() {

        String result = "";
        //the year data to send
        //ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        //nameValuePairs.add(new BasicNameValuePair("year","1980"));

        //http post
        try{
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost("http://10.0.2.2/dealnow/getdeals.php");
                //httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                HttpResponse response = httpclient.execute(httppost);
                HttpEntity entity = response.getEntity();
                is = entity.getContent();
        }
        catch(Exception e){
                Log.e("log_tag", "Error in http connection "+e.toString());
        }
        //convert response to string
        try{
                BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                        sb.append(line + "\n");
                }
                is.close();

                result=sb.toString();
        }catch(Exception e){
                Log.e("log_tag", "Error converting result "+e.toString());
        }

        //parse json data
        try{
                JSONArray jArray = new JSONArray(result);
                for(int i=0;i<jArray.length();i++){
                        JSONObject json_data = jArray.getJSONObject(i);
                        Log.i("log_tag","dealid: "+json_data.getString("deal_id")+
                                ", hotel name: "+json_data.getString("hotel_name")+
                                ", valid date: "+json_data.getInt("valid_date")+
                                ", location: "+json_data.getString("location")+
                                ", website: "+json_data.getString("website")
                        );
                }
        }
        catch(JSONException e){
                Log.e("log_tag", "Error parsing data "+e.toString());
        }
    }
}

最后是logcat输出

05-11 01:23:08.767: D/dalvikvm(435): GC_EXPLICIT freed 24K, 4% free 6582K/6855K, paused 7ms+4ms

05-11 01:29:24.164: V/TLINE(497): new: android.text.TextLine@4065aa30

05-11 01:29:24.757: D/dalvikvm(497): GC_CONCURRENT freed 115K, 4% free 6560K/6791K, paused 5ms+14ms

05-11 01:29:24.764: E/log_tag(497): Error parsing data org.json.JSONException: Value <br of type java.lang.String cannot be converted to JSONArray

05-11 01:29:24.844: V/TLINE(497): new: android.text.TextLine@4065d8e0

05-11 01:34:12.147: D/dalvikvm(497): GC_EXPLICIT freed 48K, 4% free 6524K/6791K, paused 7ms+3ms

如何获得表的所需值

请帮忙。

共有1个答案

劳通
2023-03-14

PHP脚本返回的响应不是有效的JSON格式。

您需要放入$output=array() while循环之前的某个地方

 类似资料:
  • 我正在创建一个应用程序,其中用户输入数据进行搜索,然后应用程序将其发送到服务器,然后服务器将搜索结果发送回客户端。 我得到了错误,我不能理解它的意思。我从服务器得到确切的结果。 这是我的网络代码从那里的应用程序和这里是链接到完整的代码 这是我的服务器端代码 我还更改了echo json_编码($json_输出);打印(json_编码($json_输出));但产出仍然没有变化 这是我从logcat得

  • 我有一个实体User,它有两个Data类型的字段。 我有一个带有save()方法的Controller,它将用户的数据保存到postgesql数据库中。 我有一个JSON,我将它发送到controller { "name":"Max "," createdOn":"2019-07-26 11:13:39 "," modified on ":" 2019-07-26 11:13:39 " } 最后在

  • E/AndroidRuntime:FATAL EXCEPTION:主进程:com.example.ahsan.ethlon2,PID:11641java.lang.NumberFormatExcture:对于输入字符串:"" 在java.lang.Integer.parseInt(Integer.java:608) 在java.lang.Integer.parseInt(Integer.java:

  • 问题内容: 这是列表活动。 清单活动: 基本适配器类: 的PHP: 我的问题是,我尝试解析字符串,它的值就像我解析这种类型的值时一样,它没有显示结果,并给出了logcat。 日志猫: 当我解析简单的值并且更改数据库时,它给我很好的结果。但是,我需要解析该值。请帮帮我。谢谢 问题答案: 如您所说,您无法解析类似于“’B-‘,’O-‘”的json字符串,但是您可以成功解析诸如“ B,O”的字符串。 这

  • 问题内容: 我的项目有一个WCF,可以从数据库获取记录并以JSON格式返回,如下所示: 我也有一个Android应用程序来使用JSON,这是我的代码: 我在处设置了断点,并从中得到了以下消息: 我试图复制JSON字符串并粘贴到在线JSON解析器网站http://jsonviewer.stack.hu/上,它解析得很好。请帮我解决这个问题! 问题答案: 在您的json中,的值包含在其中,因此将其视为