【问题标题】:JSON parse data with RETROFIT2JSON 使用 RETROFIT2 解析数据
【发布时间】: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


【解决方案1】:

好吧,我自己找到了答案。

我已从 ApiService.java public 中删除 并将 ApiService 移除为 aPiService。

Also Call> 需要删除到 >

谢谢你们的时间。

【讨论】:

    猜你喜欢
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多