Gagal Membaca file Gambar dari folder Aset dan membagikannya menggunakan Intent di Android?

Ikuti tutorial ini untuk membaca gambar dari folder aset. Berikut ini tautannya Tautan untuk membaca gambar dari folder Aset Kelas konten diperluas dari ContentProvider tetapi saya mendapatkan kesalahan di Baris pertama. Kesalahan ini ada di baris pertama Baris Kelas Konten. Tolong beri tahu saya hal-hal apa saja yang perlu saya terapkan di Kelas Konten1 .Jawa

Multiple markers at this line
    - The type Contentclass1 must implement the inherited abstract method ContentProvider.onCreate()
    - The type Contentclass1 must implement the inherited abstract method ContentProvider.delete(Uri, String, String[])
    - The type Contentclass1 must implement the inherited abstract method ContentProvider.query(Uri, String[], String, String[], 
     String)
    - The type Contentclass1 must implement the inherited abstract method ContentProvider.getType(Uri)
    - The type Contentclass1 must implement the inherited abstract method ContentProvider.update(Uri, ContentValues, String, 
     String[])
    - The type Contentclass1 must implement the inherited abstract method ContentProvider.insert(Uri, ContentValues)

Kontenkelas1.java

package com.example.shareima;
import java.io.FileNotFoundException;
import java.io.IOException;
import android.content.ContentProvider;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.net.Uri;

public class Contentclass1 extends ContentProvider
{
    @Override
    public AssetFileDescriptor openAssetFile(Uri uri,String mode) throws FileNotFoundException {
        AssetManager am = getContext().getAssets();
        String file_name = uri.getLastPathSegment();
        if(file_name == null) 
            throw new FileNotFoundException();
        AssetFileDescriptor afd = null;
        try {
            afd = am.openFd(file_name);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return afd;//super.openAssetFile(uri, mode);
    }
}

Manifes.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.shareima"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="12"
        android:targetSdkVersion="17" />
 <uses-permission android:name="android.permission.INTERNET"/>
 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
 <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.shareima.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
         <provider android:name=".Contentclass1"               
            android:authorities="com.example.shareima"/>
 </application>
 </manifest>

person user3233280    schedule 27.01.2014    source sumber


Jawaban (1)


ContentProvider adalah kelas abstrak. Artinya, ia memiliki definisi untuk metode tertentu tetapi tidak menyediakan implementasinya. Oleh karena itu, ketika Anda memperluas ContentProvider, Anda perlu menyediakan implementasi metode ini di kelas Anda (bahkan jika Anda tidak berniat memanggilnya dalam kode Anda). Inilah yang dimaksud dengan tutorial ketika dikatakan "implementasi stub untuk metode abstrak yang diperlukan" dan juga apa yang dimaksud dengan kesalahan kompilasi Anda.

Anda dapat menerapkannya dengan menambahkan yang berikut ke kelas Anda:

@Override
public int delete(Uri arg0, String arg1, String[] arg2) {
    return 0;
}

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

@Override
public Uri insert(Uri arg0, ContentValues arg1) {
    return null;
}

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

@Override
public Cursor query(Uri arg0, String[] arg1, String arg2, String[] arg3, String arg4) {
    return null;
}

@Override
public int update(Uri arg0, ContentValues arg1, String arg2, String[] arg3) {
    return 0;
}

Ini disebut sebagai 'stub' karena mereka tidak melakukan pemrosesan apa pun (selain mengembalikan nilai nol/nol/salah).

person NigelK    schedule 27.01.2014
comment
Apa isi tutorial LOC ini Uri theUri = Uri.parse(content://com.domainanda.whatever/someFileInAssetsFolder); - person user3233280; 27.01.2014
comment
Jika tutorialnya memiliki 'com.yourdomain.whatever', ubahlah ke nama paket Anda yang menurut saya adalah 'com.example.shareima' dalam kasus Anda. Kemudian ganti 'someFileInAssetsFolder' dengan nama file yang ingin Anda bagikan (yang telah Anda tambahkan ke Assets di proyek Anda). Jadi sesuatu seperti: Uri.parse(content://com.example.shareima/myfile.txt) - person NigelK; 27.01.2014
comment
bisakah kamu beritahu saya apa masalahnya dalam tutorial ini hanya berbagi gambar melalui Gmail sementara gagal berbagi di FB, Bluetooth dll - person user3233280; 27.01.2014
comment
Tetapkan pemilih pada Intent: Intent.createChooser(theIntent, ...share to); Itu akan memungkinkan pengguna untuk memilih dari semua aplikasi terinstal yang mampu memproses file bersama. - person NigelK; 27.01.2014
comment
ya saya telah melakukan hal yang sama dan membuka semua aplikasi juga tetapi dalam kasus bluetooth saya mendapat pesan File tidak terkirim dan serupa di FB sementara berhasil dikirim dari aplikasi Gmail - person user3233280; 27.01.2014
comment
Saya menyesal tidak mengetahui alasannya. Saya sarankan mengajukan pertanyaan baru untuk masalah baru yang Anda hadapi. - person NigelK; 27.01.2014