Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 未找到RecyclerView适配器,正在跳过布局_Java_Android_Json_Android Recyclerview - Fatal编程技术网

Java 未找到RecyclerView适配器,正在跳过布局

Java 未找到RecyclerView适配器,正在跳过布局,java,android,json,android-recyclerview,Java,Android,Json,Android Recyclerview,我正在尝试制作一个android应用程序。它有一个recyclerView,由JSON对象表单中的数据填充到cardwiews。我以前做过这个项目,它运行得很好。但是当我重复我不小心删除了那个项目的代码时。我无法追踪我的错误 当我运行应用程序时,我得到以下错误 03-17 21:55:36.706 22896-22896/com.example.user.sampleBulletine/RecyclerView:未连接适配器;跳过布局 03-17 21:55:36.774 22896-22896

我正在尝试制作一个android应用程序。它有一个
recyclerView
,由
JSON对象
表单中的数据填充到
cardwiews
。我以前做过这个项目,它运行得很好。但是当我重复我不小心删除了那个项目的代码时。我无法追踪我的错误

当我运行应用程序时,我得到以下错误

03-17 21:55:36.706 22896-22896/com.example.user.sampleBulletine/RecyclerView:未连接适配器;跳过布局 03-17 21:55:36.774 22896-22896/com.example.user.samplebulletin W/art:Android 4.1之前,方法int-Android.support.v7.widget.ListViewCompat.lookForSelectablePosition(int,boolean)会错误地覆盖Android.widget.ListView中的包私有方法

我确实记得我在一些函数中添加了
@requiresapi
标记,但我不记得是哪一个

运行
JSON请求
后,我收到
JSON对象
,并完美地解析它(通过日志检查)。但是我得到了这个错误

03-17 21:58:01.936 22896-22896/com.example.user.sampleBulletine/AndroidRuntime:致命异常:main 流程:com.example.user.samplebulletin,PID:22896 java.lang.OutOfMemoryError:无法分配506340012字节分配,其中包含4409258个可用字节和185MB的内存 位于dalvik.system.VMRuntime.newNonMovableArray(本机方法) 在android.graphics.BitmapFactory.NativeDecodeset(本机方法) 位于android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:620) 位于android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:455) 位于android.graphics.drawable.drawable.createFromResourceStream(drawable.java:1152) 位于android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:724) 位于android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:575) 位于android.content.res.Resources.loadDrawable(Resources.java:854) 位于android.content.res.TypedArray.getDrawable(TypedArray.java:928) 在android.widget.ImageView上。(ImageView.java:167) 在android.widget.ImageView上(ImageView.java:155) 位于android.support.v7.widget.AppCompatImageView。(AppCompatImageView.java:60) 位于android.support.v7.widget.AppCompatImageView。(AppCompatImageView.java:56) 位于android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:106) 在android.support.v7.app.AppCompateDelegateImplV9.createView(AppCompateDelegateImplV9.java:1021) 在android.support.v7.app.AppCompateDelegateImplV9.onCreateView(AppCompateDelegateImplV9.java:1080) 位于android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:47) 位于android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:769) 位于android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727) 位于android.view.LayoutInflater.rInflate(LayoutInflater.java:858) 位于android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821) 位于android.view.LayoutInflater.rInflate(LayoutInflater.java:861) 位于android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821) 在android.view.LayoutInflater.inflate(LayoutInflater.java:518) 在android.view.LayoutInflater.充气(LayoutInflater.java:426) 位于com.example.user.samplebulletin.NewsAdapter.onCreateViewHolder(NewsAdapter.java:33) 位于com.example.user.samplebulletin.NewsAdapter.onCreateViewHolder(NewsAdapter.java:19)
package com.example.user.samplebulletin;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.Menu;
import android.view.MenuItem;

public class NewsActivity extends AppCompatActivity {

    String jsonUrl = "https://newsapi.org/v1/articles?source=the-next-web&sortBy=latest&apiKey=bdba5de1b490495796a1595f77ed3f37";
    RecyclerView rv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_source);

        rv = (RecyclerView)findViewById(R.id.news_recyclerview);

        rv.setLayoutManager(new LinearLayoutManager(NewsActivity.this));
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int itemThatWasClickedId = item.getItemId();
        if (itemThatWasClickedId == R.id.refresh) {
            new NewsDownloader(NewsActivity.this, jsonUrl, rv).execute();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}
package com.example.user.samplebulletin;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.squareup.picasso.Callback;
import com.squareup.picasso.Picasso;

