gpt4 book ai didi

java - 无法在第 42 行中产生静态引用错误

转载 作者:行者123 更新时间:2023-11-29 09:32:18 25 4
gpt4 key购买 nike

代码是获取联系人列表。但是对于一个错误。请帮我解决。第 42 行的 mContext 返回错误“无法从类型 contextwrapper 对非静态方法 getapplicationcontext() 进行静态引用”。

package com.example.demo;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.AssetFileDescriptor;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.ContactsContract;
import android.widget.ImageButton;

import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;

public class MainActivity extends Activity {

ImageButton imageButton;
Context mContext = getApplicationContext();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

addListenerOnButton();
data();
getVcardString();
}
public static void getVcardString() {


String path = null;
String vfile = null;;
vfile = "Contacts.vcf";

Cursor phones = mContext.getContentResolver(). query(ContactsContract. CommonDataKinds.Phone.CONTENT_URI, null,null, null, null);

phones.moveToFirst();
Log.i("Number of contacts", "cursorCount" +phones.getCount());
for(int i =0;i<phones.getCount();i++) {

String lookupKey = phones.getString(phones.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));
Log.i("lookupKey", " " +lookupKey);
Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_VCARD_URI, lookupKey);
AssetFileDescriptor fd;

try {
fd = mContext.getContentResolver().openAssetFileDescriptor(uri, "r");
FileInputStream fis = fd.createInputStream();
byte[] buf = new byte[(int) fd.getDeclaredLength()];
fis.read(buf);
String VCard = new String(buf);

path = Environment.getExternalStorageDirectory().toString() + File.separator + vfile;
FileOutputStream mFileOutputStream = new FileOutputStream(path, true);
mFileOutputStream.write(VCard.toString().getBytes());

phones.moveToNext();

File filevcf = new File(path);
Log.i("file", "file" +filevcf);

}catch(Exception e1) {
e1.printStackTrace();
}
}
Log.i("TAG", "No Contacts in Your Phone");
}

protected void data() {
File filelocation = filevcf ;
Intent sharingIntent = new Intent(Intent.ACTION_SEND);
sharingIntent.setType("vnd.android.cursor.dir/email");
sharingIntent.setType("application/x-vcard");
sharingIntent.putExtra(Intent.EXTRA_EMAIL, "mail@gmail.com" ); sharingIntent.putExtra(Intent.EXTRA_STREAM,Uri.parse("file://"+filelocation.getAbsolutePath()));
startActivity(Intent.createChooser(sharingIntent, "Send email"));
}

public void addListenerOnButton() {
final Context context = getApplicationContext();


imageButton = (ImageButton) findViewById(R.id.imageButton1);

imageButton.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {


Intent intent1 = new Intent(context, secondjav.class);
startActivity(intent1);


}

});

}

}

最佳答案

如果您真的需要您的方法“getVcardString()”保持静态,那么您应该这样做:为您的应用程序创建扩展 android.app.Application 的新类

public class MyApplication extends Application {
static Context appContext;

public MyApplication() {
super();
}

@Override
public void onCreate() {
super.onCreate();

appContext = getApplicationContext();
}

public static Context getContext() {
return appContext;
}
}

将 list 中的此属性添加到应用程序标记:

android:name=".MyApplication"

并在您的 getVcardString() 方法中使用 MyApplication 类的静态方法而不是使用 mContext:

MyApplication.getContext()

通过这种方式,您可以在应用程序的任何位置访问应用程序上下文。

关于java - 无法在第 42 行中产生静态引用错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22931498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com