【问题标题】:JSON Exception : String Cannot be convert to JSONObject in androidJSON 异常:字符串无法在 android 中转换为 JSONObject
【发布时间】:2014-02-27 07:28:11
【问题描述】:

我正在使用 JSON 从 mysql 数据库中获取数据并在 LIstview 项中设置数据。我的 Java 代码工作正常。但我无法在列表视图中获取值。 json值如何转换。

我该如何解决这个问题。

      02-27 12:47:17.548: W/System.err(637): org.json.JSONException: Value <!DOCTYPEHTMLPUBLIC"- of type java.lang.String cannot be converted to JSONObject
      02-27 12:47:17.557: W/System.err(637):    at  org.json.JSON.typeMismatch(JSON.java:107)
      02-27 12:47:17.557: W/System.err(637):    at org.json.JSONObject.<init>(JSONObject.java:158)
      02-27 12:47:17.557: W/System.err(637):    at org.json.JSONObject.<init>(JSONObject.java:171)
      02-27 12:47:17.557: W/System.err(637):    at com.amplio.upshot.AddToOutlet.onCreate(AddToOutlet.java:42)
      02-27 12:47:17.557: W/System.err(637):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
      02-27 12:47:17.568: W/System.err(637):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
      02-27 12:47:17.568: W/System.err(637):    at android.app.ActivityThread.startActivityNow(ActivityThread.java:2503)
      02-27 12:47:17.568: W/System.err(637):    at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
      02-27 12:47:17.568: W/System.err(637):    at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
      02-27 12:47:17.568: W/System.err(637):    at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:651)
      02-27 12:47:17.568: W/System.err(637):    at android.widget.TabHost.setCurrentTab(TabHost.java:323)
      02-27 12:47:17.568: W/System.err(637):    at com.amplio.upshot.MainActivity.onCreate(MainActivity.java:112)
      02-27 12:47:17.568: W/System.err(637):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
      02-27 12:47:17.578: W/System.err(637):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
      02-27 12:47:17.578: W/System.err(637):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
      02-27 12:47:17.578: W/System.err(637):    at android.app.ActivityThread.access$2300(ActivityThread.java:125)
      02-27 12:47:17.578: W/System.err(637):    at           android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
      02-27 12:47:17.578: W/System.err(637):    at android.os.Handler.dispatchMessage(Handler.java:99)
      02-27 12:47:17.578: W/System.err(637):    at android.os.Looper.loop(Looper.java:123)
      02-27 12:47:17.578: W/System.err(637):    at android.app.ActivityThread.main(ActivityThread.java:4627)
      02-27 12:47:17.578: W/System.err(637):    at java.lang.reflect.Method.invokeNative(Native Method)
      02-27 12:47:17.578: W/System.err(637):    at java.lang.reflect.Method.invoke(Method.java:521)
      02-27 12:47:17.578: W/System.err(637):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
      02-27 12:47:17.578: W/System.err(637):    at         com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
      02-27 12:47:17.588: W/System.err(637):    at dalvik.system.NativeStart.main(Native Method)

我的 JSON 结果

{
"customer": [
    {
        "success": "1",
        "bus_name": "radeonpixels",
        "bus_id": "B108"
    },
    {
        "success": "1",
        "bus_name": "Om Sweets",
        "bus_id": "B109"
    }
]
}

AddToOutlet.java

 public class AddToOutlet extends Activity {
SessionManager session;
String success, cus_id, bus_id;
ArrayList<Item> item;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.addtooutlet);
    session = new SessionManager(getApplicationContext());
    session.checkLoginback();

    item = new ArrayList<Item>();
    // get user data from session
    HashMap<String, String> user = session.getUserDetails();
    // ID
    final String cus_id = user.get(SessionManager.KEY_ID);
    ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
    postParameters.add(new BasicNameValuePair("cus_id", cus_id));
    String response = null;
    try {
        response = LoginHttpClient.executeHttpPost(
                "http://10.0.2.2/android_api/add_to_outlet.php",
                postParameters);
        response = response.toString();
        response = response.replaceAll("\\s+", "");
        JSONObject json = new JSONObject(response);
        JSONArray jArray = json.getJSONArray("customer");
        for (int i = 0; i < jArray.length(); i++) {
            JSONObject json_data = jArray.getJSONObject(i);
            Item it = new Item();
            it.setBusname(json_data.getString("bus_name"));
            it.setBusid(json_data.getString("bus_id"));

            item.add(it);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

    ListView lv = (ListView) findViewById(R.id.list);
    MyAdapter adapter = new MyAdapter(AddToOutlet.this,
            R.layout.addtooutlet_list_item, item);
    lv.setAdapter(adapter);
}
}

【问题讨论】:

  • MainActivity 中的第 112 行是哪一个? at com.amplio.upshot.MainActivity.onCreate(MainActivity.java:112)
  • tabHost.setCurrentTab(tab);
  • &lt;!DOCTYPEHTMLPUBLIC" 确保您收到 json 响应。它看起来像一个 xml
  • 当您使用浏览器导航http://10.0.2.2/android_api/add_to_outlet.php 时会发生什么?你确定只有{ "customer" : ...
  • @Zefnus 是的,我知道了。

标签: android json listview android-listview


【解决方案1】:

首先使用适当的内容和标准代码。

编写基本的网络发帖操作,如:

HttpClient client = new DefaultHttpClient();
HttpPost postStuff = new HttpPost("http://10.0.2.2/android_api/add_to_outlet.php");

然后使用 post 执行客户端并将其保存在 HttpResponse 变量中,而不是简单的字符串中。

你做了什么..String response = null;

但你必须这样做:

 HttpResponse response = client.execute(postStuff); 

现在你可以通过response.getEntity().getContent()获取服务器返回或者你也可以像response.getStatusLine.getStatusCode()一样查看它的状态。

问题:

    response = response.toString();
    response = response.replaceAll("\\s+", "");

这里你删除了字符串中的所有空格,所以很难识别JsonObject。而且我认为这给解析带来了问题。

如果返回类型是完美的,那么你的代码是这样的:

HttpClient client = new DefaultHttpClient();
HttpPost postStuff = new HttpPost("http://10.0.2.2/android_api/add_to_outlet.php");
HttpResponse response = null;
try{
response = client.execute(postStuff);
Bufferedreader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent());

String mReturnDta = "";
while((data = reader.readLine()) != null){
JsonObject json = new JsonObject(mReturnDta);
//Now fetch the jsonarray and do whatever you want...
}    
}catch(...)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    • 2021-11-15
    • 2012-05-12
    • 1970-01-01
    • 2017-01-27
    • 2017-09-01
    • 1970-01-01
    相关资源
    最近更新 更多