Ich habe verschiedene Dinge den ganzen Tag versucht, aber ich kann immer noch nicht analysieren diese JSON-Antwort. Ich habe erfolgreich eine Antwort von LinkedIn erhalten (ich weiß, weil ich es geloggt habe), und jetzt versuche ich, Werte daraus zu extrahieren, aber der Code, den ich verwende, erzeugt einen Fehler, der besagt, dass es keinen Wert von firstName
gibt. Meine zweite Log-Anweisung wird nicht gedruckt. Meine erste Log-Anweisung, die Antwort, ist unten unten gedruckt. Was mache ich falsch?Parse geschachtelte JSON-Antwort von LinkedIn
Meine Klasse, wo ich die API
package org.azurespot.awesomesde; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.TextView; import com.linkedin.platform.APIHelper; import com.linkedin.platform.errors.LIApiError; import com.linkedin.platform.listeners.ApiListener; import com.linkedin.platform.listeners.ApiResponse; import org.json.JSONException; import org.json.JSONObject; public class LinkedInLoggedInActivity extends AppCompatActivity { String urlLinkedIn = "https://api.linkedin.com/v1/people/~:(id,first-name,last-name)?format=json"; JSONObject results; TextView firstName; TextView lastName; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_linked_in_logged_in); firstName = (TextView)findViewById(R.id.textViewFirst); lastName = (TextView)findViewById(R.id.textViewLast); APIHelper apiHelper = APIHelper.getInstance(getApplicationContext()); apiHelper.getRequest(this, urlLinkedIn, new ApiListener() { @Override public void onApiSuccess(ApiResponse apiResponse) { // Success! Log.i("LINKEDIN RESPONSE: ", apiResponse.toString()); // 1st log try { results = new JSONObject(apiResponse.toString()); Log.i("NAME FROM LINKED IN: ", results.get("firstName").toString()); // 2nd log } catch (JSONException e) { e.printStackTrace(); } } @Override public void onApiError(LIApiError liApiError) { // Error making GET request! liApiError.printStackTrace(); } }); } // get first name public void linkedInFirst(View v){ try { firstName.setText(results.get("firstName").toString()); } catch (JSONException e) { e.printStackTrace(); } } // get last name public void linkedInLast(View v) { } }
Fehler von Logcat
05-08 18:58:38.227 18345-18345/org.azurespot.awesomesde W/System.err: org.json.JSONException: No value for firstName
05-08 18:58:38.227 18345-18345/org.azurespot.awesomesde W/System.err: at org.json.JSONObject.get(JSONObject.java:389)
05-08 18:58:38.227 18345-18345/org.azurespot.awesomesde W/System.err: at org.azurespot.awesomesde.LinkedInLoggedInActivity$1.onApiSuccess(LinkedInLoggedInActivity.java:42)
05-08 18:58:38.227 18345-18345/org.azurespot.awesomesde W/System.err: at com.linkedin.platform.APIHelper$1.onResponse(APIHelper.java:99)
05-08 18:58:38.227 18345-18345/org.azurespot.awesomesde W/System.err: at com.linkedin.platform.APIHelper$1.onResponse(APIHelper.java:95)
05-08 18:58:38.227 18345-18345/org.azurespot.awesomesde W/System.err: at com.android.volley.toolbox.JsonRequest.deliverResponse(JsonRequest.java:65)
05-08 18:58:38.227 18345-18345/org.azurespot.awesomesde W/System.err: at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99)
05-08 18:58:38.227 18345-18345/org.azurespot.awesomesde W/System.err: at android.os.Handler.handleCallback(Handler.java:739)
05-08 18:58:38.227 18345-18345/org.azurespot.awesomesde W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
05-08 18:58:38.227 18345-18345/org.azurespot.awesomesde W/System.err: at android.os.Looper.loop(Looper.java:145)
05-08 18:58:38.227 18345-18345/org.azurespot.awesomesde W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5835)
05-08 18:58:38.227 18345-18345/org.azurespot.awesomesde W/System.err: at java.lang.reflect.Method.invoke(Native Method)
05-08 18:58:38.227 18345-18345/org.azurespot.awesomesde W/System.err: at java.lang.reflect.Method.invoke(Method.java:372)
05-08 18:58:38.227 18345-18345/org.azurespot.awesomesde W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
05-08 18:58:38.227 18345-18345/org.azurespot.awesomesde W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
Einer meiner log Aussagen
nennen, die Antwort05-08 18:38:45.577 7028-7028/org.azurespot.awesomesde I/LINKEDIN RESPONSE:: {"StatusCode":200,"responseData":"{\n \"firstName\": \"AFirstName\",\n \"id\": \"hZvMRB-3Yg\",\n \"lastName\": \"ALastName\"\n}","Location":""}
Bitte überprüfen Sie Ihre JSON-Objekt eng. Gibt es einen FirstName-Schlüssel auf der obersten Ebene? –
@ cricket_007, tut mir leid, ich bin ziemlich neu in der Verwendung von JSON ... wo finde ich einen solchen Schlüssel? Ich habe nur die LinkedIn-Antwort, die wie eine JSON-Antwort aussieht, aber dann hat sie diesen StatusCode ... was mich ein wenig ablenkt. – Azurespot
Die Antwort, die Sie erhalten, hat 2 Schlüssel, einen statusCode und responseData. Sie müssen das verschachtelte Objekt von responseData abrufen, bevor Sie auf den ersten Namen zugreifen können. –