Ленивая загрузка с Listview - PullRequest
0 голосов
/ 02 ноября 2011

Не удается отобразить данные в listview.i полностью достигнут успех списка списков, но интеграция с адаптером костюма listview вызывает разочарование. Я не думаю, что проблема в синтаксическом анализаторе вызывает успех в logcat, но теперь возникают проблемы с отложенной загрузкой и отображением.

Ошибка:

 11-02 12:10:58.470: WARN/PackageManager(613): Failure retrieving icon 0x7f020000 in package com.SAXParser1
11-02 12:10:58.470: WARN/PackageManager(613): android.content.res.Resources$NotFoundException: Resource ID #0x7f020000
11-02 12:10:58.470: WARN/PackageManager(613):     at android.content.res.Resources.getValue(Resources.java:846)
11-02 12:10:58.470: WARN/PackageManager(613):     at android.content.res.Resources.getDrawable(Resources.java:534)
11-02 12:10:58.470: WARN/PackageManager(613):     at android.app.ApplicationContext$ApplicationPackageManager.getDrawable(ApplicationContext.java:1923)
11-02 12:10:58.470: WARN/PackageManager(613):     at android.content.pm.ComponentInfo.loadIcon(ComponentInfo.java:88)
11-02 12:10:58.470: WARN/PackageManager(613):     at com.android.launcher.LauncherModel.updateApplicationInfoTitleAndIcon(LauncherModel.java:452)
11-02 12:10:58.470: WARN/PackageManager(613):     at com.android.launcher.LauncherModel.updateAndCacheApplicationInfo(LauncherModel.java:257)
11-02 12:10:58.470: WARN/PackageManager(613):     at com.android.launcher.LauncherModel.updatePackage(LauncherModel.java:242)
11-02 12:10:58.470: WARN/PackageManager(613):     at com.android.launcher.Launcher$ApplicationsIntentReceiver.onReceive(Launcher.java:1865)
11-02 12:10:58.470: WARN/PackageManager(613):     at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:664)
11-02 12:10:58.470: WARN/PackageManager(613):     at android.os.Handler.handleCallback(Handler.java:587)
11-02 12:10:58.470: WARN/PackageManager(613):     at android.os.Handler.dispatchMessage(Handler.java:92)
11-02 12:10:58.470: WARN/PackageManager(613):     at android.os.Looper.loop(Looper.java:123)
11-02 12:10:58.470: WARN/PackageManager(613):     at android.app.ActivityThread.main(ActivityThread.java:3948)
11-02 12:10:58.470: WARN/PackageManager(613):     at java.lang.reflect.Method.invokeNative(Native Method)
11-02 12:10:58.470: WARN/PackageManager(613):     at java.lang.reflect.Method.invoke(Method.java:521)
11-02 12:10:58.470: WARN/PackageManager(613):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
11-02 12:10:58.470: WARN/PackageManager(613):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
11-02 12:10:58.470: WARN/PackageManager(613):     at dalvik.system.NativeStart.main(Native Method)

Код ::

package com.SAXParser1;

