2014-02-27 72 views
0

我从MySQL数据库中使用JSON获取数据并在LIstview项目中设置数据。我的Java代码工作正常。但我无法在listview中获取值。如何json值转换。JSON异常:字符串不能转换为Android中的JSONObject

我怎么能这样做。

 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); 
} 
} 
+0

哪一个是在MainActivity行号112? '在com.amplio.upshot.MainActivity.onCreate(MainActivity.java:112)' –

+0

tabHost.setCurrentTab(tab); – Amardeepvijay

+1

'<!DOCTYPEHTMLPUBLIC'''确定你得到了json响应,它看起来像一个xml – Raghunandan

回答

1

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

写基本网络发布操作,如:

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

然后用后在的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(...) 
相关问题