Метод selection (String selection, String[] selectionArgs, String sortOrder)
* *Пункт 2.* Внимательно и безопасно обрабатывайте полученные данные запроса. Здесь с помощью UriMatcher#match() и switch case проверяется, соответствует ли uri ожиданиям. Проверка других параметров здесь опущена из-за примера. См. «3.2. Внимательно и безопасно обрабатывать входные данные».
* *Пункт 3.* При возврате результата не включайте конфиденциальную информацию. Значение результата запроса зависит от приложения: если информация может быть использована вредоносными программами, её можно возвращать.
switch (sUriMatcher.match(uri)) {
case DOWNLOADS_CODE:
case DOWNLOADS_ID_CODE:
return sDownloadCursor;
case ADDRESSES_CODE:
case ADDRESSES_ID_CODE:
return sAddressCursor;
default:
throw new IllegalArgumentException("Неверный URI:" + uri);
}
Метод insert (Uri uri, ContentValues values)
* *Пункт 2.* Внимательно и безопасно обрабатывайте полученные данные запроса. Здесь с помощью UriMatcher#match() и switch case проверяется, соответствует ли uri ожиданиям. Проверка других параметров здесь опущена из-за примера. См. «3.2. Внимательно и безопасно обрабатывать входные данные».
* *Пункт 3.* При возвращении результата не включайте конфиденциальную информацию. Зависит от приложения, имеет ли выданный ID чувствительное значение или нет. Если нет проблем с тем, что информация будет использована вредоносными программами, она может быть возвращена как результат.
switch (sUriMatcher.match(uri)) {
case DOWNLOADS_CODE:
return ContentUris.withAppendedId(Download.CONTENT_URI, 3);
case ADDRESSES_CODE:
return ContentUris.withAppendedId(Address.CONTENT_URI, 4);
default:
throw new IllegalArgumentException("Неверный URI:" + uri);
}
Метод update (Uri uri, ContentValues values, String selection, String[] selectionArgs)
* *Пункт 2.* Внимательно и безопасно обрабатывайте полученные данные запроса. Здесь с помощью UriMatcher#match() и switch case проверяется, соответствует ли uri ожиданиям. Проверка других параметров здесь опущена из-за примера. См. «3.2. Внимательно и безопасно обрабатывать входные данные».
* *Пункт 3.* При возвращении результата не включайте конфиденциальную информацию. В зависимости от приложения количество обновлённых записей может иметь чувствительное значение. Если нет проблем с тем, что эта информация будет использована вредоносными программами, она может быть возвращена как результат.
switch (sUriMatcher.match(uri)) {
case DOWNLOADS_CODE:
return 5; // Возвращаем количество обновлённых записей
case DOWNLOADS_ID_CODE:
return 1;
case ADDRESSES_CODE:
return 15;
case ADDRESSES_ID_CODE:
return 1;
default:
throw new IllegalArgumentException("Неверный URI:" + uri);
}
Метод delete (Uri uri, String selection, String[] selectionArgs)
* *Пункт 2.* Внимательно и безопасно обрабатывайте полученные данные запроса. Здесь с помощью UriMatcher#match() и switch case проверяется, соответствует ли uri ожиданиям. Проверка других параметров здесь опущена из-за примера. См. «3.2. Внимательно и безопасно обрабатывать входные данные».
* *Пункт 3.* При возвращении результата не включайте конфиденциальную информацию. Количество удалённых записей в зависимости от приложения может иметь чувствительное значение. Если нет проблем с тем, что эта информация будет использована вредоносными программами, она может быть возвращена как результат.
switch (sUriMatcher.match(uri)) {
case DOWNLOADS_CODE: ```
return 10; // Возвращает количество удалённых записей case DOWNLOADS_ID_CODE: return 1; case ADDRESSES_CODE: return 20; case ADDRESSES_ID_CODE: return 1; default: throw new IllegalArgumentException("Неверный URI:" + uri); }
Ниже приведён пример активности с использованием общедоступного поставщика контента.
**Ключевые моменты (использование поставщика контента):**
4) Не отправлять конфиденциальную информацию.
5) Осторожно и безопасно обрабатывать полученные данные.
```java
package org.jssec.android.provider.publicuser;
import android.app.Activity;
import android.content.ContentValues;
import android.content.pm.ProviderInfo;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class PublicUserActivity extends Activity {
// Целевая информация о поставщике контента
private static final String AUTHORITY = "org.jssec.android.provider.publicprovider";
private interface Address {
public static final String PATH = "addresses";
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/" + PATH);
}
public void onQueryClick(View view) {
logLine("[Запрос]");
if (!providerExists(Address.CONTENT_URI)) {
logLine("Поставщик контента не существует.");
return;
}
Cursor cursor = null;
try {
// *** Пункт 4 *** Не отправляйте конфиденциальную информацию,
// поскольку целевой поставщик контента может быть вредоносным ПО.
// Если нет проблем с получением информации вредоносным ПО, её можно включить в запрос.
cursor = getContentResolver().query(Address.CONTENT_URI, null, null, null, null);
// *** Пункт 5 *** При получении результата осторожно и безопасно обрабатывайте полученные данные.
// Опущено, так как это образец. Пожалуйста, обратитесь к разделу «3.2. Осторожная и безопасная обработка входных данных».
if (cursor == null) {
logLine("Курсор равен нулю");
} else {
boolean moved = cursor.moveToFirst();
while (moved) {
logLine(String.format("%d, %s", cursor.getInt(0), cursor.getString(1)));
moved = cursor.moveToNext();
}
}
} finally {
if (cursor != null) cursor.close();
}
}
public void onInsertClick(View view) {
logLine("[Вставка]");
if (!providerExists(Address.CONTENT_URI)) {
logLine(" Поставщик контента не существует.");
return;
}
// *** Пункт 4 *** Не отправляйте конфиденциальную информацию,
// поскольку целевой поставщик контента может быть вредоносным ПО.
// Если нет проблем с получением информации вредоносным ПО, её можно включить в запрос.
ContentValues values = new ContentValues();
values.put("city", "Tokyo");
Uri uri = getContentResolver().insert(Address.CONTENT_URI, values);
// *** Пункт 5 *** При получении результата осторожно и безопасно обрабатывайте полученные данные.
// Опущено, так как это образец. Пожалуйста, обратитесь к разделу «3.2. Осторожная и безопасная обработка входных данных».
logLine("uri:" + uri);
}
public void onUpdateClick(View view) {
logLine("[Обновление]");
if (!providerExists(Address.CONTENT_URI)) {
logLine(" Поставщик контента не существует.");
return;
}
// *** Пункт 4 *** Не отправляйте конфиденциальную информацию,
// поскольку целевой поставщик контента может быть вредоносным ПО.
// Если нет проблем с получением информации вредоносным ПО, её можно включить в запрос.
ContentValues values = new ContentValues();
values.put("city", "Tokyo");
String where = "_id = ?";
String[] args = {"4"};
int count = getContentResolver().update(Address.CONTENT_URI, values, where, args);
// *** Пункт 5 *** При получении результата осторожно и безопасно обрабатывайте полученные данные.
// Опущено, так как это образец. Пожалуйста, обратитесь к разделу «3.2. Осторожная и безопасная обработка входных данных».
}
``` ```
public void onUpdateClick(View view) {
logLine(String.format(" %s записей обновлено", count));
}
public void onDeleteClick(View view) {
logLine("[Удалить]");
if (!providerExists(Address.CONTENT_URI)) {
logLine(" Поставщик контента не существует.");
return;
}
// *** ТОЧКА 4 *** Не отправляйте конфиденциальную информацию.
// поскольку целевой поставщик контента может быть вредоносным ПО.
// Если нет проблем, когда информация будет получена вредоносным ПО, её можно включить в запрос.
int count = getContentResolver().delete(Address.CONTENT_URI, null, null);
// *** ТОЧКА 5 *** При получении результата обрабатывайте данные результата тщательно и безопасно.
// Опущено, так как это пример. Пожалуйста, обратитесь к разделу «3.2 Тщательная и безопасная обработка входных данных».
logLine(String.format(" Удалено %s записей", count));
}
private boolean providerExists(Uri uri) {
ProviderInfo pi = getPackageManager().resolveContentProvider(uri.getAuthority(), 0);
return (pi != null);
}
private TextView mLogView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mLogView = (TextView)findViewById(R.id.logview);
}
private void logLine(String line) {
mLogView.append(line);
mLogView.append("¥n");
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )