Не получает вывод от JSON от URL
Я пытаюсь разобрать JSON, но не могу получить. Кто-нибудь может помочь мне узнать, как это получить:
{
"firstName": "****",
"headline": "Software Engineer",
"id": "Y8gyiQS0gM",
"lastName": "****",
"location": {
"country": {"code": "in"},
"name": "Bengaluru Area, India"
},
"pictureUrl": "",
"siteStandardProfileRequest": {"url": ""}
}
Я использовал этот код, чтобы получить, но не получил никакого результата в журнале.
DefaultHttpClient httpclient = new DefaultHttpClient();
try {
HttpGet httpget = new HttpGet("url");
HttpResponse response = httpclient.execute(httpget);
String jsonResp=EntityUtils.toString(response.getEntity());
Log.d("HTTP","Rsponse : "+ jsonResp);
JSONObject jsonObject = new JSONObject(jsonResp);
String firstname = jsonObject.getString("firstName");
String id = jsonObject.getString("id");
String headline = jsonObject.getString("headline");
String lastName = jsonObject.getString("lastName");
//String pictureUrl = jsonObject2.getString("pictureUrl");
Log.d("HTTP", "firstname : " + firstname.toString() + "id" + id.toString());
} ...
Я написал этот код для просмотра профиля пользователя. Но ничего не получил в результате.
РЕДАКТИРОВАТЬ:
public class ViewProfileActivity extends ListActivity {
Button userProfile;
TextView tv;
private static final String TAG_ID = "id";
private static final String TAG_FNAME = "firstname";
private static final String TAG_LNAME = "lastname";
private static final String TAG_HLINE = "headline";
private static final String TAG_PURL = "pictureUrl";
private static final String TAG_URL = "url";
private ProgressDialog pDialog;
ArrayList<HashMap<String, String>> contactList = null;
String url="...."
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view_user);
userProfile = (Button) findViewById(R.id.view);
tv=(TextView)findViewById(R.id.textView1);
userProfile.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
new GetContacts().execute();
}
class GetContacts extends AsyncTask<Void, String, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// Showing progress dialog
pDialog = new ProgressDialog(ViewProfileActivity.this);
pDialog.setMessage("Please wait...");
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected Void doInBackground(Void... params) {
DefaultHttpClient httpclient = new DefaultHttpClient();
try {
HttpGet httpget = new HttpGet(
"url");
HttpResponse response = httpclient.execute(httpget);
String jsonResp = EntityUtils.toString(response.getEntity());
Log.d("HTTP","Rsponse : "+ jsonResp);
JSONObject jsonObject = new JSONObject(jsonResp);
String firstname = jsonObject.getString("firstName");
String id = jsonObject.getString("id");
String headline = jsonObject.getString("headline");
String lastname = jsonObject.getString("lastName");
String pictureUrl = jsonObject.getString("pictureUrl");
JSONObject jsonObject2 = jsonObject
.getJSONObject("siteStandardProfileRequest");
String url = jsonObject2.getString("url");
Log.d("HTTP", "firstname : " + firstname + "\n" + "id :"
+ id + "\n" + "headline : " + headline + "\n"
+ "lastName :" + lastname + "\n" + "pictureUrl :"
+ pictureUrl + "\n" + "Url :" + url);
HashMap<String, String> contact = new HashMap<String, String>();
contact.put(TAG_ID, id);
contact.put(TAG_FNAME, firstname);
contact.put(TAG_LNAME, lastname);
contact.put(TAG_HLINE, headline);
contact.put(TAG_PURL, pictureUrl);
contact.put(TAG_URL, url);
contactList.add(contact);
tv.setText((CharSequence) contactList);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
// Dismiss the progress dialog
if (pDialog.isShowing())
pDialog.dismiss();
ListAdapter adapter = new SimpleAdapter(
LinkedInSampleActivity.this, contactList,
R.layout.list_item, new String[] {TAG_URL,TAG_FNAME}, new int[]{R.id.imageView1,R.id.textView1 });
setListAdapter(adapter);
}
}
});
}
}
2 ответа
Используйте этот код, чтобы сделать HTTP-запрос (для url
передать в свой URL)
HttpParams params = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(params, 500);
Client = new DefaultHttpClient(params);
httpget = new HttpGet(url);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
mContent = Client.execute(httpget, responseHandler);
Затем используйте это, чтобы получить ваши данные:
JSONObject jsonObject = new JSONObject(mContent);
String firstname = jsonObject.getString("firstName");
String id = jsonObject.getString("id");
String headline = jsonObject.getString("headline");
String lastName = jsonObject.getString("lastName");
Примечание::
- для
url
Вы должны передать свой URL-адрес, из которого вы пытаетесь получить ответ JSON - Также поместите приведенный выше код внутри
Asynchronous task
в противном случае происходит сбой, потому что, поскольку вы делаете сетевой запрос
Надеюсь это поможет! Вернитесь назад, если у вас есть какие-либо ошибки.
{РЕДАКТИРОВАТЬ}
public class ViewProfileActivity extends ListActivity {
Button userProfile;
TextView tv;
private static final String TAG_ID = "id";
private static final String TAG_FNAME = "firstname";
private static final String TAG_LNAME = "lastname";
private static final String TAG_HLINE = "headline";
private static final String TAG_PURL = "pictureUrl";
private static final String TAG_URL = "url";
private ProgressDialog pDialog;
ArrayList<HashMap<String, String>> contactList = null;
String url="...."
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view_user);
userProfile = (Button) findViewById(R.id.view);
tv=(TextView)findViewById(R.id.textView1);
userProfile.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
new GetContacts().execute();
}
class GetContacts extends AsyncTask<Void, String, Void> {
String firstname;
String id;
String headline;
String lastname;
String pictureUrl;
@Override
protected void onPreExecute() {
super.onPreExecute();
// Showing progress dialog
pDialog = new ProgressDialog(ViewProfileActivity.this);
pDialog.setMessage("Please wait...");
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected Void doInBackground(Void... params) {
DefaultHttpClient httpclient = new DefaultHttpClient();
try {
HttpGet httpget = new HttpGet(
"url");
HttpResponse response = httpclient.execute(httpget);
String jsonResp = EntityUtils.toString(response.getEntity());
Log.d("HTTP","Rsponse : "+ jsonResp);
JSONObject jsonObject = new JSONObject(jsonResp);
firstname = jsonObject.getString("firstName");
id = jsonObject.getString("id");
headline = jsonObject.getString("headline");
lastname = jsonObject.getString("lastName");
pictureUrl = jsonObject.getString("pictureUrl");
JSONObject jsonObject2 = jsonObject
.getJSONObject("siteStandardProfileRequest");
String url = jsonObject2.getString("url");
Log.d("HTTP", "firstname : " + firstname + "\n" + "id :"
+ id + "\n" + "headline : " + headline + "\n"
+ "lastName :" + lastname + "\n" + "pictureUrl :"
+ pictureUrl + "\n" + "Url :" + url);
HashMap<String, String> contact = new HashMap<String, String>();
contact.put(TAG_ID, id);
contact.put(TAG_FNAME, firstname);
contact.put(TAG_LNAME, lastname);
contact.put(TAG_HLINE, headline);
contact.put(TAG_PURL, pictureUrl);
contact.put(TAG_URL, url);
contactList.add(contact);
tv.setText((CharSequence) contactList);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
// Dismiss the progress dialog
if (pDialog.isShowing())
pDialog.dismiss();
ListAdapter adapter = new SimpleAdapter(
LinkedInSampleActivity.this, contactList,
R.layout.list_item, new String[] {TAG_URL,TAG_FNAME}, new int[]{R.id.imageView1,R.id.textView1 });
setListAdapter(adapter);
// SET your Text Views here
//
//USE the variables stored globally in your Aynnc Class
//
//
}
}
});
}
}
Для разбора:
Если вы достигнете до Log.d("HTTP","Rsponse : "+ jsonResp);
Вы можете использовать Gson для разбора.
public class JsonResponseModel {
String firstName;
String lastName;
String headline;
String id;
//rest of the fields
//getters setters functions
}
Для именования расхождений (согласно переменным в веб-сервисе) в классе модели можно использовать аннотации типа @SerializedName
,
Затем, используя его с Gson:
Gson gson = new Gson();
JsonResponseModel responseModelObject = new JsonResponseModel();
responseModelObject= gson.fromJson(jsonResp, JsonResponseModel.class);
//now you have the data in responseModelObject
NetworkOnMainThreadException:
Почему я пишу "Если", вы достигаете... в первой строке ответа.
С кодом, размещенным в вопросе, вы можете вызывать сетевую операцию напрямую (?), Вы можете столкнуться с этим исключением.