2016-07-25 14 views
0

zu analysieren, versuchen Sie, hier spezifisch zu sein. Also ich habe den grundlegendsten möglichen Code erstellt, nur um es zu testen, und ich bin immer noch nicht in der Lage, die Daten zu bekommen, bitte helfen Sie! Hier ist mein Code:Wie JSON-Daten mit Retrofit auf Android

dies json Ausgabe auf meinem lokalen Server: http://localhost:8080/KokosinjacRestfull/rest/textService/mudriPevci

[{ "id": 1, "Unter": "MudriPevci", "title": "Mujo i haso "," description ":" Krenuli do Grada "," Autor ":" luka "," Datum ":" 2016-06-13 "}, {" id ": 3," subCategory ":" mudriPevci ", "title": "Perica", "Beschreibung": "Pa auf je napravio Haos", "Autor": "luka", "Datum": "2016.06.13"}]

Text. Klasse:

package kokosinjac.com.digiart.koktest.models; 

import com.google.gson.annotations.Expose; 
import com.google.gson.annotations.SerializedName; 


public class Text { 

@SerializedName("id") 
@Expose 
private Integer id; 
@SerializedName("subCategory") 
@Expose 
private String subCategory; 
@SerializedName("title") 
@Expose 
private String title; 
@SerializedName("description") 
@Expose 
private String description; 
@SerializedName("author") 
@Expose 
private String author; 
@SerializedName("date") 
@Expose 
private String date; 

/** 
* No args constructor for use in serialization 
* 
*/ 


/** 
* 
* @param id 
* @param author 
* @param title 
* @param subCategory 
* @param description 
* @param date 
*/ 


/** 
* 
* @return 
* The id 
*/ 
public Integer getId() { 
    return id; 
} 

/** 
* 
* @param id 
* The id 
*/ 
public void setId(Integer id) { 
    this.id = id; 
} 

/** 
* 
* @return 
* The subCategory 
*/ 
public String getSubCategory() { 
    return subCategory; 
} 

/** 
* 
* @param subCategory 
* The subCategory 
*/ 
public void setSubCategory(String subCategory) { 
    this.subCategory = subCategory; 
} 

/** 
* 
* @return 
* The title 
*/ 
public String getTitle() { 
    return title; 
} 

/** 
* 
* @param title 
* The title 
*/ 
public void setTitle(String title) { 
    this.title = title; 
} 

/** 
* 
* @return 
* The description 
*/ 
public String getDescription() { 
    return description; 
} 

/** 
* 
* @param description 
* The description 
*/ 
public void setDescription(String description) { 
    this.description = description; 
} 

/** 
* 
* @return 
* The author 
*/ 
public String getAuthor() { 
    return author; 
} 

/** 
* 
* @param author 
* The author 
*/ 
public void setAuthor(String author) { 
    this.author = author; 
} 

/** 
* 
* @return 
* The date 
*/ 
public String getDate() { 
    return date; 
} 

/** 
* 
* @param date 
* The date 
*/ 
public void setDate(String date) { 
    this.date = date; 
} 

}

Api interface.class:

Paket kokosinjac.com.digiart.koktest.retrofit;

importieren java.util.ArrayList;

importieren kokosinjac.com.digiart.koktest.models.Text; Import Nachrüstung2.Anrufen; importiere retrofit2.http.GET; importiere retrofit2.http.Path;

öffentliche Schnittstelle RetrofitAPInterface {

@GET("rest/textService/{subCategory}") 
Call<ArrayList<Text>> getText(@Path("subCategory") String subCat); 

}

Klasse, die Daten auf dem Handy anzeigt (Sie brauchen keine Aufmerksamkeit auf einige Strings zu zahlen, schauen Sie in die Retrofit-Teil, i; habe es so einfach gemacht, wie ich kann, subCatData.class:

public static final String BASE_URL ="http://localhost:8080/KokosinjacRestfull/"; 
HashMap<String,String> dataArr; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_sub_cat_data); 
    final TextView tView = (TextView) findViewById(R.id.textView); 
    Intent intent = getIntent(); 
    String urlSecondPartBefore = intent.getStringExtra("passedSubCat"); 
    String urlSecondPartAfter = urlSecondPartBefore.replaceAll("\\s", ""); 
    String urlFirstPart = intent.getStringExtra("passedUrlFirstPart"); 
    String catName = intent.getStringExtra("passedCatName"); 
    String data = null; 
    // TextView test = (TextView) findViewById(R.id.test); 


    Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl(BASE_URL) 
      .addConverterFactory(GsonConverterFactory.create()) 
      .build(); 
    RetrofitAPInterface apiService = retrofit.create(RetrofitAPInterface.class); 
    Call<ArrayList<Text>> call = apiService.getText("mudriPevci"); 
    call.enqueue(new Callback<ArrayList<Text>>() { 
     @Override 
     public void onResponse(Call<ArrayList<Text>> call, Response<ArrayList<Text>> response) { 
      int statusCode = response.code(); 
      ArrayList<Text> textArray = response.body(); 
      for (Text t : textArray){ 
       tView.setText(t.getDescription()); 
      } 
      // Log.i("DATA", "onResponse: "+text.getId()); 
     } 

     @Override 
     public void onFailure(Call<ArrayList<Text>> call, Throwable t) { 

     } 
    }); 

} 

}

