Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Передать String в AsyncTask, получить callback

Не могу сообразить как одновременно и передать в AsyncTask запрос и возвратить ответ в UI.

Вот код как есть - нужно возвращать закоментированные callback.*

Пробую возвратить // callback.onRecievedMessage(msg); Но пока безуспешно.

Java(TM) 2 Platform Standard Edition 5.0
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
public abstract class jabberdSenderAcyncTasker extends AsyncTask<Void, Void, String> {
    public eJabberdSenderInteface callback;
    private String oucoming_Message;
    private Throwable t;
 
    String JABBERSERVER = TetGlobalData.JBS;
    int JABBERPORT = TetGlobalData.JPORT;
    String JABBERDUSER = TetGlobalData.JBU;
    AbstractXMPPConnection jConnection;
    boolean result = true;
    boolean notReply = false;
    private String pseudo_tag="jabberdSenderAcyncTasker";
 
    public jabberdSenderAcyncTasker(String outcoming_mesage) {
 
        super();
 
        oucoming_Message = outcoming_mesage;
    }
protected jabberdSenderAcyncTasker(eJabberdSenderInteface callback) {
    this.callback = (eJabberdSenderInteface) callback;
}
 
 
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
 
    }
 
    protected abstract boolean doAction() throws Exception; // Do redefinition method
 
    @Override
    protected String doInBackground(Void... params) {
        Log.i(pseudo_tag,""+pseudo_tag+" RUN doInBackground");
        XMPPTCPConnectionConfiguration.Builder config = XMPPTCPConnectionConfiguration.builder();
        config.setUsernameAndPassword(TetGlobalData.JBU + "@" + TetGlobalData.JBS, TetGlobalData.JBP);
        config.setServiceName(TetGlobalData.JBS);
        config.setHost(TetGlobalData.JBS);
        config.setPort(TetGlobalData.JPORT);
        config.setDebuggerEnabled(true);
        config.setSecurityMode(ConnectionConfiguration.SecurityMode.ifpossible);
        config.setSendPresence(true);
        config.setCompressionEnabled(false);
        // config.setReconnectionAllowed(true);
        // config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
        //config.setRosterLoadedAtLogin(true);
        // config.setSocketFactory(ManagerFactory.getDefault());
        //
        // config.setSASLAuthenticationEnabled(false);
        //config.setSocketFactory(new DummySSLSocketFactory());
        //config.setSecurityMode(ConnectionConfiguration.SecurityMode.ifpossible);
        config.build();
        ///////////////////////////////////////////////////////////////////////////////////////////////////
        SASLMechanism mechanism = new SASLDigestMD5Mechanism();
        SASLAuthentication.registerSASLMechanism(mechanism);
        SASLAuthentication.blacklistSASLMechanism("SCRAM-SHA-1");
        SASLAuthentication.blacklistSASLMechanism("DIGEST-MD5");
        SASLAuthentication.unBlacklistSASLMechanism("PLAN");
//////////////////////////////////////////////////////////////////////////////////////////////////
        // accept all certificate - just for testing
        try {
            TLSUtils.acceptAllCertificates(config);
        } catch (NoSuchAlgorithmException e) {
        } catch (KeyManagementException e) {
        }
//////////////////////////////////////////////////////////////////////////////////////////////////
// verify all hostname - just for testing
        config.setHostnameVerifier(new HostnameVerifier() {
            public boolean verify(String hostname, SSLSession session) {
                return true;
            }
        });
//////////////////////////////////////////////////////////////////////////////////////////////////
 /*       try {
            SSLContext sc = SSLContext.getInstance("TLS");
            config.setCustomSSLContext(sc);
        } catch (NoSuchAlgorithmException e) {
            throw new IllegalStateException(e);
        }
*/
        XMPPTCPConnection.setUseStreamManagementDefault(true);
        jConnection = new XMPPTCPConnection(config.build());
        jConnection.setPacketReplyTimeout(10000);
        try {
            System.out.println("connecting");
            jConnection.connect();
            System.out.println("connected");
            jConnection.login();
            System.out.println("logged in");
       //     callback.onLogin(true);
        } catch (XMPPException e) {
            e.printStackTrace();
        } catch (SmackException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        Log.e(pseudo_tag, "###  jConnection.getStreamId() = " +jConnection.getStreamId()+"");
        if (jConnection.isAuthenticated()) {
            Roster roster = Roster.getInstanceFor(jConnection);
 
            if (!roster.isLoaded()) {
                try {
                    roster.reloadAndWait();
                } catch (SmackException.NotLoggedInException e) {
                    e.printStackTrace();
                } catch (SmackException.NotConnectedException e) {
                    e.printStackTrace();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
 
            Collection<RosterEntry> entries = roster.getEntries();
 
            for (RosterEntry entry : entries)
                System.out.println("Here: " + entry);
            /// Normal connect
            ChatManager chatmanager = ChatManager.getInstanceFor(jConnection);
            ///Create chat
            Chat newChat = chatmanager.createChat(TetGlobalData.JBC + "@" + TetGlobalData.JBS, new ChatMessageListener() {
 
                @Override
                public void processMessage(Chat chat, Message message) {
                    try {
                        chat.sendMessage(message);
                        String from = message.getFrom();
                        String body = message.getBody();
                        String msg = String.format("%1$s", body);
                        Log.d(pseudo_tag, "!!!!!!!!!!!!!!!!! DEBUG  StringTokenizer msg =" + msg + " !!!");
                        StringTokenizer st = new StringTokenizer(msg, TetGlobalData.TOKEN_SEPARATOR);
                        String token = st.nextToken();
                        if (token.equals(TetGlobalData.RESPONCE)) {
                            String tokenres = st.nextToken();
                            if (!tokenres.equals(TetGlobalData.DS_SETUP_OK)) {
                                TetGlobalData.notReply = true;
                                Log.d(pseudo_tag, "++++!!!!!!!!!!!!!!!!! DEBUG  StringTokenizer OK OK OK OK !!!!!!!!++++");
                                EventBus.getDefault().post(new EventJabIncomMessage(msg), "INCOMING_MESSAGE");
                               // callback.onRecievedMessage(msg);
                                jConnection.disconnect();
                            } else {
                                TetGlobalData.notReply = true;
                                result = false;
                                jConnection.disconnect();
                            }
 
                        } else {
                            jConnection.disconnect();
                        }
 
                    } catch (SmackException.NotConnectedException e) {
                        Log.d(TetGlobalData.TAG_TET_A_TET, e.toString());
                    }
                }
            });
 
            Log.i(pseudo_tag, "" + pseudo_tag + " SENDING message ="+oucoming_Message+"! ");
            try {
 
                newChat.sendMessage(oucoming_Message);
            } catch (SmackException.NotConnectedException e) {
                e.printStackTrace();
            }
 
        }
        return "";
    }
 
    @Override
    protected void onPostExecute(String v) {
        EventBus.getDefault().unregister(this);
        super.onPostExecute(v);
        EventBus.getDefault().unregister(this);
     // callback.onPostExecute(true);
    }
 
 
 
}
Интерфейс такой
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
public interface eJabberdSenderInteface {
    void onRecievedMessage(String msg);
 
    void onLogin(boolean aTrue);
 
    void onPostExecute(boolean b);
}
Дергаю так

Java(TM) 2 Platform Standard Edition 5.0
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
public class toServerSenderAcyncTasker implements eJabberdSenderInteface {
 
 
    private final String pseudo_tag;
 
    public toServerSenderAcyncTasker(String REQUEST) {
 
        String action = getClass().getCanonicalName();
        int pos = action.lastIndexOf('.') + 1;
        String onlyClass = action.substring(pos);
        pseudo_tag = onlyClass;
 
        if (TetGlobalData.JBS.equals("172.14.2.101")) {
            //TetTempoDate.jabberd_OUT_COMMING_MESSAGE = REQUEST;
            new jabberdSenderAcyncTaskerLocal(REQUEST) {
                @Override
                protected boolean doAction() throws Exception {
                    Thread.currentThread().wait(1000);
                    return false;
                }
            }.execute();
        } else {
            new jabberdSenderAcyncTasker(REQUEST) {
                @Override
                protected boolean doAction() throws Exception {
                    Thread.currentThread().wait(1000);
                    return false;
                }
            }.execute();
        }
    }
 
    @Override
    public void onRecievedMessage(String msg) {
     Log.e(pseudo_tag, "onRecievedMessage = " + msg + "");
    }
 
    @Override
    public void onLogin(boolean aTrue) {
 
    }
 
    @Override
    public void onPostExecute(boolean b) {
 
    }
}
Ответ: Все оказалось очень просто

Убираем переопределение
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
  public jabberdSenderAcyncTasker(String outcoming_mesage) {
 
        super();
 
        oucoming_Message = outcoming_mesage;
    }
А в это
Java(TM) 2 Platform Standard Edition 5.0
1
protected jabberdSenderAcyncTasker(eJabberdSenderInteface callback)
Добавляем стринг
[JAVA]
Java(TM) 2 Platform Standard Edition 5.0
1
protected jabberdSenderAcyncTasker(eJabberdSenderInteface callback, String request)
Естественно мы его теперь передаем при вызове с добавочкой "this"
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
new jabberdSenderAcyncTaskerLocal(this,REQUEST) {
                @Override
                protected boolean doAction() throws Exception {
                    Thread.currentThread().wait(1000);
                    return false;
                }
            }.execute();
Вопрос: String-array

много файлов string-array в values
можно ли и как к ним обращаться по номеру?
Ответ: если я правильно понял вопрос
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="utf-8"?>
<resources>
 
    <array name="arr">
        <item>@array/str_array1</item>
        <item>@array/str_array2</item>
    </array>
 
    <string-array name="str_array1">
        <item>str1</item>
        <item>str2</item>
        <item>str3</item>
    </string-array>
 
    <string-array name="str_array2">
        <item>str4</item>
        <item>str5</item>
        <item>str6</item>
    </string-array>
 
</resources>
Java
1
2
3
4
5
6
7
8
9
10
        ArrayList<String[]> list_of_arrays = new ArrayList<>();
        TypedArray typedArray = getResources().obtainTypedArray(R.array.arr);
        int length = typedArray.length();
        for (int i = 0; i < length; i++) {
            int id = typedArray.getResourceId(i, -1);
            String[] arr = getResources().getStringArray(id);
            // делаем что-то с полученным массивом, например добавляем его в список
            list_of_arrays.add(arr);
        }
        typedArray.recycle();
Вопрос: Как получить ресурс из String с путем ресурса?

Как получить ресурс из String с путем ресурса?
Код Java(TM) 2 Platform Standard Edition 5.0
1
2
String source = "R.string.text";
String text = getString(source);
Вот этот код не работает
Ответ: Нет, так не пойдет.
Надо получать ресурс именно из String с путем ресурса.
Есть метод который выполняет поиск в большем тексте, находит самопроизвольные теги в которых прописан путь ресурса, и помещает пути в массив.
Вопрос: Сортировка массива типа String

Здравствуйте! Подскажите, пожалуйста, как решить проблему.
Имеется пять переменных типа String:
a = "Будильник установлен на 14:20"
b = "Будильник установлен на 18:00"
c = "Будильник установлен на 09:00"
d = "Будильник установлен на 11:00"
e = "Будильник установлен на 14:35"
Как проанализировать все эти строки и поместить их в строковый массив по порядку начиная с самого раннего будильника заканчивая будильником, который зазвенит последний. То есть нужно, что в массиве SortMassiv[] эти строки стояли по порядку:
SortMassiv[0] = "Будильник установлен на 09:00"
SortMassiv[1] = "Будильник установлен на 11:00"
SortMassiv[2] = "Будильник установлен на 14:20"
SortMassiv[3] = "Будильник установлен на 14:35"
SortMassiv[4] = "Будильник установлен на 18:00"

Заранее спасибо за помощь!
Ответ:
Java
1
2
3
4
5
6
7
8
9
10
    private static void sortStringArray(String[] arr) {
        Arrays.sort(arr, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                o1 = Normalizer.normalize(o1, Normalizer.Form.NFD);
                o2 = Normalizer.normalize(o2, Normalizer.Form.NFD);
                return o1.compareTo(o2);
            }
        });
    }