import java.util.ArrayList;

/**
 * Created by User on 16-03-2017.
 */

public class NewsAdapter extends RecyclerView.Adapter<NewsViewHolder> {

    String TAG = "Not Bla";
    Context c;
    ArrayList<NewsItem> newsItems;

    public NewsAdapter(Context c, ArrayList<NewsItem> newsItems) {
        this.c = c;
        this.newsItems = newsItems;
    }

    @Override
    public NewsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        Log.d(TAG, "onCreateViewHolder: ");
        View v= LayoutInflater.from(c).inflate(R.layout.card_news, parent, false);
        return new NewsViewHolder(v);
    }


    @Override
    public void onBindViewHolder(final NewsViewHolder holder, int position) {
        Log.d(TAG, "onBindViewHolder: ");
        NewsItem item = newsItems.get(position);

        holder.progressBar.setVisibility(View.VISIBLE);


        holder.title.setText(item.getTitle());
        holder.description.setText(item.getDescription());
        holder.author.setText(item.getAuthor());
        holder.date.setText(item.getPublishedAt());

        Picasso.with(c)
            .load(item.getUrlToImage())
            .error(R.drawable.image_not_found)
            .into(holder.image, new Callback() {
                @Override
                public void onSuccess() {
                    holder.progressBar.setVisibility(View.GONE);
                }

                @Override
                public void onError() {

                }
            });
    }

    @Override
    public int getItemCount() {
        return newsItems.size();
    }
}
Context c;
String jsonData;
RecyclerView rv;
String TAG = "NOT bla bla";
NewsAdapter adapter;

ProgressDialog pd;
ArrayList<NewsItem> newsItems= new ArrayList<>();

//String id, name, description, url, category, langCode, contCode, smallLogoUrl, medLogoUrl, largeLogoUrl;

public NewsParser(Context c, String jsonData, RecyclerView rv) {
    this.c = c;
    this.jsonData = jsonData;
    this.rv = rv;
}

@Override
protected Boolean doInBackground(Void... params) {
    return parse();
}

@Override
protected void onPreExecute() {
    super.onPreExecute();

    pd = new ProgressDialog(c);
    pd.setTitle("Please wait...");
    pd.setMessage("Loading list of news newsItems");
    pd.show();
}

@Override
protected void onPostExecute(Boolean isParsed) {
    super.onPostExecute(isParsed);

    pd.dismiss();
    if(isParsed){
        //bind
        adapter = new NewsAdapter(c, newsItems);
        rv.setAdapter(adapter);
        //rv.setLayoutManager(new LinearLayoutManager(c));
    }else
        Toast.makeText(c, "Unable to parse", Toast.LENGTH_LONG).show();
}

private boolean parse(){
    try{
        JSONObject object = new JSONObject(jsonData);
        JSONArray jsonArray = object.getJSONArray("articles");
        JSONObject jsonObject;

        newsItems.clear();
        Log.d(TAG, object.toString());

        for(int i=0; i<jsonArray.length(); i++){ //jsonArray.length()

            jsonObject = jsonArray.getJSONObject(i);

            Log.d(TAG, "parse: ");
            String author = jsonObject.getString("author");
            String title = jsonObject.getString("title");
            String description = jsonObject.getString("description");
            String url = jsonObject.getString("url");
            String urlToImage = jsonObject.getString("urlToImage");
            String publishedAt = jsonObject.getString("publishedAt");

            String printThis = "New news :\nauthor"+author+"\ntitle"+title+"\ndescription"+description+"\nurl"+url+"\nurlToImage"+urlToImage+"\npublishedAt"+publishedAt;
            Log.d(TAG, printThis);
            newsItems.add(new NewsItem(author, title, description, url, urlToImage, publishedAt));
        }
        return true;
    } catch (JSONException e) {
        e.printStackTrace();
        return false;
    }
}
package com.example.user.samplebulletin;

import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.widget.Toast;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;

/**
 * Created by User on 16-03-2017.
 */

public class NewsDownloader extends AsyncTask<Void, Void, String> {
    Context c;
    String jsonUrl;
    RecyclerView rv;

    String TAG = "Bla bla";
    ProgressDialog pd;

    public NewsDownloader(Context c, String jsonUrl, RecyclerView rv) {
        this.c = c;
        this.jsonUrl = jsonUrl;
        this.rv = rv;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

        pd = new ProgressDialog(c);
        pd.setTitle("Please wait...");
        pd.setMessage("Loading list of news sources");
        pd.show();
    }

