Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Tsegorah
1 / 1 / 0
Регистрация: 02.03.2014
Сообщений: 77
#1

Не запускается метод onLoadFinished - Android

04.05.2016, 01:37. Просмотров 258. Ответов 4
Метки нет (Все метки)

Есть класс 1:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Environment;
import android.app.LoaderManager;
 
 
import android.content.Loader;
import android.content.CursorLoader;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
 
import java.io.File;
 
public class ListActivity extends Activity implements LoaderManager.LoaderCallbacks<Cursor> {
 
    //private static final int CM_DELETE_ID = 1;
    ListView lvData;
    MyDB db;
    Cursor cursor;
    MySimpleCursorAdapter scAdapter;
    String db_table = "vkActual";
    int currentId = 0;
    DownloadTask downloadTask;
    android.app.LoaderManager lm;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);
        //lm = this.getLoaderManager();
        //getLoaderManager().initLoader(0,null,this);
        db = new MyDB(this);
        db.open();
        cursor=db.getAllData(db_table);
        String[] from = new String[] {"artist","title","status"};
        int[] to = new int[] { R.id.textView20, R.id.textView21, R.id.imageView };
 
        scAdapter = new MySimpleCursorAdapter(this, R.layout.list_item, cursor, from, to, 0, db);
        lvData = (ListView) findViewById(R.id.listView);
        lvData.setAdapter(scAdapter);
 
        lvData.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                Log.d("log", "=======================itemClick: position = " + position + ", id = "
                        + id);
                Cursor c = db.getByID("vkActual", id);
                //Cursor cursor =
                Log.d("log", "=======================rows = " + c.getCount());
                c.moveToFirst();
                Log.d("log", "=======================cursor id = " + c.getLong(0));
                Log.d("log", "=======================cursor status = " + c.getLong(4));
                cursor.moveToPosition(position);
                if (cursor.getInt(4)==0) {//c.getInt(4) == 0) {
                    currentId = (int)((long) id);
                            File sdPath = Environment.getExternalStorageDirectory();
                    // добавляем свой каталог к пути
                    sdPath = new File(sdPath.getAbsolutePath() + "/" + "MyFiles/");
                    // создаем каталог
                    sdPath.mkdirs();
                    String filePath = sdPath.getAbsolutePath();
                    String fileName = Integer.toString(cursor.getInt(0))+"_"+
                            cursor.getString(1)+"_"+
                            cursor.getString(2)+".mp3";
                    Log.d("log", "======================= download file task");
                    downloadFile(cursor.getString(3), filePath, fileName, 256);
                    ContentValues cv = new ContentValues();
                    cv.put("status", 1);
                    cv.put("filepath", filePath);
                    cv.put("filename", fileName);
                    String[] args = {cursor.getString(0)};
                    db.mDB.update("vkActual", cv, "_id = ?", args);
                }
                if (cursor.getInt(4) == 2) {
                    Log.d("log", "======================= delete file task");
                    File f = new File(cursor.getString(5), cursor.getString(6));
                    String[] s=f.getParentFile().list();
                    Log.d("log", "======================= list of files in d:");
                    for(String i:s) {
                        Log.d("log", "=======================       filename == "+i);
                    }
                    Log.d("log", "======================= name of current file is: "+cursor.getString(6));
                    Log.d("log", "======================= path of current file is: "+cursor.getString(5));
                    if (f.exists())
                        Log.d("log", "======================= file exists before deletion");
                    if (f.exists()) {
                        f.delete();
                        if (f.exists())
                            Log.d("log", "======================= file exists after deletion");
                    }
                    ContentValues cv = new ContentValues();
                    cv.put("status", 0);
                    cv.put("filepath", "");
                    cv.put("filename", "");
                    String[] args = {cursor.getString(0)};
                    db.mDB.update("vkActual", cv, "_id = ?", args);
                }
                if (cursor.getInt(4) == 1) {
 
                }
                cursor = db.getAllData(db_table);
                scAdapter.changeCursor(cursor);
            }
        });
 
        lvData.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            public void onItemSelected(AdapterView<?> parent, View view,
                                       int position, long id) {
 
            }
 
            public void onNothingSelected(AdapterView<?> parent) {
 
            }
        });
 
        registerForContextMenu(lvData);
 
        getLoaderManager().initLoader(0, null, this);
 
        String [] s=cursor.getColumnNames();
        Log.e("logg", "================== columns: " + s[0]+s[1]+s[2]);
 
        int i=cursor.getCount();
 
        Log.e("logg", "================== rows:    " + i);
        Log.e("logg", "================== xz:      " + cursor.getColumnName(0));
 
    }
 
    @Override
    protected void onDestroy() {
        super.onDestroy();
        // закрываем подключение при выходе
        db.close();
    }
 
    public void downloadFile(String strURL, String strPath, String strName, int buffSize) {
        downloadTask = new DownloadTask(strURL, strPath, strName, buffSize);
        downloadTask.execute();
    }
 
    public void onClickMenu(View view) {
        //Intent intent = new Intent(this, MainActivity.class);
        //startActivity(intent);
        this.finish();
    }
 
    public void onClickSearch(View view) {
        Intent intent = new Intent(this, SearchActivity.class);
        startActivity(intent);
    }
 
    public void onClickSort(View view) {
        Intent intent = new Intent(this, SortActivity.class);
        startActivity(intent);
    }
 
    @Override
    public android.content.Loader<Cursor> onCreateLoader(int id, Bundle args) {
        return null;
    }
 
    @Override
    public void onLoadFinished(android.content.Loader<Cursor> loader, Cursor data) {
        Log.w("logg", "================== onLoadFinished");
        ContentValues cv = new ContentValues();
        cv.put("status", 2);
        String[] args = {Integer.toString(currentId)};
        db.mDB.update("vkActual", cv, "_id = ?", args);
        cursor = db.getAllData(db_table);
        scAdapter.swapCursor(cursor);
        //scAdapter.swapCursor(cursor);
    }
 
    @Override
    public void onLoaderReset(android.content.Loader<Cursor> loader) {
        Log.w("logg", "================== onLoadFinished");
        ContentValues cv = new ContentValues();
        cv.put("status", 2);
        String[] args = {Integer.toString(currentId)};
        db.mDB.update("vkActual", cv, "_id = ?", args);
        cursor = db.getAllData(db_table);
        scAdapter.swapCursor(cursor);
    }
 
    static class MyCursorLoader extends CursorLoader {
 
        MyDB db;
        String table;
 
        public MyCursorLoader(Context context, MyDB db, String table) {
            super(context);
            this.db = db;
            this.table=table;
        }
 
        @Override
        public Cursor loadInBackground() {
            Cursor cursor = db.getAllData(table);
            return cursor;
        }
 
    }
 
}