импорты
Java
1
2
3
import java.text.Normalizer;
import java.util.Arrays;
import java.util.Comparator;
Вопрос: Создать имя переменной из String

Какой хитростью решается задача создания имен переменных из стринга

Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
        do {
            i++;
            String G = "zone_"+Integer.toString(i)+"";
      //      НУЖНО ПОЛУЧИТЬ ПЕРЕМЕННЫЕ типа так;
  String pos = DataFile."+G+";
        } while(!pos.equals("") || i >= 30);
Ответ: Спасибо!

Добавлено через 16 часов 48 минут
Не знаю почему, но не работает, Однако, вроде то же самое, но запустилось.
Вот так получилось для статики:
Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
            do {
                i++;
                String G = "poligon_zone_" + Integer.toString(i) + "";
                try {
                    polygon_from_SettingDate = (String) TetATetSettingDate.class.getField(G).get(null);
                } catch (NoSuchFieldException x) {
                    x.printStackTrace();
 
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
                debug(polygon_from_SettingDate);
            } while (!polygon_from_SettingDate.equals("") || i >= 30);
Вопрос: Считать файл и передать в String[]

Доброго, нужно загрузить файл с сервера и прочитать его в String[] ,
сейчас у меня так, но это именно в файле java т.е чтобы добавлять картинки мне нужно будет писать затем билдить и выкладывать
Java
1
2
3
4
5
6
private String[] mStrings={
            "http://example.com/images/image0.png",
            "http://example.com/images/image1.png",
            "http://example.com/images/image10.png"
 
    };
Ответ: shavuz, дык вроде и нет вариантов, под базу SQLite делать я так не знаю пока еще скулайт на яве, т.к стоящих примеров не было

Сорри за оффтоп но есть ли мобильная версия этого форума?

Добавлено через 7 часов 0 минут
Кажется я еще нашел ошибку у себя
Java
1
2
3
4
5
6
7
    public void onItemClick(int mPosition)
    {
        String tempValues = mStrings[mPosition];
        Intent intent = new Intent(MainActivity.this, full_tricks.class);
        intent.putExtra("image", tempValues);
        startActivity(intent);
    }
во втором активити я объявляю так
Java
1
String image;
но показывает урл null

Добавлено через 9 часов 51 минуту
проблему решил, я забыл вставить
Java
1
image = getIntent().getExtras().getString("image");
Вопрос: Как отправить String по Bluetooth

Как отправить, чтобы было именно String, а не через массив байтов
Ответ: Все данные всегда передаются как массив байт. Иногда мы просто этого не видим, но именно так и передаются в том числе и String. Просто у него за кулисами вызывается метод getBytes(UTF-8) или какую вы там укажете кодировку.
Вопрос: Крашиться при запросе String number = c.getString(c.getColumnIndex("address");



крашится на 88 строке

почему?

проект -

Код Java(TM) 2 Platform Standard Edition 5.0
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
package com.vrs.smsapp;
 
/***
 *    Application Name : MessageBox 
 *    Author : Vimal Rughani
 *    Website : [url]http://pulse7.net[/url]
 *    For more details visit [url]http://pulse7.net/android/read-sms-message-inbox-sent-draft-android/[/url]
 */
 
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
 
public class MessageBox extends Activity implements OnClickListener {
    String[] Inbox_name=new String[100],
            Inbox_number=new String[100],
            Inbox_date=new String[100],
            Inbox_type=new String[100],
            Inbox_msg=new String[100];
 
     int pos=0;
    // GUI Widget
    Button btnSent, btnInbox, btnDraft;
    TextView lblMsg, lblNo;
    ListView lvMsg;
 
    // Cursor Adapter
    SimpleCursorAdapter adapter;
 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.messagebox);
 
        // Init GUI Widget
        btnInbox = (Button) findViewById(R.id.btnInbox);
        btnInbox.setOnClickListener(this);
 
        btnSent = (Button) findViewById(R.id.btnSentBox);
        btnSent.setOnClickListener(this);
 
        btnDraft = (Button) findViewById(R.id.btnDraft);
        btnDraft.setOnClickListener(this);
 
        lvMsg = (ListView) findViewById(R.id.lvMsg);
 
    }
 
    @Override
    public void onClick(View v) {
 
        if (v == btnInbox) {
 
            // Create Inbox box URI
            Uri inboxURI = Uri.parse("content://sms/inbox");
 
            // List required columns
    //      String[] reqCols = new String[] { "_id", "thread_id", "address", "person", "date",
        //          "body", "type" };
 
            // Get Content Resolver object, which will deal with Content
            // Provider
            ContentResolver cr = getContentResolver();
 
            // Fetch Inbox SMS Message from Built-in Content Provider
            Cursor c = cr.query(inboxURI,
                    new String[] { "_id", "thread_id", "address", "person", "date",
                            "body", "type" }, null, null, null); //"address like '+79034320258'"
 
 
 
            String[] columns =  new String[] {"address", "person", "date", "body",
                    "type"};
 
 
/*
            if (c.getCount() > 0) {
 
                String number = c.getString(c.getColumnIndex("address"));
                String name = c.getString(c.getColumnIndex("person"));//c.getString(c.getColumnIndex(columns[1]));
                String date = c.getString(c.getColumnIndex("date"));//c.getString(c.getColumnIndex(columns[2]));
                String msg =  c.getString(c.getColumnIndex("body"));//c.getString(c.getColumnIndex(columns[3]));
                String type =  c.getString(c.getColumnIndex("type"));//c.getString(c.getColumnIndex(columns[4]));
 
                //b.append(c.getString(c.getColumnIndex("type")));
 
            //  String number = c.getString(c.getColumnIndex("address"));
            //  String number = c.getString(c.getColumnIndex(columns[1]));
 
 
                Inbox_name[pos]= name;
                Inbox_number[pos] =number;
 
                if(date!=null)
                {
                    long l = Long.parseLong(date);
                    Date d = new Date(l);
                    Inbox_date[pos]= DateFormat.getDateInstance(DateFormat.LONG).format(d);
                    Inbox_type[pos]= DateFormat.getTimeInstance().format(d);
                }
                else
                {
                    Inbox_date[pos]=date;
                    Inbox_type[pos]=type;
                }
 
                Inbox_msg[pos]=msg;
                pos +=1;
            }
 
*/
 
            adapter = new SimpleCursorAdapter(this, R.layout.row, c,
                    columns, new int[] {
                    R.id.lblNumber, 0 , R.id.lblDate ,R.id.lblMsg ,R.id.lblTime});
 
 
            lvMsg.setAdapter(adapter);
 
//          lvMsg.setAdapter(new InboxArrayAdapter(this,Inbox_name,Inbox_number,Inbox_date,Inbox_type,Inbox_msg));
 
            // Attached Cursor with adapter and display in listview
/*
 
            String date = c.getString(c.getColumnIndex(columns[3]));
 
 
            if(date!=null)
            {
                long l = Long.parseLong(date);
                Date d = new Date(l);
                //Inbox_date[pos]
                    String date2;
                date2       = DateFormat.getDateInstance(DateFormat.LONG).format(d);
            //  Inbox_type[pos]
                String time2;
                time2       =DateFormat.getTimeInstance().format(d);
            }
 
        */
 
 
 
        }
 
 
 
        if (v == btnSent) {
 
            // Create Sent box URI
            Uri sentURI = Uri.parse("content://sms/sent");//sent
 
            // List required columns
            String[] reqCols = new String[] { "_id", "address", "body" };
 
            // Get Content Resolver object, which will deal with Content
            // Provider
            ContentResolver cr = getContentResolver();
 
            // Fetch Sent SMS Message from Built-in Content Provider
            Cursor c = cr.query(sentURI, reqCols, "address like '%+79034320258%'" , null, null);//"address like '+79034320258'"
 
            // Attached Cursor with adapter and display in listview
            adapter = new SimpleCursorAdapter(this, R.layout.row, c,
                    new String[] { "body", "address" }, new int[] {
                            R.id.lblMsg, R.id.lblNumber });
            lvMsg.setAdapter(adapter);
 
        }
 
        if (v == btnDraft) {
            // Create Draft box URI
            Uri draftURI = Uri.parse("content://sms/draft");
 
            // List required columns
            String[] reqCols = new String[] { "_id", "address", "body" };
 
            // Get Content Resolver object, which will deal with Content
            // Provider
            ContentResolver cr = getContentResolver();
 
            // Fetch Sent SMS Message from Built-in Content Provider
            Cursor c = cr.query(draftURI, reqCols, "address like '+79034320258'", null, null);
 
            // Attached Cursor with adapter and display in listview
            adapter = new SimpleCursorAdapter(this, R.layout.row, c,
                    new String[] { "body", "address" }, new int[] {
                            R.id.lblMsg, R.id.lblNumber });
            lvMsg.setAdapter(adapter);
 
        }
 
    }
}
Добавлено через 25 минут
В докуметации - abstract String getString(int columnIndex)
Returns the value of the requested column as a String.


