解析数据 org.json.JSONException 时出错:Java.lang.String 类型的值 <!DOCTYPE 无法转换为 JSONObject
Posted
技术标签:
【中文标题】解析数据 org.json.JSONException 时出错:Java.lang.String 类型的值 <!DOCTYPE 无法转换为 JSONObject【英文标题】:Error parsing data org.json.JSONException: Value <!DOCTYPE of type java.lang.String cannot be converted to JSONObject 【发布时间】:2013-02-10 17:14:26 【问题描述】:我是 android 开发新手。
我正在尝试使用 JSON 在列表视图中根据用户 ID 获取 db 值。
我在 *** 上搜索了这个问题,但我找不到解决方案。
我不知道我得到了什么,JSONArray 或 JSONObject。
标题显示在 logcat 中。我已经尝试了下面提到的代码。
public class Search_Id extends Activity implements OnClickListener
private static String url_search_by_id="php file in the remote server";
private static final String REGISTER="regs";
private static final String ID="id";
private static final String FNAME="fname";
private static final String LNAME="lname";
private static final String PROFILEFOR="profilefor";
private static final String AGE="age";
private ProgressDialog PDialog;
EditText Et_sear_id;
Button Btn_Search;
TextView search_id_detail_id,search_id_detail_fname,search_id_detail_lname,search_id_detail_profilefor,search_id_detail_age;
public void onCreate(Bundle b)
super.onCreate(b);
setContentView(R.layout.search_id);
Et_sear_id=(EditText)findViewById(R.id.sear_et_id);
Btn_Search=(Button)findViewById(R.id.sear_btn_search);
Btn_Search.setOnClickListener(this);
@Override
public void onClick(View v)
// TODO Auto-generated method stub
if(v.equals(Btn_Search))
//new SearchDetail().execute();
final String st_id=Et_sear_id.getText().toString();
if(st_id.length()>0)
ArrayList<NameValuePair> postparameter=new ArrayList<NameValuePair>();
postparameter.add(new BasicNameValuePair("id",st_id));
String response=null;
try
response = CustomHttpClient.executeHttpPost("php file in the remote server", postparameter);
String res=response.toString();
// res = res.trim();
res= res.replaceAll("\\s+","");
//error.setText(res);
//Toast.makeText(getApplicationContext(), res, Toast.LENGTH_SHORT).show();
if(res.equals("yes"))
new SearchDetail().execute();
Toast.makeText(getApplicationContext(), "Correct",Toast.LENGTH_SHORT).show();
else
Toast.makeText(getApplicationContext(), "Incorrect",Toast.LENGTH_SHORT).show();
Et_sear_id.setText("");
catch (Exception e)
// TODO: handle exception
Toast.makeText(getApplicationContext(), e.toString(),Toast.LENGTH_LONG).show();
else
Et_sear_id.setError("Provide ID to Search");
class SearchDetail extends AsyncTask<String,String,String>
//final String St_sear_id1=Et_sear_id.getText().toString();
@Override
protected void onPreExecute()
super.onPreExecute();
PDialog=new ProgressDialog(Search_Id.this);
PDialog.setMessage("Loading...");
PDialog.setIndeterminate(false);
PDialog.setCancelable(true);
PDialog.show();
@Override
protected String doInBackground(String... arg0)
final String st_id=Et_sear_id.getText().toString();
// TODO Auto-generated method stub
List<NameValuePair> params=new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("id",st_id));
JSONParser jsonParser=new JSONParser();
JSONObject json=jsonParser.makeHttpRequest(url_search_by_id_guna,"POST",params);
//Log.d("Create Response", json.toString());
try
//Toast.makeText(getApplicationContext(), "Comes into Try Block", Toast.LENGTH_LONG).show();
JSONArray jsonarray = json.getJSONArray(REGISTER);
for(int i=0;i<jsonarray.length();i++)
JSONObject jo=jsonarray.getJSONObject(i);
int id = jo.getInt(ID);
String fname = jo.getString(FNAME);
String lname= jo.getString(LNAME);
String profile_for=jo.getString(PROFILEFOR);
String age=jo.getString(AGE);
Intent in=new Intent(getApplicationContext(),Search_Id_Detail.class);
//i.putExtra("REGISTER", regs);
in.putExtra("ID",id);
in.putExtra("FNAME",fname);
in.putExtra("LNAME",lname);
in.putExtra("PROFILEFOR",profile_for);
in.putExtra("AGE",age);
startActivity(in);
catch (Exception e)
// TODO: handle exception
e.printStackTrace();
return null;
protected void onPostExecute(String arg)
PDialog.dismiss();
PHP 文件如下:
<?php
/* Following code will list all products */
//array for JSON response
$response=array();
$id=$_POST['id'];
require_once 'vivagha_db_connect.php';
//Connect to database
$db=new DB_CONNECT();
//get all products from products table
$result=mysql_query("select *from regs where db_reg_id=$id") or die(mysql_error());
//check for empty result
if(mysql_num_rows($result)>0)
//looping through all results
//products node
//$response["regs"]=array();
while($row=mysql_fetch_array($result))
//temp user array
//$register=array();
$response["id"]=$row["db_reg_id"];
$response["fname"]=$row["db_reg_fname"];
$response["lname"]=$row["db_reg_lname"];
$response["profilefor"]=$row["db_reg_profilefor"];
$response["age"]=$row["db_reg_age"];
//push single product into final response array
//array_push($response["regs"],$register);
$response["success"]=1;
$response["message"]="Found";
//success
//response["success"]=1;
//echo JSON response
echo json_encode($response);
else
//no product found
$response["success"]=0;
$response["message"]="No Products Found";
//echo no users JSON
//echo json_encode($response);
//
?>
我输入了用户的 id,那么如果用户的详细信息中的 id 可用,则必须显示。但它给了我标题所暗示的日志。
如果我能找到解决方案,这对我学习android会有帮助。
【问题讨论】:
您的传入响应似乎不是有效的 JSON 字符串 响应不是 JSON 类型。产生异常的行数是多少?你能显示日志响应的内容吗? (可能是连接到服务器的简单错误) @julien dumortier - W/System.err(1317): at com.example.vivagha.Search_Id_guna$SearchDetail.doInBackground(Search_Id_guna.java:151) 这是日志文件中显示的内容。 正如@Budius 所说,我也认为您无法与服务器通信。它应该显示查询返回的文本。在此响应中,我们希望看到如下消息:'Not Found
" 以便我们可以确认这是连接到服务器的错误 @juliendumortier - 执行 PHP 文件时出错。我将对 PHP 文件进行正确的更改。如果错误仍然存在,我将在此处发布 【参考方案1】:据我所知,问题在于您获取的是实际的 php 文件,而不是处理此类文件的结果。
这个问题实际上与android无关。尝试在您的网络浏览器上输入相同的地址,您将看到您为我们发布的同一个 PHP 文件。
您需要配置一个服务器来处理该 PHP 文件并返回 JSON 响应。
【讨论】:
由于某些原因,我没有提供服务器详细信息。 @juliendumortier:我执行了 PHP 文件,它给了我 - "id":"4","fname":"Gunaseelan","lname":"Guna","profilefor": “自我”,“年龄”:“0”,“成功”:1,“消息”:“找到”。但我无法显示结果。它没有显示任何值 @guna seelan 我在另一个应用程序中遇到同样的错误 @NitinKarale 结果以 java.lang.String 的类型出现。我们试图将其转换为 JSONObject。这就是问题所在。 @gunaseelan 在 PHP 文件中得到正确的结果。它工作正常。但突然所有文件都出现错误意味着登录和注册用户。它正在出错 解析数据时出错 org.json.JSONException: Value f type java.lang.String cannot be convert to JSONObject以上是关于解析数据 org.json.JSONException 时出错:Java.lang.String 类型的值 <!DOCTYPE 无法转换为 JSONObject的主要内容,如果未能解决你的问题,请参考以下文章