    @Override
    protected String doInBackground(Void... params) {
        return download();
    }

    @Override
    protected void onPostExecute(String jsonData) {
        super.onPostExecute(jsonData);

        pd.dismiss();
        if(jsonData.startsWith("Error")){
            String error = jsonData;
            Toast.makeText(c, error, Toast.LENGTH_SHORT).show();
        }else{
            //parser
            new NewsParser(c, jsonData, rv).execute();
        }
    }

    private String download(){
        Object connection = Connector.connect(jsonUrl);
        if(connection.toString().startsWith("Error"))
            return connection.toString();

        try{
            HttpURLConnection con = (HttpURLConnection)connection;
            if(con.getResponseCode()==con.HTTP_OK){
                InputStream is = new BufferedInputStream(con.getInputStream());
                BufferedReader br = new BufferedReader(new InputStreamReader(is));

                String line;
                StringBuffer jsonData = new StringBuffer();

                while((line = br.readLine())!=null)
                    jsonData.append(line+"\n");

                br.close();
                is.close();

                Log.d(TAG, jsonData.toString());
                return jsonData.toString();

            }else {
                return "Error" + con.getResponseMessage();
            }
        } catch (IOException e) {
            e.printStackTrace();
            return "Error : "+e.getMessage();
        }
    }
}
package com.example.user.samplebulletin;

import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;

/**
 * Created by User on 16-03-2017.
 */

public class NewsViewHolder extends RecyclerView.ViewHolder{

    TextView title, author, date, description;
    ImageView image;
    ProgressBar progressBar;

    public NewsViewHolder(View itemView) {
        super(itemView);

        title = (TextView)itemView.findViewById(R.id.news_title);
        description = (TextView)itemView.findViewById(R.id.news_description);
        author = (TextView)itemView.findViewById(R.id.news_author);
        date = (TextView)itemView.findViewById(R.id.news_date);

        image = (ImageView)itemView.findViewById(R.id.news_image);

        progressBar = (ProgressBar)itemView.findViewById(R.id.news_progressbar);
    }
}
package com.example.user.samplebulletin;

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

/**
 * Created by User on 16-03-2017.
 */

public class Connector {
    public static Object connect(String JSONUrl){
        try {
            URL url = new URL(JSONUrl);
            HttpURLConnection con = (HttpURLConnection)url.openConnection();

            con.setRequestMethod("GET");
            con.setConnectTimeout(15000);
            con.setReadTimeout(15000);
            con.setDoInput(true);

            return con;

        } catch (MalformedURLException e) {
            e.printStackTrace();
            return "Error"+e.getMessage();
        } catch (IOException e) {
            e.printStackTrace();
            return "Error"+e.getMessage();
        }
    }
}
package com.example.user.samplebulletin;

/**
 * Created by User on 16-03-2017.
 */

public class NewsItem {
    String author, title, description, url, urlToImage, publishedAt;

    public NewsItem(String author, String title, String description, String url, String urlToImage, String publishedAt) {
        this.author = author;
        this.title = title;
        this.description = description;
        this.url = url;
        this.urlToImage = urlToImage;
        this.publishedAt = publishedAt;
    }

    public String getAuthor() {
        return author;
    }

    public String getTitle() {
        return title;
    }

    public String getDescription() {
        return description;
    }

    public String getUrl() {
        return url;
    }

    public String getUrlToImage() {
        return urlToImage;
    }

    public String getPublishedAt() {
        return publishedAt;
    }
}
    Picasso.with(c)
            .load(item.getUrlToImage())
            .resize(70, 70) //The size of your imageView
            .error(R.drawable.image_not_found)
            .into(holder.image, new Callback() {
                @Override
                public void onSuccess() {
                    holder.progressBar.setVisibility(View.GONE);
                }

                @Override
                public void onError() {

                }
            });
rv = (RecyclerView)findViewById(R.id.news_recyclerview);
rv.setLayoutManager(new LinearLayoutManager(NewsActivity.this));
ArrayList<NewsItem> mDataset = new ArrayList();
NewsAdapter mAdapter = new NewsAdapter(context,mDataset);
rv.setAdapter(mAdapter);
 @Override
protected void onPostExecute(Boolean isParsed) {
    super.onPostExecute(isParsed);

    pd.dismiss();
    if(isParsed){
        mDataset.addAll(newsItems);
        mAdapter.notifyDataSetChanged();

    }else
        Toast.makeText(c, "Unable to parse", Toast.LENGTH_LONG).show();
}