В методе onCreate переопределяется метод onItemClick, в котором вызывается асинхронная загрузка.
И класс 2:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package com.example.vkapp1;
 
import android.os.AsyncTask;
import android.util.Log;
 
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
 
class DownloadTask extends AsyncTask<Void, Void, Void> {
 
    String strURL;
    String strPath;
    String strName;
    int buffSize;
 
    public DownloadTask(String url, String path, String name, int buff) {
        super();
        strURL = url;
        strPath = path;
        strName = name;
        buffSize = buff;
    }
 
    @Override
    protected Void doInBackground(Void... params) {
        boolean b = false;
        try {
            File file = new File(strPath,strName);
            Log.e("log", "======================== dir " + strPath);
            Log.e("log", "======================== name "+strName);
            if (file.getParentFile() == null) {
                Log.e("log", "======================== no parent file");
                file.getParentFile().mkdirs();
            }
            try {
                if (!file.exists()) {
                    b = file.createNewFile();
                    if (b = true) Log.e("log", "======================== file created");
                    if (b = false) Log.e("log", "======================== file already exists");
                    Log.e("log", "======================== file not exist");
                }
            } catch (IOException i) {
                Log.e("log", "======================== can_t create file ==== " + i.getMessage());
            }
            if (b || file.isFile()) {
                Log.e("log", "======================== writing in file");
                URL connection = new URL(strURL);
                HttpURLConnection urlConn = null;
                try {
                    urlConn = (HttpURLConnection) connection.openConnection();
                } catch (IOException i) {
                    Log.e("log", "======================== can_t open connection");
                }
                urlConn.setRequestMethod("GET");
                try {
                    urlConn.connect();
                } catch (IOException i) {
                    Log.e("log", "======================== can_t connect");
                }
                InputStream in = null;
                try {
                    in = urlConn.getInputStream();
                } catch (IOException i) {
                    Log.e("log", "======================== can_t get input stream");
                }
                OutputStream writer = new FileOutputStream(file);
                int count;
                //long total = 0;
                byte data[] = new byte[buffSize];
                try {
                    while ((count = in.read(data)) != -1) {
                        // allow canceling with back button
                        if (isCancelled()) {
                            in.close();
                            return null;
                        }
                        writer.write((data), 0, count);
                    }
                } catch (IOException i) {
                    Log.e("log", "======================== can_t create file ==== " + i.getMessage());
                }
                try {
                    writer.flush();
                    writer.close();
                    in.close();
                } catch (IOException i) {
                    Log.e("log", "======================== can_t flush/close");
                }
                Log.e("log", "======================== file downloaded");
            }
        }
        catch (MalformedURLException m) {
            Log.e("log", "======================== malformed url exception");
        }
        catch (ProtocolException m) {
            Log.e("log", "======================== protocol exception");
        }
        catch (FileNotFoundException m) {
            Log.e("log", "======================== file not found exception");
        }
        return null;
    }
}


