【问题标题】:Cannot resolve method 'openFileInput(java.lang.String)'无法解析方法“openFileInput(java.lang.String)”
【发布时间】:2018-02-17 18:03:02
【问题描述】:

我有一个广播接收器类,我想使用我的方法“ReadInternalData”来读取我的应用程序中的内部数据,但我无法解决Cannot resolve method 'openFileInput(java.lang.String) 的问题)' 在 openFileInput 上!

import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;

public class SmsBroadcastReceiver extends BroadcastReceiver{
  public void onReceive(Context context, Intent intent){
    //Some code here
  }
  //Some code here

  public String ReadInternalData(String str){
    String temp="";
    try{
        FileInputStream fin = openFileInput(str);
        int c;
        while( (c = fin.read()) != -1)
        {
            temp = temp + Character.toString((char)c);
        }
    } catch(Exception e)
    {
        e.printStackTrace();
    }
    return temp;
}
}

我尝试使用上下文:

FileInputStream fin = SmsBroadcastReceiver.openFileInput(str); 

但它不起作用!

编辑:好的对不起,我虽然“SmsBroadcastReceiver”是一个上下文,但是,我的课程既不是服务活动,我想在我的应用程序中读取内部数据?我看不出有任何理由给我的问题打负分!

【问题讨论】:

  • BroadcastReceiver class 没有这个方法,所以更大的问题是为什么你认为这个代码应该工作。
  • 而且您似乎没有在上面的代码中的任何地方使用上下文,即使您声明您尝试过。一旦你开始使用上下文,还要检查参数的数量。
  • 您可能会投票失败,因为您可以通过简单地查看 api 来回答您的问题,然后再询问您在哪里可以看到 SmsBroadcastReceiver 可以使用哪些方法,并且它没有从 Context 继承,实际上您在对该问题的第二条评论中收到了指向该 API 的链接,但没有解决它。

标签: java android android-context android-broadcastreceiver


【解决方案1】:

你应该替换

 FileInputStream fin = openFileInput(str);

FileInputStream fin = getApplicationContext().openFileInput(str);

正如thread中提到的那样

【讨论】:

  • 感谢您的回答,它不起作用,您的方法在 Activity 中运行良好,而我所拥有的不是 Activity!
  • @Sonali Kale 给出了使用 context 的完整代码,你必须使用 onRecieve 方法中的 context 但也许你跳过了 private Context context 行;来自 Sonali 的回答
【解决方案2】:

以正确的方式使用上下文尝试 this.call ReadInternalData() in onReceive

    public class SmsBroadcastReceiver extends BroadcastReceiver{
private Context context;

      public void onReceive(Context context, Intent intent){

this.context = context;
        //Some code here
      }
      //Some code here

      public String ReadInternalData(String str){
        String temp="";
        try{
            FileInputStream fin = context.openFileInput(str);
            int c;
            while( (c = fin.read()) != -1)
            {
                temp = temp + Character.toString((char)c);
            }
        } catch(Exception e)
        {
            e.printStackTrace();
        }
        return temp;
    }
    }

【讨论】:

【解决方案3】:

这项工作与我合作,感谢每一位试图解决我问题的人。

import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;

public class SmsBroadcastReceiver extends BroadcastReceiver{
  public void onReceive(Context context, Intent intent){
    //Some code here
    Log.i(TAG, "" + +ReadInternalData("variableName", context));
  }
  //Some code here

  public String ReadInternalData(String str, Context context){

    String temp="";
    try{
        FileInputStream fin = context.openFileInput(str);
        int c;
        while( (c = fin.read()) != -1)
        {
            temp = temp + Character.toString((char)c);
        }
    } catch(Exception e)
    {
        e.printStackTrace();
    }
    return temp;
  }
 }

【讨论】:

  • 你能写下你为什么不投票给我的答案吗?这对我有用,解决了我的问题!
猜你喜欢
  • 2019-09-05
  • 1970-01-01
  • 2019-03-30
  • 2018-05-10
  • 1970-01-01
  • 1970-01-01
  • 2016-06-04
  • 1970-01-01
  • 2015-03-30
相关资源
最近更新 更多