私はAndroid開発の新機能です。私は、私が私のMacでdeploydを使ってローカルで作成したapiにアクセスすることによって、仕事に就くために必要な私のこの小さなプロジェクトを持っています。 apiはlocalhost:2403/subjectからアクセスできます。私は改造とgsonのガイドに従ってきましたが、これまでのところ、私は間違いを覚えていて、働くことはできません。この時点で私はちょっと固まった。私はapiから科目を取得し、スクロール可能なリストでそれらを表示する必要があります。改造できず、Gsonがデプロイしたデータを引き出す
APIと通信できるようにRetrofitとGsonをセットアップしました。したがって、私はいくつかのクラスとインターフェイスを作成しました。
まずSubjectクラス
public class Subject {
int id;
String name;
int ects;
int grade;
int period;
int main;
public int getMain() {
return main;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public int getEcts() {
return ects;
}
public int getGrade() {
return grade;
}
public int getPeriod() {
return period;
}
}
はその後、私は私が得るすべての科目を保持するために、プレーンと簡単ですHslSubjectsクラスを作成しました。
public class HslSubjects {
List<Subject> subjects;
}
とAPIインタフェースアダプタ私のmainActivityで最後に
public class SubjectResponse {
@SerializedName("subjects")
List<Subject> subjects;
public SubjectResponse() {
subjects = new ArrayList<Subject>();
}
public static SubjectResponse parseJSON(String response) {
Gson gson = new GsonBuilder().create();
SubjectResponse subjectResponse = gson.fromJson(response, SubjectResponse.class);
return subjectResponse;
}
}
続い
public interface subjectEndpointApi {
@GET("/subjects")
Call<HslSubjects> loadSubjects();
}
私はすべて
public class MainActivity extends ListActivity implements Callback<HslSubjects> {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
requestWindowFeature(Window.FEATURE_PROGRESS);
ArrayAdapter<Subject> arrayAdapter = new ArrayAdapter<Subject>(this, android.R.layout.simple_list_item_1, android.R.id.text1, new ArrayList<Subject>());
setListAdapter(arrayAdapter);
setProgressBarIndeterminateVisibility(true);
setProgressBarVisibility(true);
Log.i("api", "preparing to make the api call");
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://10.0.3.2:2403") //10.0.3.2
.addConverterFactory(GsonConverterFactory.create())
.build();
// preparing the call in retrofit
subjectEndpointApi subjectEndpointApi = retrofit.create(subjectEndpointApi.class);
Call<HslSubjects> call = subjectEndpointApi.loadSubjects();
call.enqueue(this);
}
@Override
public void onResponse(Call<HslSubjects> call, Response<HslSubjects> response) {
setProgressBarIndeterminateVisibility(false);
HslSubjects hslSubjects = response.body();
Log.i("subjects", "end of response");
}
@Override
public void onFailure(Call<HslSubjects> call, Throwable t) {
Toast.makeText(MainActivity.this, t.getLocalizedMessage(), Toast.LENGTH_SHORT).show();
Log.i("subjects", "Oops error");
}
}
を実行しかし、どういうわけか、それはいつもに行きますonFailureクラス。あなたのデバイス上で期待しているものではありません
をそれは私が)(私はコールコール= subjectEndpointApi.loadSubjectsとしてmainActivityに使用HslSubjectsで行うものではありません。 ? –
Reshad
インターセプタは次のような応答を返します:http://pastebin.com/raw/BKxV6inV so apparantly私はAPIから何かを取得しますが、何も処理できません – Reshad
あなたは配列を受け取っていますが、オブジェクト。コードを自分の方法で変更しようとしました –