В 1м классе не запускается метод onLoadFinished, почему?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2016, 01:37     Не запускается метод onLoadFinished
Посмотрите здесь:

Android Не запускается приложение
Android Hello world не запускается
Android Не запускается эмулятор
Android Не запускается приложение
Метод запускается сам по себе Android
Android Не запускается IntentService
Android Genymotion не запускается
ViewPager.setCurrentItem() внутри LoaderCallbacks.onLoadFinished() Android
Android Не запускается Hello world!
Android Не запускается проект
Android Не запускается AndroidStudio
Android Приложение запускается из play, но не запускается с рабочего стола

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Frozik6k
12 / 12 / 7
Регистрация: 04.04.2016
Сообщений: 50
04.05.2016, 06:15     Не запускается метод onLoadFinished #2
А где у тебя строка
Java
1
getLoaderManager().getLoader(0).forceLoad();
Для запуска лоадера в первом классе
Tsegorah
1 / 1 / 0
Регистрация: 02.03.2014
Сообщений: 77
04.05.2016, 09:26  [ТС]     Не запускается метод onLoadFinished #3
Добавил строку - ругается, что Attempt to invoke virtual method 'void android.content.Loader.forceLoad()' on a null object reference.
И вообще, зачем эта строка? Загрузка же и так происходит.
Frozik6k
12 / 12 / 7
Регистрация: 04.04.2016
Сообщений: 50
04.05.2016, 11:45     Не запускается метод onLoadFinished #4
Ой, не то не много. ForceLoad() нужен для повторного запуска лоадера. А у вас ошибка вот здесь:
Java
1
2
3
4
    @Override
    public android.content.Loader<Cursor> onCreateLoader(int id, Bundle args) {
        return null; 
    }
функция должна вернуть объект класса MyCursorLoader, вот так:
Java
1
2
3
4
    @Override
    public android.content.Loader<Cursor> onCreateLoader(int id, Bundle args) {
        return new MyCursorLoader(this, db, args);
    }
И еще совет: желательно получать объекты класса Cursor в методе loadInBackground, так как только этот метод выполняется в другом потоке.

P.S. Если что не правильно написал, заранее извиняюсь, я начинающий программист :-)
Tsegorah
1 / 1 / 0
Регистрация: 02.03.2014
Сообщений: 77
07.05.2016, 00:32  [ТС]     Не запускается метод onLoadFinished #5
Всё оказалось очень просто, как обычно. Вместо AsyncTaskLoader я использовал AsyncTask...
Yandex
Объявления
07.05.2016, 00:32     Не запускается метод onLoadFinished
Ответ Создать тему
Опции темы

Текущее время: 03:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru