价值<;无法在android上将java.lang.String类型的br转换为JSONObject
这是我的java代码,我遇到了以下问题:W/System.err(1362):org.json.JSONException:Value价值<;无法在android上将java.lang.String类型的br转换为JSONObject,android,json,Android,Json,这是我的java代码,我遇到了以下问题:W/System.err(1362):org.json.JSONException:Value public class Main extends Activity { // label to display gcm messages TextView lblMessage; Controller aController; @Override public void onCreate(Bundle savedI
public class Main extends Activity {
// label to display gcm messages
TextView lblMessage;
Controller aController;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/******************* Intialize Database *************/
DBAdapter.init(this);
// Get Global Controller Class object
// (see application tag in AndroidManifest.xml)
aController = (Controller) getApplicationContext();
// Check if Internet present
if (!aController.isConnectingToInternet()) {
// Internet Connection is not present
aController.showAlertDialog(Main.this,
"Internet Connection Error",
"Please connect to Internet connection", false);
// stop executing code by return
return;
}
//Check device contains self information in sqlite database or not.
int vDevice = DBAdapter.validateDevice();
if(vDevice > 0)
{
// Launch Main Activity
Intent i = new Intent(getApplicationContext(), GridViewExample.class);
startActivity(i);
finish();
}
else
{
String deviceIMEI = "";
if(Config.SECOND_SIMULATOR){
//Make it true in CONFIG if you want to open second simutor
// for testing actually we are using IMEI number to save a unique device
deviceIMEI = "000000000000000";
}
else
{
// GET IMEI NUMBER
TelephonyManager tManager = (TelephonyManager) getBaseContext()
.getSystemService(Context.TELEPHONY_SERVICE);
deviceIMEI = tManager.getDeviceId();
}
/******* Validate device from server ******/
// WebServer Request URL
String serverURL = Config.YOUR_SERVER_URL+"validate_device.php";
// Use AsyncTask execute Method To Prevent ANR Problem
LongOperation serverRequest = new LongOperation();
serverRequest.execute(serverURL,deviceIMEI,"","");
}
}
// Class with extends AsyncTask class
public class LongOperation extends AsyncTask<String, Void, String> {
// Required initialization
//private final HttpClient Client = new DefaultHttpClient();
// private Controller aController = null;
private String Error = null;
private ProgressDialog Dialog = new ProgressDialog(Main.this);
String data ="";
int sizeData = 0;
protected void onPreExecute() {
// NOTE: You can call UI Element here.
//Start Progress Dialog (Message)
Dialog.setMessage("Validating Device..");
Dialog.show();
}
// Call after onPreExecute method
protected String doInBackground(String... params) {
/************ Make Post Call To Web Server ***********/
BufferedReader reader=null;
String Content = "";
// Send data
try{
// Defined URL where to send data
URL url = new URL(params[0]);
// Set Request parameter
if(!params[1].equals(""))
data +="&" + URLEncoder.encode("data1", "UTF-8") + "="+params[1].toString();
if(!params[2].equals(""))
data +="&" + URLEncoder.encode("data2", "UTF-8") + "="+params[2].toString();
if(!params[3].equals(""))
data +="&" + URLEncoder.encode("data3", "UTF-8") + "="+params[3].toString();
Log.i("GCM",data);
// Send POST data request
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write( data );
wr.flush();
// Get the server response
reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuilder sb = new StringBuilder();
String line = null;
// Read Server Response
while((line = reader.readLine()) != null)
{
// Append server response in string
sb.append(line + "\n");
}
// Append Server Response To Content String
Content = sb.toString();
}
catch(Exception ex)
{
Error = ex.getMessage();
}
finally
{
try
{
reader.close();
}
catch(Exception ex) {}
}
/*****************************************************/
return Content;
}
protected void onPostExecute(String Content) {
// NOTE: You can call UI Element here.
// Close progress dialog
Dialog.dismiss();
if (Error != null) {
} else {
// Show Response Json On Screen (activity)
/****************** Start Parse Response JSON Data *************/
aController.clearUserData();
JSONObject jsonResponse;
try {
/****** Creates a new JSONObject with name/value mappings from the JSON string. ********/
jsonResponse = new JSONObject(Content);
/***** Returns the value mapped by name if it exists and is a JSONArray. ***/
/******* Returns null otherwise. *******/
JSONArray jsonMainNode = jsonResponse.optJSONArray("Android");
/*********** Process each JSON Node ************/
int lengthJsonArr = jsonMainNode.length();
for(int i=0; i < lengthJsonArr; i++)
{
/****** Get Object for each JSON node.***********/
JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
/******* Fetch node values **********/
String Status = jsonChildNode.optString("status").toString();
Log.i("GCM","---"+Status);
// IF server response status is update
if(Status.equals("update")){
String RegID = jsonChildNode.optString("regid").toString();
String Name = jsonChildNode.optString("name").toString();
String Email = jsonChildNode.optString("email").toString();
String IMEI = jsonChildNode.optString("imei").toString();
// add device self data in sqlite database
DBAdapter.addDeviceData(Name, Email,RegID, IMEI);
// Launch GridViewExample Activity
Intent i1 = new Intent(getApplicationContext(), GridViewExample.class);
startActivity(i1);
finish();
Log.i("GCM","---"+Name);
}
else if(Status.equals("install")){
// Launch RegisterActivity Activity
Intent i1 = new Intent(getApplicationContext(), RegisterActivity.class);
startActivity(i1);
finish();
}
}
/****************** End Parse Response JSON Data *************/
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
public类主扩展活动{
//显示gcm消息的标签
文本视图LBL消息;
控制器;控制器;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*******************初始化数据库*************/
DBAdapter.init(this);
//获取全局控制器类对象
//(请参阅AndroidManifest.xml中的应用程序标记)
a控制器=(控制器)getApplicationContext();
//检查互联网是否存在
如果(!aController.isConnectingToInternet()){
//Internet连接不存在
aController.showAlertDialog(Main.this,
“Internet连接错误”,
“请连接到Internet连接”,错误);
//通过返回停止执行代码
回来
}
//检查设备是否在sqlite数据库中包含自身信息。
int vDevice=DBAdapter.validateDevice();
如果(虚拟设备>0)
{
//开展主要活动
Intent i=newintent(getApplicationContext(),GridViewExample.class);
星触觉(i);
完成();
}
其他的
{
字符串deviceimi=“”;
if(配置第二个模拟程序){
//如果要打开第二个simutor,请在配置中设置为true
//对于测试,实际上我们使用IMEI编号来保存唯一的设备
DeviceMei=“000000000000000”;
}
其他的
{
//获取IMEI号码
TelephonyManager tManager=(TelephonyManager)getBaseContext()
.getSystemService(上下文.电话服务);
DeviceMei=tManager.getDeviceId();
}
/*******从服务器验证设备******/
//Web服务器请求URL
String serverURL=Config.YOUR_SERVER_URL+“validate_device.php”;
//使用AsyncTask执行方法防止ANR问题
LongOperation serverRequest=新的LongOperation();
serverRequest.execute(serverURL,deviceIMEI,“,”);
}
}
//使用扩展的AsyncTask类初始化
公共类LongOperation扩展了异步任务{
//所需初始化
//私有最终HttpClient客户端=新的DefaultHttpClient();
//专用控制器aController=null;
私有字符串错误=null;
private ProgressDialog=新建ProgressDialog(Main.this);
字符串数据=”;
int sizeData=0;
受保护的void onPreExecute(){
//注意:您可以在这里调用UI元素。
//启动进度对话框(消息)
setMessage(“验证设备…”);
Dialog.show();
}
//在onPreExecute方法之后调用
受保护的字符串doInBackground(字符串…参数){
/************对Web服务器进行Post调用***********/
BufferedReader reader=null;
字符串内容=”;
//发送数据
试一试{
//已定义用于发送数据的URL
URL=新URL(参数[0]);
//设置请求参数
如果(!params[1]。等于(“”)
数据+=“&”+URLCoder.encode(“数据1”、“UTF-8”)+“=”+params[1].toString();
如果(!params[2]。等于(“”)
数据+=“&”+URLCoder.encode(“数据2”,“UTF-8”)+“=”+params[2].toString();
如果(!params[3]。等于(“”)
数据+=“&”+URLCoder.encode(“数据3”,“UTF-8”)+“=”+params[3].toString();
Log.i(“GCM”,数据);
//发送POST数据请求
URLConnection conn=url.openConnection();
连接设置输出(真);
OutputStreamWriter wr=新的OutputStreamWriter(conn.getOutputStream());
wr.写入(数据);
wr.flush();
//获取服务器响应
reader=新的BufferedReader(新的InputStreamReader(conn.getInputStream());
StringBuilder sb=新的StringBuilder();
字符串行=null;
//读取服务器响应
而((line=reader.readLine())!=null)
{
//在字符串中追加服务器响应
sb.追加(第+行“\n”);
}
//将服务器响应附加到内容字符串
Content=sb.toString();
}
捕获(例外情况除外)
{
Error=ex.getMessage();
}
最后
{
尝试
{
reader.close();
}
捕获(例外情况除外){}
}
/*****************************************************/
返回内容;
}
受保护的void onPostExecute(字符串内容){
//注意:您可以在这里调用UI元素。
//关闭进度对话框
Dialog.dismise();
if(错误!=null){
}否则{
//在屏幕上显示响应Json(活动)
<?php
require_once('loader.php');
$imei = $_REQUEST['data1'];
$regID = $_REQUEST['data2'];
//$resultUsers = getRegIDUser($regID);
$resultUsers = getIMEIUser($imei);
if ($resultUsers != false)
$NumOfUsers = mysql_num_rows($resultUsers);
else
$NumOfUsers = 0;
$jsonData = array();
if ($NumOfUsers > 0) {
while ($rowUsers = mysql_fetch_array($resultUsers)) {
$jsonTempData = array();
$jsonTempData['regid'] = $rowUsers["gcm_regid"];
$jsonTempData['name'] = $rowUsers["name"];
$jsonTempData['email'] = $rowUsers["email"];
$jsonTempData['imei'] = $rowUsers["imei"];
$jsonTempData['status'] = "update";
$jsonData[] = $jsonTempData;
}
}
else{
$jsonTempData = array();
$jsonTempData['regid'] = "";
$jsonTempData['name'] = "";
$jsonTempData['email'] = "";
$jsonTempData['imei'] = "";
$jsonTempData['status'] = "install";
$jsonData[] = $jsonTempData;
}
$outputArr = array();
$outputArr['Android'] = $jsonData;
// Encode Array To JSON Data
print_r( json_encode($outputArr));
?>
04-16 12:54:57.876: W/System.err(1603): org.json.JSONException: Value <br of type java.lang.String cannot be converted to JSONObject
04-16 12:54:57.916: W/System.err(1603): at org.json.JSON.typeMismatch(JSON.java:111)
04-16 12:54:57.916: W/System.err(1603): at org.json.JSONObject.<init>(JSONObject.java:158)
04-16 12:54:57.916: W/System.err(1603): at org.json.JSONObject.<init>(JSONObject.java:171)
04-16 12:54:57.916: W/System.err(1603): at com.androidexample.mobilegcm.Main$LongOperation.onPostExecute(Main.java:213)
04-16 12:54:57.926: W/System.err(1603): at com.androidexample.mobilegcm.Main$LongOperation.onPostExecute(Main.java:1)
04-16 12:54:57.926: W/System.err(1603): at android.os.AsyncTask.finish(AsyncTask.java:631)
04-16 12:54:57.946: W/System.err(1603): at android.os.AsyncTask.access$600(AsyncTask.java:177)
04-16 12:54:57.976: W/System.err(1603): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
04-16 12:54:57.976: W/System.err(1603): at android.os.Handler.dispatchMessage(Handler.java:99)
04-16 12:54:57.976: W/System.err(1603): at android.os.Looper.loop(Looper.java:137)
04-16 12:54:58.007: W/System.err(1603): at android.app.ActivityThread.main(ActivityThread.java:5041)
04-16 12:54:58.007: W/System.err(1603): at java.lang.reflect.Method.invokeNative(Native Method)
04-16 12:54:58.016: W/System.err(1603): at java.lang.reflect.Method.invoke(Method.java:511)
04-16 12:54:58.026: W/System.err(1603): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
04-16 12:54:58.036: W/System.err(1603): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
04-16 12:54:58.036: W/System.err(1603): at dalvik.system.NativeStart.main(Native Method)
04-16 15:50:10.575: I/returning(1579): <br />
04-16 15:50:10.575: I/returning(1579): <font size='1'><table class='xdebug-error xe-notice' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
04-16 15:50:10.575: I/returning(1579): <tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Notice: Undefined index: data2 in C:\wamp\www\gcm_server_files\validate_device.php on line <i>6</i></th></tr>
04-16 15:50:10.575: I/returning(1579): <tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
04-16 15:50:10.575: I/returning(1579): <tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
04-16 15:50:10.575: I/returning(1579): <tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0193</td><td bgcolor='#eeeeec' align='right'>145240</td><td bgcolor='#eeeeec'>{main}( )</td><td title='C:\wamp\www\gcm_server_files\validate_device.php' bgcolor='#eeeeec'>..\validate_device.php<b>:</b>0</td></tr>
04-16 15:50:10.575: I/returning(1579): </table></font>
04-16 15:50:10.575: I/returning(1579): {"Android":[{"regid":"","name":"","email":"","imei":"","status":"install"}]}
04-16 16:17:49.925: W/System.err(4958): org.json.JSONException: Expected ':' after main at character 6 of {main}( )</td><td title='C:\wamp\www\gcm_server_files\validate_device.php' bgcolor='#eeeeec'>..\validate_device.php<b>:</b>0</td></tr>
04-16 16:17:49.925: W/System.err(4958): </table></font>
04-16 16:17:49.925: W/System.err(4958): {"Android":[{"regid":"","name":"","email":"","imei":"","status":"install"}]}
jsonResponse = new JSONObject(Content);
int jsonStart = Content.indexOf("{");
int jsonEnd = Content.lastIndexOf("}");
if (jsonStart >= 0 && jsonEnd >= 0 && jsonEnd > jsonStart) {
Content = Content.substring(jsonStart, jsonEnd + 1);
} else {
// deal with the absence of JSON content here
}
Content = Content.replaceFirst("<font>.*?</font>", "");
error_reporting = E_ALL
error_reporting = E_ALL ^ E_DEPRECATED
error_reporting(E_ALL ^ E_DEPRECATED);