но крашится ...
Ответ: Ответили , спасибо ,тему можно закрывать.
Вопрос: Передача ArrayList<String> через intent

Создан класс для передачи через intent:
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
package ru.frozik6k.lohouse;
 
import android.os.Parcel;
import android.os.Parcelable;
 
import java.util.ArrayList;
import java.util.List;
 
/**
 * Created by user on 05.04.2016.
 */
public class Event implements Parcelable{
 
    private long mID;
    private long mParent;
    private String mThingName;
    private String mDescription;
    private List<String> mFotos;
    private String mDate;
    private int mIsBox;
    private String mPath;
 
    public Event(long id, long parent, String thingName, String description, ArrayList<String> fotos, String date, int isBox, String path){
        mID = id;
        mParent = parent;
        mThingName = thingName;
        mDescription = description;
        mFotos = fotos;
        mDate = date;
        mIsBox = isBox;
        mPath = path;
    }
    public Event(Parcel in)
    {
        mID = in.readLong();
        mParent = in.readLong();
        mThingName = in.readString();
        mDescription = in.readString();
        in.readStringList(mFotos);
        mDate = in.readString();
        mIsBox = in.readInt();
        mPath = in.readString();
    }
 
 
 
    @Override
    public int describeContents() {
        return 0;
    }
 
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeLong(mID);
        dest.writeLong(mParent);
        dest.writeString(mThingName);
        dest.writeString(mDescription);
        dest.writeStringList(mFotos);
        dest.writeString(mDate);
        dest.writeInt(mIsBox);
        dest.writeString(mPath);
    }
 
    public static final Creator<Event> CREATOR = new Creator<Event>() {
        @Override
        public Event createFromParcel(Parcel in) {
            return new Event(in);
        }
 
        @Override
        public Event[] newArray(int size) {
            return new Event[size];
        }
    };
 
    public long getID() {
        return mID;
    }
 
    public long getParent() {
        return mParent;
    }
 
    public void setParent(long parent) {
        this.mParent = parent;
    }
 
    public String getThingName() {
        return mThingName;
    }
 
    public void setThingName(String thingName) {
        this.mThingName = thingName;
    }
 
    public String getDescription() {
        return mDescription;
    }
 
    public void setDescription(String description) {
        this.mDescription = description;
    }
 
    public ArrayList<String> getFotos() {
        return (ArrayList<String>) mFotos;
    }
 
    public void setFoto(ArrayList<String> fotos) {
        this.mFotos = fotos;
    }
 
    public String getDate() {
        return mDate;
    }
 
    public void setDate(String date) {
        this.mDate = date;
    }
 
    public int getIsBox() {
        return mIsBox;
    }
 
    public void setIsBox(int isBox) {
        this.mIsBox = isBox;
    }
 
    public String getPath(){
        return mPath;
    }
}
раньше не было переменной mFotos, и все передавалось нормально, а сейчас вылетает программа, при переходе на другую активность. Что я сделал не так?
Ответ: перегоняй объект в json и передавай одной строкой
примерный пример
Вопрос: Filterable не понимаю как в адаптере взять String значение по позиции ?

