【发布时间】:2018-07-06 08:53:21
【问题描述】:
我在尝试获取 json 数据时遇到了这个问题。如果您需要完整的源代码来查找问题或错误,我可以上传它。
这是问题的图像。 PROBLEM HERE
主要活动.java
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.Rect;
import android.preference.PreferenceManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.util.TypedValue;
import android.view.Menu;
import android.view.View;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Button;
import java.util.ArrayList;
import java.util.List;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
private Button bOpenPref;
private RecyclerView recyclerView;
private List<Product> listing;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Kreiranje i dovlacenje Preferences screen-a
//Ovo je zakomentirano jer više nema svrhu , prebačeno u ActionBar Vidi onOptionsItemSelected klasu
// bOpenPref = findViewById(R.id.bOpenPreferences);
//
// bOpenPref.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View view) {
// Intent intent = new Intent(MainActivity.this, PreferencesScreenActivity.class);
// startActivity(intent);
// }
// });
recyclerView = (RecyclerView) findViewById(R.id.recycle);
// ImageLoaderConfiguration config=new ImageLoaderConfiguration.Builder(this).build();
// ImageLoader.getInstance().init(config);
listing = new ArrayList<>();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("REMOVED")
.addConverterFactory(GsonConverterFactory.create())
.build();
APiService service = retrofit.create(APiService.class);
Call<List<Product>> call= service.getbookdetails();
call.enqueue(new Callback<List<Product>>() {
@Override
public void onResponse(Call<List<Product>> call, Response<List<Product>> response) {
List<Product> list = response.body();
Product product = null;
for (int i = 0; i < list.size(); i++) {
product = new Product();
String name = list.get(i).getName();
String color = list.get(i).getRank();
// String image = list.get(i).getImageurl();
String price = list.get(i).getPriceUsd();
product.setPriceUsd(price);
product.setRank(color);
product.setName(name);
// product.setImageurl(image);
listing.add(product);
}
Recycleradapter recyclerAdapter = new Recycleradapter(listing);
RecyclerView.LayoutManager recyce = new GridLayoutManager(MainActivity.this, 2);
// RecyclerView.LayoutManager recyce = new LinearLayoutManager(MainActivity.this);
recyclerView.addItemDecoration(new GridSpacingdecoration(2, dpToPx(10), true));
recyclerView.setLayoutManager(recyce);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(recyclerAdapter);
}
@Override
public void onFailure(Call<List<Product>> call, Throwable t) {
}
});
}
//Ovo nam pomaže kako nebi morali gasiti aplikaciju da se Settings prikaže
@Override
protected void onResume() {
super.onResume();
getPreference();
}
//Ovo nije radilo- pa sam ponovno napravio
// @Override
// protected void onReume() {
// super.onResume();
// getPreference();
// }
//Ovo je klasa koju smo sami gore kreirali kako bi mogli odrediti boje od pozadine kroz Settings
//Tu još možeš i mjenjati text boju od texViewa sa metodom ||myTextView.setTextColor(0xAARRGGBB);||
//Ili ovako ||ContextCompat.getColor(context, R.color.your_color);||
private void getPreference() {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
if (preferences.contains("color")) {
if (preferences.getString("color", "0").equals("1")) {
getWindow().getDecorView().setBackgroundColor(Color.WHITE);
} else if (preferences.getString("color", "0").equals("2")) {
getWindow().getDecorView().setBackgroundColor(Color.BLACK);
} else {
getWindow().getDecorView().setBackgroundColor(Color.BLUE);
}
}
}
//OLD ACTION BAR EDIT
// ActionBar actionBar = getSupportActionBar();
//// actionBar.setHomeAsUpIndicator(R.drawable.ic_arrow_back_24dp);
// actionBar.setDisplayHomeAsUpEnabled(true);
// actionBar.setDisplayShowHomeEnabled(true);
// actionBar.setTitle(“ActivityName”);
// Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
// setSupportActionBar(toolbar);
// ActionBar actionBar = getSupportActionBar();
// actionBar.setHomeAsUpIndicator(R.drawable.ic_arrow_back_24dp);
// actionBar.setDisplayHomeAsUpEnabled(true);
// actionBar.setDisplayShowHomeEnabled(true);
// actionBar.setTitle(“Edit Conference”);
//Ovdje govorimo na koji main menu mislimo
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
return true;
}
//Ovdje govorimo sto ce tocno klik na settings u action baru otvoriti
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.your_item_id) {
//A ovo je metoda za pozivanje i startanje preferences activity-a
Intent intent = new Intent(MainActivity.this, PreferencesScreenActivity.class);
startActivity(intent);
return true;
}
return super.onOptionsItemSelected(item);
}
public class GridSpacingdecoration extends RecyclerView.ItemDecoration {
private int span;
private int space;
private boolean include;
public GridSpacingdecoration(int span, int space, boolean include) {
this.span = span;
this.space = space;
this.include = include;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
int position = parent.getChildAdapterPosition(view);
int column = position % span;
if (include) {
outRect.left = space - column * space / span;
outRect.right = (column + 1) * space / span;
if (position < span) {
outRect.top = space;
}
outRect.bottom = space;
} else {
outRect.left = column * space / span;
outRect.right = space - (column + 1) * space / span;
if (position >= span) {
outRect.top = space;
}
}
}
}
/**
* Converting dp to pixel
*/
private int dpToPx(int dp) {
Resources r = getResources();
return Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, r.getDisplayMetrics()));
}
}
APIService.java
package REMOVED
import java.util.List;
import retrofit2.Call;
import retrofit2.http.GET;
/**
* Created by csa on 01-May-17.
*/
public interface APiService {
@GET("ticker/")
Call<List<Book>> getbookdetails();
}
就是他说的问题出在 ApiService.java 和 MainActivity.java 谢谢你的时间,我希望有人能找到我的问题,我可能浪费了很多时间,但我仍然无法得到它:(
【问题讨论】:
-
您应该上传代码的相关部分,以便人们可以帮助您。注意尽可能减少代码,删除之前或之后不相关的部分。
-
ApiService APiService。并且 Book 没有定义很可能是由于缺少导入。
-
你的类名为
APiService,文件名为ApiService。纠正其中一个 -
胡安我不明白我需要改变什么?只是文件名还是?
-
C:\Users\Domo\Desktop\REMOVED\app\src\main\java\com\example\domo\cryptotrace\ApiService.java:11:错误:类 APiService 是公共的,应该是在名为 APiService.java 的文件中声明 public interface APiService { ^ C:\Users\Domo\Desktop\REMOVED\app\src\main\java\com\example\domo\cryptotrace\ApiService.java:14: 错误:找不到符号 Call
- > getbookdetails(); ^ 符号:类书籍位置:接口 APiService 2 错误那是来自 Gradle 控制台,我仍然没有得到问题出在哪里?看来我对此很愚蠢:(
标签: java android json list retrofit