import java.net.URL;
import java.util.ArrayList;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class SAXParser1 extends Activity implements OnItemClickListener {
    /** Called when the activity is first created. */
    String RequestID;
    String Status;
    String URL1;
    String ActivityName;
    String AudioScript;
    ListView lview;

    String[] Arr_RequestID;
    String[] Arr_Status;
    String[] Arr_ActivityName;
    String[] Arr_AudioScript;

    ArrayList<String> al_RequestID;
    ArrayList<String> al_Status;
    ArrayList<String> al_ActivityName;
    ArrayList<String> al_AudioScript;

    ListViewAdapter lviewAdapter;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        String url = "URL";
        SaxParser(url);
        try {
            lview = (ListView) findViewById(R.id.listView2);
            lviewAdapter = new ListViewAdapter(this, Arr_ActivityName,
                    Arr_AudioScript);

            System.out.println("adapter => " + lviewAdapter.getCount());

            lview.setAdapter(lviewAdapter);

            lview.setOnItemClickListener(this);
        } catch (Exception e) {
            // TODO: handle exception
        }

    }

    public void onItemClick(AdapterView<?> arg0, View arg1, int position,
            long id) {

    }

    public void SaxParser(String url) {

        try {

            URL sourceUrl = new URL(url);

            SAXParserFactory spf = SAXParserFactory.newInstance();
            SAXParser sp = spf.newSAXParser();
            XMLReader xr = sp.getXMLReader();
            Handler1 dataHandler = new Handler1();
            xr.setContentHandler(dataHandler);
            xr.parse(new InputSource(sourceUrl.openStream()));
            Dataset dataset = dataHandler.getParsednewJobdtl_DataSet();
            Toast.makeText(getBaseContext(), "sourceUrl" + sourceUrl,
                    Toast.LENGTH_LONG);

            RequestID = dataset.getRequestID();
            /*System.out.println(RequestID);*/
            al_ActivityName = dataHandler.getActivityName();
            al_AudioScript = dataHandler.getAudioScript();
            al_RequestID = dataHandler.getRequestId();
            al_Status = dataHandler.getStatus();


            Arr_ActivityName = al_ActivityName
                    .toArray(new String[al_ActivityName.size()]);
            Arr_AudioScript = al_AudioScript.toArray(new String[al_AudioScript
                    .size()]);
            Arr_RequestID = al_RequestID
                    .toArray(new String[al_RequestID.size()]);
            Arr_Status = al_Status.toArray(new String[al_Status.size()]);

            Toast.makeText(getBaseContext(), "al_Status " + al_RequestID,
                    Toast.LENGTH_LONG);
            Status = dataset.getStatus();
            Toast.makeText(getBaseContext(), "al_Status " + al_Status,
                    Toast.LENGTH_LONG);
            ActivityName = dataset.getActivityName();
            Toast.makeText(getBaseContext(), "al_ActivityName " + al_ActivityName,
                    Toast.LENGTH_LONG);
            AudioScript = dataset.getAudioScript();
            Toast.makeText(getBaseContext(), "al_AudioScript " + al_AudioScript,
                    Toast.LENGTH_LONG);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

ListViewAdapter ::

package com.SAXParser1;

import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class ListViewAdapter extends BaseAdapter {
    Activity context;
    String title[];
    String description[];

    public ListViewAdapter(Activity context, String[] title,
            String[] description) {
        super();
        this.context = context;
        this.title = title;
        this.description = description;
    }

    public int getCount() {
        // TODO Auto-generated method stub
        return title.length;
    }

    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return null;
    }

    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }

    private class ViewHolder {
        TextView txtViewTitle;
        TextView txtViewDescription;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        ViewHolder holder;
        LayoutInflater inflater = context.getLayoutInflater();

        if (convertView == null) {
            convertView = inflater.inflate(R.layout.listitem_row, null);
            holder = new ViewHolder();
            holder.txtViewTitle = (TextView) convertView
                    .findViewById(R.id.textView1);
            holder.txtViewDescription = (TextView) convertView
                    .findViewById(R.id.textView2);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.txtViewTitle.setText(title[position]);
        holder.txtViewDescription.setText(description[position]);

        return convertView;
    }

}

Ответы [ 3 ]

4 голосов
/ 02 ноября 2011

Простая демоверсия ленивого списка с изображениями. Может быть полезным для кого-то. Он загружает изображения в фоновом потоке. Изображения кэшируются на SD-карте и в памяти. Я создаю только один поток и помещаю задачи загрузки в очередь. Я думаю, что это намного эффективнее, чем одновременная загрузка и декодирование нескольких потоков. Реализация кеша очень проста для демонстрации. Я декодирую изображения с помощью inSampleSize, чтобы уменьшить потребление памяти. Я также стараюсь правильно обрабатывать переработанные виды.

GitHub: https://github.com/thest1/LazyList

Источник: http://open -pim.com / tmp / LazyList.zip

3 голосов
/ 02 ноября 2011

Очистите проект с помощью project->clean и убедитесь, что вы отметили «Автоматически строить» в меню проекта.

К вашему сведению, просто отметьте Resources.NotFoundException , там четко написано, что это исключение возникает всякий раз, когда ресурс запроса не найден, поэтому лучше проверить значок, который вы пытались использовать внутри своего код. Если вы не нашли идентификатор того же значка в файле R.java, сгенерируйте R.java указанным выше способом.

2 голосов
/ 02 ноября 2011

Чтобы избежать путаницы, может быть полезно, если вы следовали обычным соглашениям об именах Java - это всего лишь предложение, но имя вашего пакета com.SAXParser1 для одного довольно нестандартно (начинается с и включает заглавные буквы, использует просто com вместо вашего полного домена), но более того, оно имеет то же имя, что и ваш класс, что может привести к путанице (по крайней мере, это сбило меня с толку при попытке прочитать ваш код ...; -).

Похоже, что опубликованная трассировка стека указывает на то, что Android ожидает ресурс с идентификатором 0x7f020000, то есть такой строкой:

public static final int <some_name>=0x7f020000

в вашем R-файле (где-то в пределах public static final class drawable).Попробуйте открыть этот файл (Ctrl + Shift + T, затем введите «com.SAXParser1.R») и выполните текстовый поиск для 0x7f020000.Если ваш R-файл поврежден, попробуйте щелкнуть правой кнопкой мыши по проекту и выбрать «Инструменты Android» -> «Исправить свойства проекта».

Редактировать: посмотрите этот пост для некоторыхдругие предложения.Также может помочь, если вы убедитесь, что ваши файлы и Eclipse синхронизированы, щелкнув правой кнопкой мыши по проекту и выбрав Refresh (я считаю, что это не нужно в Indigo, но всегда надо понимать в Helios и ниже).

...