fragment:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
inputSearch.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence cs, int start, int count, int after) {
                OneFragment.this.adapter.getFilter().filter(cs);
            }
 
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
 
            }
 
            @Override
            public void afterTextChanged(Editable s) {
 
            }
        });


adapter:
Кликните здесь для просмотра всего текста
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
public class BoxAdapter extends BaseAdapter implements Filterable {
    Context ctx;
    LayoutInflater lInflater;
    ArrayList<Product> objects;
    Product p, pn;
    BoxAdapter(Context context, ArrayList<Product> products) {
        ctx = context;
        objects = products;
        lInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
 
    // кол-во элементов
    @Override
    public int getCount() {  return objects.size();}
 
    // элемент по позиции
    @Override
    public Object getItem(int position) { return objects.get(position); }
 
    // id по позиции
    @Override
    public long getItemId(int position) { return position; }
 
    // пункт списка
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // используем созданные, но не используемые view
        View view = convertView;
        if (view == null) {
            view = lInflater.inflate(R.layout.list_item, parent, false);
        }
 
        p = getProduct(position); 
 
        // заполняем View в пункте списка данными из товаров: наименование, цена и картинка
        ((TextView) view.findViewById(R.id.pro_item)).setText(p.name);
        ((TextView) view.findViewById(R.id.pro_item_price)).setText(p.price + "");
        ((TextView) view.findViewById(R.id.textCurs)).setText(p.curs + "");
       // ((ImageView) view.findViewById(R.id.ivImage)).setImageResource(p.image);
 
//        CheckBox cbBuy = (CheckBox) view.findViewById(R.id.cbBox);
//        // присваиваем чекбоксу обработчик
//        cbBuy.setOnCheckedChangeListener(myCheckChangList);
//        // пишем позицию
//        cbBuy.setTag(position);
//        // заполняем данными из товаров: в корзине или нет
//        cbBuy.setChecked(p.box);
        return view;
    }
 
