2015-04-16 4 views
0

Я пытаюсь использовать JSON с Android У меня есть ссылка, которая возвращает строку JSONJava строку в объект JSON

InputStream is = new URL(url).openStream(); 
BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8"))); 
String jsonText = readAll(rd); 
JSONObject json = new JSONObject(jsonText); 

но, сделав новый JSONObject (jsonText); он сокрушает.

Вот мой URL: http://igorsdomain.byethost3.com/getUser.php?username=SailorBoogy&password=qwerty&event=2222

Это возвращаемый объект: {"ID":"23","Username":"SailorBoogy","Password":"qwerty","eventID":"6"}

Я пытался также JSONObject(jsonText.replaceAll("\"" , "\\\\\"")); , но это не сработало.

В чем проблема? я использую это неправильно?

JSon Библиотеки:

org.json.JSONException; org.json.JSONObject; org.json.JSONStringer;

+1

Какой библиотеки JSON вы используете? JSON в Java, Джексоне и т. Д.? – emerssso

ответ

1

Прежде всего Получите ваш json в сетевой сети, например asynchronousTask.

DefaultHttpClient httpclient = new DefaultHttpClient(new BasicHttpParams()); 
HttpPost httppost = new HttpPost(http://someJSONUrl/jsonWebService); 
// Depends on your web service 
httppost.setHeader("Content-type", "application/json"); 

InputStream inputStream = null; 
String result = null; 
try { 
HttpResponse response = httpclient.execute(httppost);   
HttpEntity entity = response.getEntity(); 

inputStream = entity.getContent(); 
// json is UTF-8 by default 
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8); 
StringBuilder sb = new StringBuilder(); 

String line = null; 
while ((line = reader.readLine()) != null) 
{ 
    sb.append(line + "\n"); 
} 
result = sb.toString(); 
} catch (Exception e) { 
// Oops 
} 
finally { 
try{if(inputStream != null)inputStream.close();}catch(Exception squish){} 
} 

И чем разобрать его, как этот

try { 
     JSONObject jObject = new JSONObject(result); 
     Log.d("username", jObject.getString("Username")); 
     Toast.makeText(getApplicationContext(), jObject.getString("Username"), Toast.LENGTH_LONG).show(); 
     Log.d("Password", jObject.getString("Password")); 
     Log.d("eventID", jObject.getString("eventID")); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

Для получения дополнительной информации проверить this

0

Без LogCat это трудно сказать, но, возможно, вы делаете сетевые операции на MainThread и Android жалуется с этим (потому что это блокирующая операция, так что интерфейс будет замерзать), бросая android.os. NetworkOnMainThreadException. Если это так, вы можете решить, выполнив эту операцию в другом потоке (например, используя AsyncTask или внешнюю библиотеку, такую ​​как AndroidAsyncHttp)

2

Я настоятельно рекомендую вам использовать сетевые библиотеки, такие как волейбол, Loopj, Okhttp для сетевых операций.

Вот код вашей проблемы.

class LongOpreation extends AsyncTask<String, Void, String> { 

    @Override 
    protected String doInBackground(String... params) { 

     String str = ""; 

     try { 
      str = sendGetRequest(); 

     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     return str; 
    } 

    public String sendGetRequest() throws MalformedURLException { 
     StringBuilder response = new StringBuilder(); 
     String requrl = ""; 
     requrl = "http://igorsdomain.byethost3.com/getUser.php?username=SailorBoogy&password=qwerty&event=2222"; 
     response = requestExecuter(requrl); 


     return response.toString(); 

    } 


    @Override 
    protected void onPostExecute(String result) { 
     try { 
      JSONObject jsonObject = new JSONObject(result); 
      System.out.println("json-----------------------"+jsonObject); 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 

    @Override 
    protected void onPreExecute() { 

    } 
    public StringBuilder requestExecuter(String str) { 
     StringBuilder response = new StringBuilder(); 
     try { 
      URL url = new URL(str); 

      HttpURLConnection httpconn = (HttpURLConnection) url 
        .openConnection(); 
      httpconn.setConnectTimeout(5000); 
      httpconn.setReadTimeout(10000); 

      if (httpconn.getResponseCode() == HttpURLConnection.HTTP_OK) { 
       BufferedReader input = new BufferedReader(
         new InputStreamReader(httpconn.getInputStream())); 
       String strLine = null; 
       while ((strLine = input.readLine()) != null) { 
        response.append(strLine); 

       } 
       input.close(); 
      } 
      } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return response; 
    } 
} 

Simpley вызов new LongOperation().execute(""); и вы сделали

Смежные вопросы