2015-12-27 5 views
1

Код получает объект JSON с веб-страницы и делает его в список .. здесь возникает исключение .. Пожалуйста, помогите мне ...Попытка вызвать метод интерфейса 'java.lang.Object [] java.util.Collection.toArray()'

import android.content.Context; 
import android.app.Activity; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 

import com.squareup.okhttp.OkHttpClient; 
import com.squareup.okhttp.Request; 
import com.squareup.okhttp.Response; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.io.IOException; 
import java.util.ArrayList; 


public class FeedActivity extends Activity implements OnFeedListener{ 


ListView listview; 
FeedAdapter adapter; 
ArrayList<Post> posts; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_feed); 

    listview = (ListView)findViewById(R.id.listView); 


    //Data ->adapter -> ListView 
    adapter = new FeedAdapter(getApplicationContext(),R.layout.layout_feed_item); 


    listview.setAdapter(adapter); 

    FeedTask task = new FeedTask(this); 
    task.execute("https://public-api.wordpress.com/rest/v1.1/sites/androsiv.wordpress.com/posts/"); 
} 

@Override 
public void onFeed(JSONArray array) { 
    int length = array.length(); 
    for(int i = 0; i<length; i++) 
    { 
     JSONObject object = array.optJSONObject(i); 
     Post post = new Post(object.optString("title"),object.optString("excerpt"),object.optString("featured_image")); 

     posts = new ArrayList<>(); 
     posts.add(post); 
    } 
    adapter.addAll(posts); 
    adapter.notifyDataSetChanged(); 
} 


public class FeedTask extends AsyncTask<String, Void, JSONArray> 
{ 
    private OnFeedListener listener; 
    public FeedTask(OnFeedListener listener) 
    { 
     this.listener = listener; 
    } 


    @Override 
    protected JSONArray doInBackground(String... params) { 
     String url = params[0]; 

     OkHttpClient client = new OkHttpClient(); 
     Request.Builder builder = new Request.Builder(); 

     Request request = builder.url(url).build(); 

     try { 
      Response response = client.newCall(request).execute(); 
      String json = response.body().string(); 
      try { 
       JSONObject object = new JSONObject(json); 
       JSONArray array = object.optJSONArray("posts"); 
       return array; 
      } 
      catch(JSONException e) 
       { 
        e.printStackTrace(); 
       } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(JSONArray array) { 
     super.onPostExecute(array); 

     if(null == array) 
      return; 

     if(null != listener) 
      listener.onFeed(array); 
    } 
} 

public class FeedAdapter extends ArrayAdapter<Post> 
{ 
    private int resource; 
    public FeedAdapter(Context context, int resource) { 
     super(context, resource); 
     this.resource = resource; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if(null == convertView) 
     { 
      LayoutInflater inflater = LayoutInflater.from(getContext()); 
      convertView = inflater.inflate(resource,null); 
     } 
     //Binding data 
     Post post = getItem(position); 
     TextView title = (TextView) convertView.findViewById(R.id.title); 
     TextView desc = (TextView) convertView.findViewById(R.id.description); 

     title.setText(post.title); 
     desc.setText(post.description); 
     return convertView; 
    } 

} 

public class Post 
{ 
    public String title; 
    public String description; 
    public String thumbnail; //url 

    public Post(String title, String desc, String thumbnail) 
    { 
     this.description=desc; 
     this.thumbnail=thumbnail; 
     this.title=title; 
    } 
} 
} 

Бревна кота выше программы приводятся ниже ... NullPointer исключения встречаются в программе ... кто-то пожалуйста, помогите мне .. в предыдущем подобном вопросе, я не удалось найти объяснение .. Лог кот: Изменяя указанную линию, я получаю следующее ИСКЛЮЧЕНИЕ:

java.lang.RuntimeException: An error occured while executing doInBackground() 
     at android.os.AsyncTask$3.done(AsyncTask.java:300) 
FATAL EXCEPTION: AbstractCallbackSender 
Process: jp.co.translimit.braindots, PID: 7444 
java.lang.RuntimeException: An error occured while executing doInBackground() 
     at android.os.AsyncTask$3.done(AsyncTask.java:300) 
FATAL EXCEPTION: AsyncTask #5 
Process: jp.co.translimit.braindots, PID: 8498 
java.lang.RuntimeException: An error occured while executing doInBackground() 
     at android.os.AsyncTask$3.done(AsyncTask.java:300) 
java.lang.RuntimeException: An error occured while executing doInBackground() 
     at android.os.AsyncTask$3.done(AsyncTask.java:300) 

ответ

0

вопрос это утверждение:

adapter.addAll(posts); 

На данный момент в методе onCreate, posts еще не инициализирована и содержит NULL в качестве значения. Вы должны либо

  1. инициализировать posts перед использованием (posts = new ArrayList<Post>())
  2. так addAll(posts), вероятно, не будет иметь никакого эффекта, когда posts пуст, пропустите его ALLtogether. Вы вызываете addAll(posts) снова в свой onFeed метод.

На стороне записки: Я видел, что вы повторно инициализирует posts с пустой массив в цикле в вашем методе onFeed(). Это не принесет пользы. Вы должны инициализировать свою posts коллекцию до петля.

+0

После этого ... я получаю вышеуказанный логарифм ... так что помогите мне ... – Siva

0

adapter.addAll (сообщения); Без создания инициализации вы пытаетесь добавить адаптер. Здесь сообщения arraylist равны нулю, и вы заполняете массив posts в asynctask, который был запущен после указанной выше строки. Удалите вышеуказанную строку.

+0

все еще я получаю исключение выше .. – Siva

Смежные вопросы