    // товар по позиции
   Product getProduct(int position)   { return ((Product) getItem(position)); }
 
    @Override
    public Filter getFilter() {
        Filter filter = new Filter() {
 
            @SuppressWarnings("unchecked")
            @Override
            protected void publishResults(CharSequence constraint, FilterResults results) {
            objects =  (ArrayList<Product>) results.values;
               // arrayListNames = (List<String>) results.values;
                notifyDataSetChanged();
            }
 
            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
 
                FilterResults results = new FilterResults();
                ArrayList<String> FilteredArrayNames = new ArrayList<String>();
 
                // perform your search here using the searchConstraint String.
 
                constraint = constraint.toString().toLowerCase();
                for (int i = 0; i < objects.size(); i++) {
                    String dataNames =  objects.get(i).name;// НЕЗНАЮ ПРАВИЛЬНО ЛИ ТУТ???
                    if (dataNames.toLowerCase().startsWith(constraint.toString()))  {
                        FilteredArrayNames.add(dataNames);
                    }
                }
 
                results.count = FilteredArrayNames.size();
                results.values = FilteredArrayNames;
                Log.e("VALUES", results.values.toString());
 
                return results;
            }
        };
 
        return filter;
    }
}


класс Product:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Product {
 
    String  name;
    String     price;
    String     curs;
    int     image;
    boolean box;
 
    //Product(String _describe, String _price, int _image, boolean _box) {
    Product(String _describe, String _price, String _curs) {
        name = _describe;
        price = _price;
        curs = _curs;
//        image = _image;
//        box = _box;
    }
 
}