Ich bin mir bewusst, dass die ganze Datenmenge auf ein einfaches Etikett geht, aber es ist für Testzwecke. Trotzdem kann ich nichts abrufen und bekomme auch keine Fehler. Hilfe wäre sehr willkommen. Vielen Dank!

+0

diese Lösung kann Ihnen helfen, bitte überprüfen Sie es aus http://stackoverflow.com/questions/33338923/how-to-parse-retrofit-json-response?rq=1 –

Antwort

1

Ich denke Problem mit Ihrer URL wenn Sie Testen Sie Ihre App mit Android Emulator dann versuchen, wie "http://10.0.2.2:8080/" sind. aber wenn Sie testen mit Gerät dann müssen Sie Ihre Maschine IP-Adresse wie "http://192.143.1.0/" übergeben. und stellen Sie sicher, dass Ihr Gerät mit Ihrem Computer verbunden ist, auf dem Ihre Datenbank ausgeführt wird.

+0

Ich kenne dieses Problem und aus diesem Grund teste ich mit meinem Emulator. Sieht der Code gut aus? – vibetribe93

+0

yess Ihr Code sieht aus wie ok, aber weil Sie 'localhost' in Ihrer URL verwenden, kann es ein Problem damit sein, versuchen Sie' 'http://10.0.2.2:8080/" 'stattdessen' localhost'. –

+0

Danke, Sir, es funktioniert! Ich habe versucht, es direkt im Browser zu testen, aber es funktioniert nicht dort, nur in Android Studio. Danke für die Hilfe!! – vibetribe93

0

Um JSON Daten auf Android zu analysieren, empfehle ich sehr, JSOUP zu verwenden, die Sie finden können, indem Sie auf here klicken, es ist einfach, unkompliziert und benutzerfreundlich. Sehr einfach zu lernen. Hoffe das hilft dir!

+1

Vielen Dank für Ihre Antwort, das Problem damit ist, weil Ich werde Retrofit auch später verwenden, um Daten hochzuladen, also denke ich, dass ich einen Rest wie api brauche. Thx – vibetribe93

0

Das Problem könnte in Ihrem BASE_URL ändert BASE_URL seine BASE_URL ="http://<your_local_ip_address>/KokosinjacRestfull/";

+0

Ich kenne dieses Problem und aus diesem Grund teste ich mit meinem Emulator. Sieht der Code gut aus? – vibetribe93

0

ich hoffe, dass das folgende Beispiel

 public void startFetching() { 
    mApiManager.getFlowerApi().getFlowers(new Callback<String>() { 
     @Override 
     public void success(String s, Response response) { 
      Log.d(TAG, "JSON :: " + s); 

      try { 
       JSONArray array = new JSONArray(s); 

       for(int i = 0; i < array.length(); i++) { 
        JSONObject object = array.getJSONObject(i); 

        Flower flower = new Flower.Builder() 
          .setCategory(object.getString("category")) 
          .setPrice(object.getDouble("price")) 
          .setInstructions(object.getString("instructions")) 
          .setPhoto(object.getString("photo")) 
          .setName(object.getString("name")) 
          .setProductId(object.getInt("productId")) 
          .build(); 

        mListener.onFetchProgress(flower); 

       } 

      } catch (JSONException e) { 
       mListener.onFetchFailed(); 
      } 


      mListener.onFetchComplete(); 
     } 

     @Override 
     public void failure(RetrofitError error) { 
      Log.d(TAG, "Error :: " + error.getMessage()); 
      mListener.onFetchComplete(); 
     } 
    }); 
} 
0

das Problem mit Ihrer URL helfen könnte Android kann localhost dh http://localhost:8080/KokosinjacRestfull/rest/Textservice/mudriPevci

auf dem Server nicht getroffen in spezifischen IP und der Lauf. Die neue IP wäre wie http://192.168.1.1/KokosinjacRestfull/Rest/TextService/mudriPevci