如何从和Uri获取Cursor来获取MatrixCursor

时间:2016-08-12 23:14:01

标签: java android android-intent cursor uri

我真的不明白我在做什么,但它现在很有效。但是我无法获得光标我得到了这个课程

package fr.hag.switch_.hag;

import android.app.SearchManager;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.net.Uri;
import android.provider.BaseColumns;
import android.support.annotation.Nullable;
import android.util.Log;

import org.json.JSONArray;
import java.util.ArrayList;
import java.util.List;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;


/**
 * Permet de rechercher sur le serveur de hag
 */
public class search extends ContentProvider {
List<String> cities;

@Override
public boolean onCreate() {
    return false;
}

@Override
public Cursor query(Uri uri, String[] projection, String selection,
                    String[] selectionArgs, String sortOrder) {
    if (cities == null || cities.isEmpty()){
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url("https://dl.dropboxusercontent.com/u/6802536/cidades.json")
                .build();

        try {
            Response response = client.newCall(request).execute();
            String jsonString = response.body().string();
            JSONArray jsonArray = new JSONArray(jsonString);

            cities = new ArrayList<>();

            int lenght = jsonArray.length();
            for (int i = 0; i < lenght; i++) {
                String city = jsonArray.getString(i);
                cities.add(city);
            }

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

    MatrixCursor cursor = new MatrixCursor(
            new String[] {
                    BaseColumns._ID,
                    SearchManager.SUGGEST_COLUMN_TEXT_1,
                    SearchManager.SUGGEST_COLUMN_INTENT_DATA_ID
            }
    );
    if (cities != null) {
        String query = uri.getLastPathSegment().toUpperCase();
        int limit = Integer.parseInt(uri.getQueryParameter(SearchManager.SUGGEST_PARAMETER_LIMIT));

        int lenght = cities.size();
        for (int i = 0; i < lenght && cursor.getCount() < limit; i++) {
            String city = cities.get(i);
            if (city.toUpperCase().contains(query)){
                cursor.addRow(new Object[]{ i, city, i });
            }
        }
    }
    return cursor;
}

@Nullable
@Override
public String getType(Uri uri) {
    return null;
}

@Nullable
@Override
public Uri insert(Uri uri, ContentValues values) {
    return null;
}

@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
    return 0;
}

@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
    return 0;
}

}

我有一个这样的Uri

content://fr.hag.switch_.hag.city/232

感谢uri,我如何得到这个城市的名字?

我的提供者

<provider
        android:name=".search"
        android:authorities="fr.hag.switch_.hag.citysuggestion"
        android:enabled="true"
        android:exported="true" />

searchable config .xml

<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:hint="search"
android:label="@string/app_name"
android:voiceSearchMode="showVoiceSearchButton|launchRecognizer"
android:searchSuggestAuthority="fr.hag.switch_.hag.citysuggestion"
android:searchSuggestIntentAction="android.intent.action.VIEW"
android:searchSuggestIntentData="content://fr.hag.switch_.hag.city"/>

我的主要活动方法

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main, menu);
            // On récupère le layout du menu
    // Puis on défini son item comme une search barre
    MenuItem searchItem = menu.findItem(R.id.search);
    SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
    // Mise en écoute de la search
    searchView.setOnQueryTextListener(this);
    // ...
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    searchView.setSearchableInfo(searchManager.getSearchableInfo(
            new ComponentName(this, searchActivity.class)));
    searchView.setIconifiedByDefault(false);

    return true;
}

和searchActivity

public class searchActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_search2);
    TextView a = (TextView)findViewById(R.id.textView4);

    Intent intent = getIntent();
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
        String query = intent.getStringExtra(SearchManager.QUERY);
        Log.v("search", "Searching by: "+ query);

    } else if (Intent.ACTION_VIEW.equals(intent.getAction())) {
        String uri = intent.getDataString();
        Uri w = Uri.parse(uri);

        Cursor cu = getContentResolver().query(w,null, null, null, null);
        if(cu != null)
            Log.v("YE","S");
        else Log.v("NO","PE");

    }
}

}

我从stackoverflow读了很多话题,人们使用这个

Cursor cu = getContentResolver().query(uri,null, null, null, null);

但我的光标总是返回null

我能得到一些帮助吗?谢谢!

0 个答案:

没有答案