при вводе символа в EditText сыпется, ругается на эти строки:
Java
1
2
p = getProduct(position); 
Product getProduct(int position)   { return ((Product) getItem(position)); }
с такой ошибкой:
XML
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
FATAL EXCEPTION: main
                                                                      java.lang.ClassCastException: java.lang.String cannot be cast to com.dis.alprice.Product
                                                                          at com.dis.alprice.BoxAdapter.getProduct(BoxAdapter.java:67)
                                                                          at com.dis.alprice.BoxAdapter.getView(BoxAdapter.java:47)
                                                                          at android.widget.AbsListView.obtainView(AbsListView.java:2143)
                                                                          at android.widget.ListView.makeAndAddView(ListView.java:1831)
                                                                          at android.widget.ListView.fillSpecific(ListView.java:1320)
                                                                          at android.widget.ListView.layoutChildren(ListView.java:1630)
                                                                          at android.widget.AbsListView.onLayout(AbsListView.java:1994)
                                                                          at android.view.View.layout(View.java:14008)
                                                                          at android.view.ViewGroup.layout(ViewGroup.java:4373)
                                                                          at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1663)
                                                                          at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1521)
                                                                          at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
                                                                          at android.view.View.layout(View.java:14008)
                                                                          at android.view.ViewGroup.layout(ViewGroup.java:4373)
                                                                          at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1627)
                                                                          at android.view.View.layout(View.java:14008)
                                                                          at android.view.ViewGroup.layout(ViewGroup.java:4373)
                                                                          at android.support.design.widget.CoordinatorLayout.layoutChild(CoordinatorLayout.java:1037)
                                                                          at android.support.design.widget.CoordinatorLayout.onLayoutChild(CoordinatorLayout.java:747)
                                                                          at android.support.design.widget.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:42)
                                                                          at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1156)
                                                                          at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:760)
                                                                          at android.view.View.layout(View.java:14008)
                                                                          at android.view.ViewGroup.layout(ViewGroup.java:4373)
                                                                          at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
                                                                          at android.view.View.layout(View.java:14008)
                                                                          at android.view.ViewGroup.layout(ViewGroup.java:4373)
                                                                          at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1663)
                                                                          at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1521)
                                                                          at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
                                                                          at android.view.View.layout(View.java:14008)
                                                                          at android.view.ViewGroup.layout(ViewGroup.java:4373)
                                                                          at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
                                                                          at android.view.View.layout(View.java:14008)
                                                                          at android.view.ViewGroup.layout(ViewGroup.java:4373)
                                                                          at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1663)
                                                                          at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1521)
                                                                          at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
                                                                          at android.view.View.layout(View.java:14008)
                                                                          at android.view.ViewGroup.layout(ViewGroup.java:4373)
                                                                          at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
                                                                          at android.view.View.layout(View.java:14008)
                                                                          at android.view.ViewGroup.layout(ViewGroup.java:4373)
                                                                          at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1892)
                                                                          at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1711)
                                                                          at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989)
                                                                          at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351)
                                                                          at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
                                                                          at android.view.Choreographer.doCallbacks(Choreographer.java:562)
                                                                          at android.view.Choreographer.doFrame(Choreographer.java:532)
                                                                          at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
                                                                          at android.os.Handler.handleCallback(Handler.java:725)
                                                                          at android.os.Handler.dispatchMessage(Handler.java:92)
                                                                          at android.os.Looper.loop(Looper.java:137)
                                                                          at android.app.ActivityThread.main(ActivityThread.java:5041)
                                                                          at java.lang.reflect.Method.invokeNative(Native Method)
                                                                          at java.lang.reflect.Method.invoke(Method.java:511)
                                                                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
                                                                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
                                                                          at dalvik.system.NativeStart.main(Native Method)
что не правильно, может быть?
Ответ:
Но ваш способ тоже хорош.
хорош, но пока до сих пор одноногий..

Добавлено через 23 часа 9 минут
заработало вот таким способом:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 public void filter(String charText) {
        charText = charText.toLowerCase(Locale.getDefault());
        list.clear();
        if (charText.length() == 0) {
            list.addAll(objects);
        }
        else
        {
            for (Product prod : objects)
            {
                if (prod.getName().toLowerCase(Locale.getDefault()).contains(charText))
                {
                    list.add(prod);
                }
            }
        }
        notifyDataSetChanged();
    }